/**
* 转载请注明出处, 由于个人技术能力有限, 英语水平欠缺,
* 有翻译不合适或错误的地方, 请纠正,
* 希望不要因为我的错误误导您, 希望您的智慧可以加入.
* @translator: selfimpr
* @mail: lgg860911@yahoo.com.cn
* @blog: http://blog.youkuaiyun.com/lgg201
*/
内存 HASH 数据库 API
typedef struct { // 内存 hash 数据库
void **mmtxs; // 全局锁对象
void *imtx; // 基于路径的锁对象
TCMAP **maps; // 内部 TCMAP 对象
in titer; //maps 的迭代位置
}
TCMDB *tcmdbnew();
创建一个桶大小为 TCMDBDEFBNUM(65536) 的数据库 .
TCMDB *tcmdbnew2(uint32_t bnum);
创建有指定 bnum 的桶数组的数据库 . 实际上是创建了 TCMDBMNUM( 默认 8) 个 TCMAP 对象 , 每个 map 中的桶大小为 bnum / TCMDBMNUM + 17.
void tcmdbdel(TCMDB *mdb);
删除指定的内存数据库
void tcmdbput(TCMDB *mdb, const void *kbuf, int ksiz, const void *vbuf, int vsiz);
通过对 key 进行 hash 得到要存入的 map, 然后调用 map 的 tcmapput 插入
void tcmdbput2(TCMDB *mdb, const char *kstr, const char *vstr);
tcmdbput 的字符串版本 .
bool tcmdbputkeep(TCMDB *mdb, const void *kbuf, int ksiz, const void *vbuf, int vsiz);
向数据库中插入一条记录 , 如果已经存在 , 则无操作
bool tcmdbputkeep2(TCMDB *mdb, const char *kstr, const char *vstr);
tcmdbputkeep 的字符串版本
void tcmdbputcat(TCMDB *mdb, const void *kbuf, int ksiz, const void *vbuf, int vsiz);
向数据库中插入一条记录 , 如果已经存在 , 则将新的值连接到原始值末尾
void tcmdbputcat2(TCMDB *mdb, const char *kstr, const char *vstr);
tcmdbputcat 的字符串版本
bool tcmdbout(TCMDB *mdb, const void *kbuf, int ksiz);
从数据库中删除指定 key 的元素
bool tcmdbout2(TCMDB *mdb, const char *kstr);
tcmdbout 的字符串版本
void *tcmdbget(TCMDB *mdb, const void *kbuf, int ksiz, int *sp);
从数据库中检索指定 key 对应的值 , sp 用来记录值的大小 .
char *tcmdbget2(TCMDB *mdb, const char *kstr);
tcmdbget 的字符串版本
int tcmdbvsiz(TCMDB *mdb, const void *kbuf, int ksiz);
返回指定 key 对应的值的内存大小
int tcmdbvsiz2(TCMDB *mdb, const char *kstr);
tcmdbvsiz 的字符串 key 版本
void tcmdbiterinit(TCMDB *mdb);
迭代器初始化 , 首先通过 tcmapiterinit 初始化每个 map 的迭代器 , 然后重置 mdb 的 iter
void *tcmdbiternext(TCMDB *mdb, int *sp);
获取下一条记录 , sp 将记录这条记录的值的大小
char *tcmdbiternext2(TCMDB *mdb);
tcmdbiternext 的字符串版本
TCLIST *tcmdbfwmkeys(TCMDB *mdb, const void *pbuf, int psiz, int max);
获取当前数据库中所有和指定 key(pbuf 至 pbuf+psiz 的内存内容 ) 相同 ( 也就是说以指定 key 开头 ) 的所有 key, 如果指定 max, 就只获取 max 个 , 该匹配是逐个从 8 个 map 里去查找
TCLIST *tcmdbfwmkeys2(TCMDB *mdb, const char *pstr, int max);
tcmdbfwmkeys 的字符串版本
uint64_t tcmdbrnum(TCMDB *mdb);
返回当前数据库的记录数
uint64_t tcmdbmsiz(TCMDB *mdb);
返回当前数据库的内存占用
int tcmdbaddint(TCMDB *mdb, const void *kbuf, int ksiz, int num);
对数据库中指定 key 对应的值加 num 存储 , 并返回增加后的值 .
double tcmdbadddouble(TCMDB *mdb, const void *kbuf, int ksiz, double num);
tcmdbaddint 的 double 版本 .
void tcmdbvanish(TCMDB *mdb);
清除当前数据库中的所有记录
void tcmdbcutfront(TCMDB *mdb, int num);
移除数据库中的前 num 条记录 . 在实际的移除中 , 可能移除的并不是前 num 条 . 而是通过 num / TCMDBMNUM + 1 计算到要从每个 map 中移除多少条记录 , 然后通过 map 的 tcmapcutfront 接口进行移除