Redis中随机属性的命令的注意事项
2017-06-17 09:21
351 查看
1.
Redis命令属性介绍
Redis的不同命令拥有不同的属性,如是否是只读命令,是否是管理员命令等,一个命令可以拥有多个属性。在一些特殊情况下不同属性的命令会有不同的表现。
下表归纳了一些常见的属性及其含义:
2.REDIS_CMD_SORT_FOR_SCRIPT命令的特点
为了对随机属性有更直观的理解,我们以KEYS为例:
在我们加入一个key之前,先查看Redis当前key*:
1)
"DIK.2"
2)
"VOL_my_t2"
3)
"volume.47"
4)
"DISK.18"
………….
73)
"chap.2"
74)
"CLONE_ID_NEXT"
75)
"INITGRP_ID"
76)
"snapshot.t1.1448"
77)
"initGrp.4"
紧接着,加入一个key,再看看它的位置:
127.0.0.1:6379>
set ALIBABA 1
127.0.0.1:6379>
keys *
1)
"DISK.2"
2)
"VOLUMEINFO_my_t2"
3)
"volume.47"
4)
"DISK.18"
………….
74)
"CLONE_ID_NEXT"
75)
"ALIBABA"
76)
"INITGRP_ID"
77)
"snapshot.t1.1448"
78)
"initGrp.4"
通过上面的示例,可以看大插入一个key之后,Redis会根据内部顺序把新插入的key放入到数据库里面,但用户不能根据任何顺序假定它的位置。
3.示例
理解了上面对REDIS_CMD_SORT_FOR_SCRIPT的特殊属性之后,就不难看出下面一段程序的问题:
上面的代码中Redis命令“HVALS”的属性是REDIS_CMD_SORT_FOR_SCRIPT,取到的键值对的顺序是随机的,需要用
“HMGET”来替代。
4.总结
在程序或者脚本中调用Redis一些命令的时候,务必注意所调用命令的属性,特别是像上面HVALS例子所显示的,否则可能出现非常奇怪但又不便检查和调试的现象。
Redis命令属性介绍
Redis的不同命令拥有不同的属性,如是否是只读命令,是否是管理员命令等,一个命令可以拥有多个属性。在一些特殊情况下不同属性的命令会有不同的表现。
下表归纳了一些常见的属性及其含义:
2.REDIS_CMD_SORT_FOR_SCRIPT命令的特点
为了对随机属性有更直观的理解,我们以KEYS为例:
在我们加入一个key之前,先查看Redis当前key*:
1)
"DIK.2"
2)
"VOL_my_t2"
3)
"volume.47"
4)
"DISK.18"
………….
73)
"chap.2"
74)
"CLONE_ID_NEXT"
75)
"INITGRP_ID"
76)
"snapshot.t1.1448"
77)
"initGrp.4"
紧接着,加入一个key,再看看它的位置:
127.0.0.1:6379>
set ALIBABA 1
127.0.0.1:6379>
keys *
1)
"DISK.2"
2)
"VOLUMEINFO_my_t2"
3)
"volume.47"
4)
"DISK.18"
………….
74)
"CLONE_ID_NEXT"
75)
"ALIBABA"
76)
"INITGRP_ID"
77)
"snapshot.t1.1448"
78)
"initGrp.4"
通过上面的示例,可以看大插入一个key之后,Redis会根据内部顺序把新插入的key放入到数据库里面,但用户不能根据任何顺序假定它的位置。
3.示例
理解了上面对REDIS_CMD_SORT_FOR_SCRIPT的特殊属性之后,就不难看出下面一段程序的问题:
reply = redis_read(alert_con, "HVALS %s", id_string); if (reply == NULL) { LOGLIB_ERROR("%s: Redis run HVALS error!\n", __FUNCTION__); ret = -2; } else { ret = reply->elements; if (ret != MEMBER_ITEM_CNT - 1) { /* not sure whther this checki is correct */ printf ("%s: HVLAS %s return %d fields, less than expection!\n", __FUNCTION__, id_string, ret); ret = -3; } else { ret = 0; /* step 1.1: check whether returned value is number of field */ /* step 1.2: Init the alert content with the returned value of above cmd */ alert->timestamp.tv_sec = strtoul((const char *) (reply->element[0]->str), &pstr, 0); alert->id = atoi(reply->element[1]->str); alert->op = atoi(reply->element[2]->str); alert->severity = atoi(reply->element[3]->str); memcpy(alert->description, reply->element[4]->str, strlen(reply->element[4]->str) + 1); alert->category = atoi(reply->element[5]->str); alert->comp = atoi(reply->element[6]->str); alert->comp_id = atoi(reply->element[7]->str); alert->type.val = atoi(reply->element[8]->str); sscanf(reply->element[9]->str, "%d", &alert->data[0]); sscanf(reply->element[10]->str, "%d", &alert->data[1]); strcpy(alert->name, reply->element[11]->str); } }
上面的代码中Redis命令“HVALS”的属性是REDIS_CMD_SORT_FOR_SCRIPT,取到的键值对的顺序是随机的,需要用
“HMGET”来替代。
4.总结
在程序或者脚本中调用Redis一些命令的时候,务必注意所调用命令的属性,特别是像上面HVALS例子所显示的,否则可能出现非常奇怪但又不便检查和调试的现象。
相关文章推荐
- RedisTemplate SCAN 命令的使用和注意事项
- Redis中Lua脚本相关命令及注意事项
- TD的noWrap属性使用注意事项
- DevExpress.XtraTreeList.TreeList的DataSource属性使用注意事项.
- TD的noWrap属性使用注意事项 (有例子)
- java学习之类,方法,属性,变量注意事项
- 交换机使用中,复制命令要注意的事项
- 控件属性设置注意事项
- TD的noWrap属性使用注意事项
- 关于用ln 命令创建软连接的注意事项
- 一些命令及注意事项
- 关于执行命令行命令的代码的注意事项
- jdom中使用setAttribute(Attribute attribute)方法设置属性的注意事项
- innerHTML属性-----注意事项 by IE
- TD的noWrap属性使用注意事项
- nand scrub命令注意事项
- TD的noWrap属性使用注意事项
- HTML DOCTYPE属性对JS获取窗口宽度和高度注意事项
- 关于android:layout_weight属性使用注意事项
- Android adb 常用命令及需要注意的事项