实现全量持久化:save操作落盘,启动时读取到内存
增量持久化:执行修改操作时将cmd追加到log中,启动时逐条取出顺序执行
This commit is contained in:
41
kvstore.h
41
kvstore.h
@@ -30,6 +30,9 @@
|
||||
|
||||
#define BIN_SAFE 1
|
||||
|
||||
#define KVS_CMD_LOG_FILE "kvs_cmd_log.db"
|
||||
#define KVS_ARRAY_FILE "kvs_array.db"
|
||||
|
||||
|
||||
// typedef int (*msg_handler)(char *msg, int length, char *response);
|
||||
typedef int (*msg_handler)(char *request, int request_length, int *consumed_out, char *response, int *response_length);
|
||||
@@ -47,10 +50,10 @@ extern int ntyco_start(unsigned short port, msg_handler handler);
|
||||
|
||||
typedef struct kvs_array_item_s {
|
||||
uint8_t *key;
|
||||
size_t key_len;
|
||||
uint32_t key_len;
|
||||
|
||||
uint8_t *value;
|
||||
size_t value_len;
|
||||
uint32_t value_len;
|
||||
} kvs_array_item_t;
|
||||
|
||||
|
||||
@@ -62,16 +65,21 @@ typedef struct kvs_array_s {
|
||||
int kvs_array_create(kvs_array_t *inst);
|
||||
void kvs_array_destroy(kvs_array_t *inst);
|
||||
int kvs_array_set_bin(kvs_array_t *inst,
|
||||
const void *key, size_t key_len,
|
||||
const void *value, size_t value_len);
|
||||
const void *key, uint32_t key_len,
|
||||
const void *value, uint32_t value_len);
|
||||
void *kvs_array_get_bin(kvs_array_t *inst,
|
||||
const void *key, size_t key_len,
|
||||
size_t *out_value_len);
|
||||
int kvs_array_del_bin(kvs_array_t *inst, const void *key, size_t key_len);
|
||||
const void *key, uint32_t key_len,
|
||||
uint32_t *out_value_len);
|
||||
int kvs_array_del_bin(kvs_array_t *inst, const void *key, uint32_t key_len);
|
||||
int kvs_array_mod_bin(kvs_array_t *inst,
|
||||
const void *key, size_t key_len,
|
||||
const void *value, size_t value_len);
|
||||
int kvs_array_exist_bin(kvs_array_t *inst, const void *key, size_t key_len);
|
||||
const void *key, uint32_t key_len,
|
||||
const void *value, uint32_t value_len);
|
||||
int kvs_array_exist_bin(kvs_array_t *inst, const void *key, uint32_t key_len);
|
||||
|
||||
|
||||
int kvs_array_save(kvs_array_t *inst, const char* filename);
|
||||
int kvs_array_load(kvs_array_t *inst, const char* filename);
|
||||
|
||||
#else
|
||||
typedef struct kvs_array_item_s {
|
||||
char *key;
|
||||
@@ -170,14 +178,15 @@ typedef struct hashtable_s kvs_hash_t;
|
||||
|
||||
int kvs_hash_create(kvs_hash_t *hash);
|
||||
void kvs_hash_destroy(kvs_hash_t *hash);
|
||||
int kvs_hash_set_bin(kvs_hash_t *h, const void *key, size_t key_len, const void *value, size_t value_len);
|
||||
void *kvs_hash_get_bin(kvs_hash_t *h, const void *key, size_t key_len, size_t *out_value_len);
|
||||
int kvs_hash_get_copy_bin(kvs_hash_t *h, const void *key, size_t key_len, void **out_buf, size_t *out_len);
|
||||
int kvs_hash_mod_bin(kvs_hash_t *h, const void *key, size_t key_len, const void *value, size_t value_len);
|
||||
int kvs_hash_del_bin(kvs_hash_t *h, const void *key, size_t key_len);
|
||||
int kvs_hash_exist_bin(kvs_hash_t *h, const void *key, size_t key_len);
|
||||
int kvs_hash_set_bin(kvs_hash_t *h, const void *key, uint32_t key_len, const void *value, uint32_t value_len);
|
||||
void *kvs_hash_get_bin(kvs_hash_t *h, const void *key, uint32_t key_len, uint32_t *out_value_len);
|
||||
int kvs_hash_get_copy_bin(kvs_hash_t *h, const void *key, uint32_t key_len, void **out_buf, uint32_t *out_len);
|
||||
int kvs_hash_mod_bin(kvs_hash_t *h, const void *key, uint32_t key_len, const void *value, uint32_t value_len);
|
||||
int kvs_hash_del_bin(kvs_hash_t *h, const void *key, uint32_t key_len);
|
||||
int kvs_hash_exist_bin(kvs_hash_t *h, const void *key, uint32_t key_len);
|
||||
int kvs_hash_count(kvs_hash_t *h);
|
||||
|
||||
int save(kvs_hash_t *h, const char* filename);
|
||||
#else
|
||||
|
||||
#define ENABLE_KEY_POINTER 1
|
||||
|
||||
Reference in New Issue
Block a user