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的特殊属性之后,就不难看出下面一段程序的问题:
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例子所显示的,否则可能出现非常奇怪但又不便检查和调试的现象。
转载于:https://blog.51cto.com/xiamachao/1939241