ssdb支持 zset, map/hash, list, kv 数据结构,同redis差不多。下面是关于ssdb hsahmap的使用笔记

1.ssdb hashmap的命令

1.hset name key value

设置hashmap中指定key的值

2.hget name key

获取hashmap中指定key的值

3.hdel name key

删除hashmap中指定的key

4.hincr name key [num]

使hashmap中key对应的值增加num

5.hexists name key

判断指定的key是否存在于hashmap中

6.hsize name

返回hashmap中元素的个数

7.hlist name_start name_end limit

列出名字处于区间 (name_start, name_end] 的 hashmap.

8.hrlist name_start name_end limit

逆序

9.hkeys name key_start key_end

列出 hashmap 中处于区间 (key_start, key_end] 的 key 列表.

10.hgetall name

返回整个 hashmap.

11.hscan name key_start key_end limit

列出 hashmap 中处于区间 (key_start, key_end] 的 key-value 列表.

12.hrscan name key_start key_end limit

像 hscan, 逆序.

13.hclear name

删除 hashmap 中的所有 key.

14.multi_hset name key1 value1 key2 value2 ...
批量设置 hashmap 中的 key-value.

15.multi_hget name key1 key2 ...
批量获取 hashmap 中多个 key 对应的权重值.

16.multi_hdel name key1 key2 ...

指删除 hashmap 中的 key.

2.ssdb使用hashmap 存储获取的代码

  这里因为ssdb是完全兼容redis的,所以完全可以用redis的库的接口函数。因为这样的特性,使得使用redis的项目很容易的能迁移到ssdb,作者的原博客也有完整的redis迁移到ssdb的完整教程。

ssdb的连接

redisContext *conn = redisConnect(host,port);
host:连接ssdb的主机ip
port:连接端口 返回值 redisContext结构体 定义如下
/* Context for a connection to Redis */
2 typedef struct redisContext {
3 int err; /* Error flags, 0 when there is no error */
4 char errstr[128]; /* String representation of error when applicable */
5 int fd;
6 int flags;
7 char *obuf; /* Write buffer */
8 redisReader *reader; /* Protocol reader */
9
10 enum redisConnectionType connection_type;
11 struct timeval *timeout;
12
13 struct {
14 char *host;
15 char *source_addr;
16 int port;
17 } tcp;
18
19 struct {
20 char *path;
21 } unix_sock;
22
23 } redisContext; ssdb的命令执行
redisReply* reply = redisCommand(conn,cmd)
conn:redis的连接句柄
cmd:执行的命令
返回值:redisReply结构体 结构体如下:
1 /* This is the reply object returned by redisCommand() */
2 typedef struct redisReply {
3 int type; /* REDIS_REPLY_* */
4 long long integer; /* The integer when type is REDIS_REPLY_INTEGER */
5 size_t len; /* Length of string */
6 char *str; /* Used for both REDIS_REPLY_ERROR and REDIS_REPLY_STRING */
7 size_t elements; /* number of elements, for REDIS_REPLY_ARRAY */
8 struct redisReply **element; /* elements vector for REDIS_REPLY_ARRAY */
9 } redisReply; 其中type元素的类型可用来判断放回结果的状态:
REDIS_REPLY_STRING 1   //返回字符串,查看str,len字段
REDIS_REPLY_ARRAY 2    //返回一个数组,查看elements的值(数组个数),通过element[index]的方式访问数组元素,每个数组元素是一个redisReply对象的指针
REDIS_REPLY_INTEGER 3  //返回整数,从integer字段获取值
REDIS_REPLY_NIL 4      //没有数据返回
REDIS_REPLY_STATUS 5   //表示状态,内容通过str字段查看,字符串长度是len字段
REDIS_REPLY_ERROR 6    //表示出错,查看出错信息,如上的str,len字段

redisReply的释放
freeReplyObject(reply); 
用来释放执行命令后所占用的内存 ssdb连接的释放
redisFree(conn);
完整代码如下:

 redisContext*  ssdb_init(const char* host,uint16_t port) {
redisContext *conn = redisConnect(host,port);
if(conn->err) {
printf("connection error:%s\n",conn->errstr);
redisFree(conn);
return NULL;
}
return conn;
} void ssdb_finit(redisContext *conn) {
if (conn)
redisFree(conn);
} redisReply* ssdb_command(redisContext *conn,char *cmd) {
redisReply* reply = NULL;
if(NULL != conn && cmd != NULL) {
reply = redisCommand(conn,cmd);
} else {
printf("redis err\n");
return NULL;
}
return reply;
} int main(){
char buf[] = {};
char name[] = {};
char key[] = {};
char value[] = {};
redisReply* reply = NULL;
redisContext *ssdb_conn = ssdb_init("127.0.0.1",);
if(ssdb_conn == NULL){
printf("ssdb conn err...\n");
return ;
}
memcpy(name,"mymap",);
memcpy(key,"name",);
memcpy(value,"wangwu",);
snprintf(buf,sizeof(buf),"hset %s %s %s",name,key,value);
reply = ssdb_command(ssdb_conn,buf);
if(reply != NULL){
if(reply->type == REDIS_REPLY_ERROR)
printf("commd err:%s\n",reply->str);
freeReplyObject(reply);
} //根据指定key获取value值
memset(buf,,sizeof(buf));
memcpy(buf,"hget mymap name",sizeof(buf));
reply = ssdb_command(ssdb_conn,buf);
if(reply == NULL)
return ;
if(reply->type == REDIS_REPLY_ERROR){
printf("commd err:%s\n",reply->str);
freeReplyObject(reply);
return -;
}
printf("the value this is:%s\n",reply->str);
freeReplyObject(reply); //获取mymap里所有的key-value值
memset(buf,,sizeof(buf));
memcpy(buf,"hgetall mymap",sizeof(buf));
reply = ssdb_command(ssdb_conn,buf);
if(reply == NULL)
return ;
int i = ;
     /*此处对于获取的hashmap来说这个返回的数组每个key-value是占有两个元素的第一个元素为key 后一个元素为前一个元素的值*/
for(i = ;i < reply->elements;i+=){
printf("key:%s values:%s\n",reply->element[i]->str,reply->element[i + ]->str);
} freeReplyObject(reply);
return ;
}

执行效果图如下:

基于C语言的ssdb笔记 ----hashmap的简单实例的更多相关文章

  1. 第一单元总结:基于基础语言、继承和接口的简单OOP

    前情提要 到目前为止,OO课程已经完成了前三次的作业,分别为: 第一次作业:简单多项式的构造和求导.[正则表达式][数据结构][排序] 第二次作业:含三角函数因子的复杂多项式的构造.求导和化简.[递归 ...

  2. R语言入门视频笔记--2--一些简单的命令

    一.对象 1.列举当前内存中的对象 ls() 2.删除不需要的对象 rm(某对象名称) 3.查看向量长度 length(某向量名称) 4.查看向量类型 mode(某向量名称) 二.函数 1.seq函数 ...

  3. Hibernate笔记——第一个简单实例

     1. 首先进行框架配置 导包 hibernate配置xml文件 ======================= 2. 创建并配置POJO类 Hibernate是操作持久化层的框架,和数据库打交道,其 ...

  4. 关于《selenium2自动测试实战--基于Python语言》

    关于本书的类型: 首先在我看来技术书分为两类,一类是“思想”,一类是“操作手册”. 对于思想类的书,一般作者有很多年经验积累,这类书需要细读与品位.高手读了会深有体会,豁然开朗.新手读了不止所云,甚至 ...

  5. 《Selenium2自动化测试实战--基于Python语言》 --即将面市

    发展历程: <selenium_webdriver(python)第一版>   将本博客中的这个系列整理为pdf文档,免费. <selenium_webdriver(python)第 ...

  6. Gogs - 基于 Go 语言的自助 Git 服务

    Gogs(Go Git Service) 是一个基于 Go 语言的自助 Git 服务.Gogs 的目标是打造一个最简单.最快速和最轻松的方式搭建自助 Git 服务.使用 Go 语言开发使得 Gogs ...

  7. 基于ruby的watir自动化测试 笔记二

    基于ruby的watir自动化测试 笔记一的补充版,新增加了些特殊的控件捕获方法.还在更新中.... attribute_value 获取当前控件的属性 Value = ie.link(:id=> ...

  8. Ggoogle Protocol Buffer的使用 (基于C++语言)

    首先说明的是Protocol Buffle是灵活高效的.它的一个很好的优点(很重要的,我认为)就是后向兼容性--当我们扩展了了.proto文件后,我们照样可以用它来读取之前生成的文件. 之前已经写了关 ...

  9. C语言细节总结笔记

    C语言细节总结笔记 */--> C语言细节总结笔记 Table of Contents 1. 三步异或法交换数字 2. 做差法交换数字 3. 按n位置位 4. 求余求商求积 5. 辗除法求最大公 ...

随机推荐

  1. [原创]java WEB学习笔记39:EL中的运算符号(算术运算符,关系运算符,逻辑运算符,empty运算符,条件运算符,括号运算符)

    本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...

  2. F5与Ctrl+F5及地址栏输入地址回车

    按F5等同于点击页面地址栏的刷新图标. 地址栏输入地址然后回车: 根据缓存内容是否过期决定是否发送请求给服务端 F5: 浏览器无论如何都得发送请求给服务端,包含If-Modified-Since/If ...

  3. 一、Perfect Squares 完全平方数

    一原题 Given a positive integer n, find the least number of perfect square numbers (, , , , ...) which ...

  4. /etc/apt/sources.list

    今天学习: 在Ubuntu下软件源的文件是/etc/apt/sources.list,那么sourdces.list.d目录下的文件又是什么作用呢? 该文件夹下的文件是第三方软件的源,可以分别存放不同 ...

  5. DL三(向量化编程 Vectorized implementation)

    向量化编程实现 Vectorized implementation 一向量化编程 Vectorization 1.1 基本术语 向量化 vectorization 1.2 向量化编程(Vectoriz ...

  6. win2008server R2 x64 部署.net core到IIS

    1.下载sdk 和.NET Core Windows Server Hosting   https://www.microsoft.com/net/download  2.出现HTTP 错误 500. ...

  7. LSM Tree 学习笔记——MemTable通常用 SkipList 来实现

    最近发现很多数据库都使用了 LSM Tree 的存储模型,包括 LevelDB,HBase,Google BigTable,Cassandra,InfluxDB 等.之前还没有留意这么设计的原因,最近 ...

  8. 问题杂烩(scrollTop/背景透明度动画)

    今天给同学找我帮忙写js,是公司里的活..我是不是应该跟他要钱哈哈,不过一顿饭肯定是免不了的了. 言归正传,今天写了三个小东西,因为兼容性的问题,用jq写的(很是别扭的说,但是没办法啊,一边看api一 ...

  9. Git_学习_06_ 放弃本地修改

    一.未使用 git add 缓存代码时 git checkout -- filepathname // 放弃某个文件 git checkout . // 放弃所有文件 git checkout . 用 ...

  10. JavaUtil_01_MD5加密

    一.百度翻译MD5工具类 昨天做java微信开发,引用百度翻译API给公众号添加翻译功能时,需要使用MD5生成签名.注意,使用MD5生成签名后一定要转成小写,不然百度翻译后台不会认你这个签名的,会报无 ...