简单ttl懒删除支持
This commit is contained in:
76
kvstore.h
76
kvstore.h
@@ -4,8 +4,9 @@
|
||||
#ifndef __KV_STORE_H__
|
||||
#define __KV_STORE_H__
|
||||
|
||||
#include "diskuring/diskuring.h"
|
||||
#include <stdio.h>
|
||||
#include "diskuring/diskuring.h"
|
||||
#include "common/config.h"
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
#include <assert.h>
|
||||
@@ -121,24 +122,26 @@ int kvs_array_exist(kvs_array_t *inst, char *key);
|
||||
typedef uint8_t KEY_TYPE; // key
|
||||
|
||||
// 固定部分结构
|
||||
typedef struct {
|
||||
unsigned char color;
|
||||
struct _rbtree_node *right;
|
||||
struct _rbtree_node *left;
|
||||
struct _rbtree_node *parent;
|
||||
uint32_t key_len;
|
||||
uint32_t value_len;
|
||||
} rbtree_node_fixed;
|
||||
typedef struct {
|
||||
unsigned char color;
|
||||
struct _rbtree_node *right;
|
||||
struct _rbtree_node *left;
|
||||
struct _rbtree_node *parent;
|
||||
uint64_t expire_at_ms;
|
||||
uint32_t key_len;
|
||||
uint32_t value_len;
|
||||
} rbtree_node_fixed;
|
||||
|
||||
// 完整节点结构(用于类型定义,实际内存大小由分配时确定)
|
||||
typedef struct _rbtree_node {
|
||||
unsigned char color;
|
||||
struct _rbtree_node *right;
|
||||
struct _rbtree_node *left;
|
||||
struct _rbtree_node *parent;
|
||||
uint32_t key_len;
|
||||
uint32_t value_len;
|
||||
// 动态数据:key[key_len] + value[value_len]
|
||||
struct _rbtree_node *right;
|
||||
struct _rbtree_node *left;
|
||||
struct _rbtree_node *parent;
|
||||
uint64_t expire_at_ms;
|
||||
uint32_t key_len;
|
||||
uint32_t value_len;
|
||||
// 动态数据:key[key_len] + value[value_len]
|
||||
// 不存储为结构体成员,通过指针运算访问
|
||||
} rbtree_node;
|
||||
|
||||
@@ -149,13 +152,21 @@ typedef struct _rbtree {
|
||||
|
||||
typedef struct _rbtree kvs_rbtree_t;
|
||||
|
||||
int kvs_rbtree_create(kvs_rbtree_t *inst);
|
||||
void kvs_rbtree_destroy(kvs_rbtree_t *inst);
|
||||
int kvs_rbtree_set(kvs_rbtree_t *inst, const void *key, uint32_t key_len, const void *value, uint32_t value_len);
|
||||
void* kvs_rbtree_get(kvs_rbtree_t *inst, const void *key, uint32_t key_len, uint32_t *out_valuelen);
|
||||
int kvs_rbtree_del(rbtree *inst, const void *key, uint32_t key_len);
|
||||
int kvs_rbtree_mod(kvs_rbtree_t *inst, const void *key, uint32_t key_len, const void *value, uint32_t value_len);
|
||||
int kvs_rbtree_exist(kvs_rbtree_t *inst, const void *key, uint32_t key_len);
|
||||
int kvs_rbtree_create(kvs_rbtree_t *inst);
|
||||
void kvs_rbtree_destroy(kvs_rbtree_t *inst);
|
||||
int kvs_rbtree_set(kvs_rbtree_t *inst, const void *key, uint32_t key_len, const void *value, uint32_t value_len);
|
||||
int kvs_rbtree_set_ex(kvs_rbtree_t *inst, const void *key, uint32_t key_len,
|
||||
const void *value, uint32_t value_len, uint64_t expire_at_ms);
|
||||
void* kvs_rbtree_get(kvs_rbtree_t *inst, const void *key, uint32_t key_len, uint32_t *out_valuelen);
|
||||
int kvs_rbtree_del(rbtree *inst, const void *key, uint32_t key_len);
|
||||
int kvs_rbtree_mod(kvs_rbtree_t *inst, const void *key, uint32_t key_len, const void *value, uint32_t value_len);
|
||||
int kvs_rbtree_exist(kvs_rbtree_t *inst, const void *key, uint32_t key_len);
|
||||
rbtree_node *rbtree_search(rbtree *T, const uint8_t *key, uint32_t keylen);
|
||||
typedef int (*kvs_rbtree_visit_cb)(rbtree_node *node, void *arg);
|
||||
rbtree_node *rbtree_search_with_visit(rbtree *T, const uint8_t *key, uint32_t keylen,
|
||||
kvs_rbtree_visit_cb cb, void *arg);
|
||||
const uint8_t *kvs_rbtree_node_key_ptr(const rbtree_node *node);
|
||||
const uint8_t *kvs_rbtree_node_value_ptr(const rbtree_node *node);
|
||||
|
||||
int kvs_rbtree_save(iouring_ctx_t *uring, kvs_rbtree_t *inst, const char* filename);
|
||||
int kvs_rbtree_load(kvs_rbtree_t *inst, const char* filename);
|
||||
@@ -292,13 +303,18 @@ extern kvs_array_t global_array;
|
||||
extern kvs_rbtree_t global_rbtree;
|
||||
#endif
|
||||
|
||||
#if ENABLE_HASH
|
||||
extern kvs_hash_t global_hash;
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
#endif
|
||||
#if ENABLE_HASH
|
||||
extern kvs_hash_t global_hash;
|
||||
#endif
|
||||
|
||||
extern AppConfig global_cfg;
|
||||
|
||||
uint64_t kvs_now_ms(void);
|
||||
int ttl_delete_schedule(const void *key, uint32_t key_len);
|
||||
int ttl_delete_drain(int budget);
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user