实现全量持久化:save操作落盘,启动时读取到内存
增量持久化:执行修改操作时将cmd追加到log中,启动时逐条取出顺序执行
This commit is contained in:
@@ -20,26 +20,26 @@ kvs_hash_t global_hash;
|
||||
|
||||
//Connection
|
||||
// 'C' + 'o' + 'n'
|
||||
static int _hash(const void *key, size_t key_len, int size) {
|
||||
static int _hash(const void *key, uint32_t key_len, int size) {
|
||||
if (!key || size <= 0) return -1;
|
||||
|
||||
const uint8_t *p = (const uint8_t *)key;
|
||||
uint32_t sum = 0;
|
||||
for (size_t i = 0; i < key_len; i++) {
|
||||
for (uint32_t i = 0; i < key_len; i++) {
|
||||
sum += p[i];
|
||||
}
|
||||
return sum % size;
|
||||
}
|
||||
|
||||
static int _key_equal(const hashnode_t *node, const void *key, size_t key_len) {
|
||||
static int _key_equal(const hashnode_t *node, const void *key, uint32_t key_len) {
|
||||
if (!node || !key) return 0;
|
||||
if (!node->key) return 0;
|
||||
if (node->key_len != key_len) return 0;
|
||||
return memcmp(node->key, key, key_len) == 0;
|
||||
}
|
||||
|
||||
static hashnode_t *_create_node(const void *key, size_t key_len,
|
||||
const void *value, size_t value_len) {
|
||||
static hashnode_t *_create_node(const void *key, uint32_t key_len,
|
||||
const void *value, uint32_t value_len) {
|
||||
hashnode_t *node = (hashnode_t*)kvs_malloc(sizeof(hashnode_t));
|
||||
if (!node) return NULL;
|
||||
memset(node, 0, sizeof(*node));
|
||||
@@ -113,7 +113,7 @@ void kvs_hash_destroy(kvs_hash_t *hash) {
|
||||
/*
|
||||
* @return: <0 error; =0 success; >0 exist
|
||||
*/
|
||||
int kvs_hash_set_bin(kvs_hash_t *hash, const void *key, size_t key_len, const void *value, size_t value_len) {
|
||||
int kvs_hash_set_bin(kvs_hash_t *hash, const void *key, uint32_t key_len, const void *value, uint32_t value_len) {
|
||||
if (!hash || !hash->nodes || !key || key_len == 0 || !value) return -1;
|
||||
|
||||
int idx = _hash(key, key_len, MAX_TABLE_SIZE);
|
||||
@@ -140,7 +140,7 @@ int kvs_hash_set_bin(kvs_hash_t *hash, const void *key, size_t key_len, const vo
|
||||
/*
|
||||
* get 返回:value 指针(由 hash 持有),并通过 out_value_len 返回长度
|
||||
*/
|
||||
void *kvs_hash_get_bin(kvs_hash_t *hash, const void *key, size_t key_len, size_t *out_value_len) {
|
||||
void *kvs_hash_get_bin(kvs_hash_t *hash, const void *key, uint32_t key_len, uint32_t *out_value_len) {
|
||||
if (!hash || !hash->nodes || !key || key_len == 0 || !out_value_len) return NULL;
|
||||
*out_value_len = 0;
|
||||
|
||||
@@ -166,7 +166,7 @@ void *kvs_hash_get_bin(kvs_hash_t *hash, const void *key, size_t key_len, size_
|
||||
/*
|
||||
* @return <0 error; =0 success; >0 no exist
|
||||
*/
|
||||
int kvs_hash_mod_bin(kvs_hash_t *hash, const void *key, size_t key_len, const void *value, size_t value_len) {
|
||||
int kvs_hash_mod_bin(kvs_hash_t *hash, const void *key, uint32_t key_len, const void *value, uint32_t value_len) {
|
||||
|
||||
if (!hash || !hash->nodes || !key || key_len == 0 || !value) return -1;
|
||||
|
||||
@@ -210,7 +210,7 @@ int kvs_hash_count(kvs_hash_t *hash) {
|
||||
/*
|
||||
* @return 0 success; <0 error/noexist
|
||||
*/
|
||||
int kvs_hash_del_bin(kvs_hash_t *hash, const void *key, size_t key_len) {
|
||||
int kvs_hash_del_bin(kvs_hash_t *hash, const void *key, uint32_t key_len) {
|
||||
if (!hash || !key || key_len == 0) return -2;
|
||||
|
||||
int idx = _hash(key, key_len, MAX_TABLE_SIZE);
|
||||
@@ -258,8 +258,8 @@ int kvs_hash_del_bin(kvs_hash_t *hash, const void *key, size_t key_len) {
|
||||
/*
|
||||
* @return 0 exist, 1 no exist
|
||||
*/
|
||||
int kvs_hash_exist_bin(kvs_hash_t *hash, const void *key, size_t key_len) {
|
||||
size_t vlen = 0;
|
||||
int kvs_hash_exist_bin(kvs_hash_t *hash, const void *key, uint32_t key_len) {
|
||||
uint32_t vlen = 0;
|
||||
void *value = kvs_hash_get_bin(hash, key, key_len, &vlen);
|
||||
return value ? 0 : 1;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user