diff --git a/README b/README index f3c1ced5..4c6d74af 100644 --- a/README +++ b/README @@ -45,8 +45,9 @@ Start as server =============== * $./nessdb-server - Now you can use redis-cli(or other redis's clients) to do some "COMMAND" operations(Now support:PING,SET,MSET,GET,MGET,DEL,INFO commands). + Now you can use redis-cli(or other redis's clients) to do some "COMMAND" operations + (Support Redis-Style commands:PING,SET,MSET,GET,MGET,DEL,EXISTS,INFO). -Thanks. + Thanks. -== END OF FILE == + == END OF FILE == diff --git a/src/db.c b/src/db.c index 7555edab..aaa87f27 100644 --- a/src/db.c +++ b/src/db.c @@ -193,6 +193,12 @@ void *db_get(const char *key) } } +int db_exists(const char *key) +{ + unsigned int slot=jdb_hash(key)%DB_SLOT; + return btree_get_index(&_btrees[slot],key); +} + void db_remove(const char *key) { int result; diff --git a/src/db.h b/src/db.h index 38d6694d..13778260 100644 --- a/src/db.h +++ b/src/db.h @@ -12,7 +12,7 @@ extern "C" { void db_init(int bufferpool_size,int isbgsync); void *db_get(const char *key); - +int db_exists(const char *key); int db_add(const char *key,const char *value); void db_update(const char *key,const char *value); void db_remove(const char *key); diff --git a/src/nessdb-server.c b/src/nessdb-server.c index a17a4472..b3db11b7 100644 --- a/src/nessdb-server.c +++ b/src/nessdb-server.c @@ -265,6 +265,14 @@ void read_handler(aeEventLoop *el, int fd, void *privdata, int mask) response_free(resp); break; } + case CMD_EXISTS:{ + int ret= db_exists(req->argv[1]); + if(ret) + write(fd,":1\r\n",4); + else + write(fd,":-1\r\n",5); + } + break; default:{ resp=response_new(0,ERR); diff --git a/src/request.c b/src/request.c index c4efd616..99dc8743 100644 --- a/src/request.c +++ b/src/request.c @@ -90,6 +90,7 @@ static const struct cmds _cmds[]= {"mset",CMD_MSET}, {"del",CMD_DEL}, {"info",CMD_INFO}, + {"exists",CMD_EXISTS}, {"unknow cmd",CMD_UNKNOW} }; diff --git a/src/request.h b/src/request.h index 9f1c70d2..6e83df06 100644 --- a/src/request.h +++ b/src/request.h @@ -1,7 +1,7 @@ #ifndef _REQUEST_H #define _REQUEST_H -typedef enum{CMD_PING,CMD_GET,CMD_MGET,CMD_SET,CMD_MSET,CMD_DEL,CMD_INFO,CMD_UNKNOW}CMD; +typedef enum{CMD_PING,CMD_GET,CMD_MGET,CMD_SET,CMD_MSET,CMD_DEL,CMD_INFO,CMD_EXISTS,CMD_UNKNOW}CMD; struct cmds{ char method[256];