您的位置:首页 > 数据库 > Redis

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的特殊属性之后,就不难看出下面一段程序的问题:
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例子所显示的,否则可能出现非常奇怪但又不便检查和调试的现象。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Redis C