@codai/cbd
Version:
Codai Better Database - High-Performance Vector Memory System with HPKV-inspired architecture and MCP server
129 lines • 3.17 kB
TypeScript
/**
* Key-Value Storage Engine - Redis-compatible key-value store
* Part of CBD Universal Database Phase 3
*/
import { EventEmitter } from 'events';
export interface KeyValuePair {
key: string;
value: any;
type: 'string' | 'number' | 'boolean' | 'object' | 'array';
ttl?: number;
createdAt: Date;
updatedAt: Date;
expiresAt?: Date;
}
export interface KeyValueOptions {
ttl?: number;
nx?: boolean;
xx?: boolean;
}
export interface KeyValueStats {
totalKeys: number;
memoryUsage: number;
hitRate: number;
missRate: number;
expiredKeys: number;
keyTypes: Map<string, number>;
averageKeySize: number;
averageValueSize: number;
}
export interface ScanResult {
cursor: number;
keys: string[];
}
export declare class KeyValueStorageEngine extends EventEmitter {
private store;
private expirationIndex;
private stats;
constructor();
initialize(): Promise<void>;
/**
* Set a key-value pair
*/
set(key: string, value: any, options?: KeyValueOptions): Promise<boolean>;
/**
* Get a value by key
*/
get(key: string): Promise<any>;
/**
* Delete a key
*/
delete(key: string): Promise<boolean>;
/**
* Check if key exists
*/
exists(key: string): Promise<boolean>;
/**
* Set TTL for a key
*/
expire(key: string, ttl: number): Promise<boolean>;
/**
* Get TTL for a key
*/
ttl(key: string): Promise<number>;
/**
* Get multiple keys
*/
mget(keys: string[]): Promise<(any | null)[]>;
/**
* Set multiple key-value pairs
*/
mset(pairs: Array<{
key: string;
value: any;
options?: KeyValueOptions;
}>): Promise<boolean>;
/**
* Increment a numeric value
*/
incr(key: string, by?: number): Promise<number>;
/**
* Decrement a numeric value
*/
decr(key: string, by?: number): Promise<number>;
/**
* Scan keys with pattern matching
*/
scan(cursor?: number, pattern?: string, count?: number): Promise<ScanResult>;
/**
* Get all keys matching a pattern
*/
keys(pattern?: string): Promise<string[]>;
/**
* Get random key
*/
randomKey(): Promise<string | null>;
/**
* Rename a key
*/
rename(oldKey: string, newKey: string): Promise<boolean>;
/**
* Get type of value at key
*/
type(key: string): Promise<string | null>;
/**
* Flush all keys
*/
flushAll(): Promise<void>;
/**
* Get database statistics
*/
getKeyValueStats(): Promise<KeyValueStats>;
/**
* Get all keys (use with caution on large datasets)
*/
getAllKeys(): Promise<string[]>;
/**
* Get key-value pair info
*/
info(key: string): Promise<KeyValuePair | null>;
private getValueType;
private addToExpirationIndex;
private removeFromExpirationIndex;
private getRemainingTTL;
private patternToRegex;
private estimateValueSize;
private startExpirationCleanup;
private cleanupExpiredKeys;
}
//# sourceMappingURL=KeyValueStorageEngine.d.ts.map