Redis研究(十九)—命令属性

来源:互联网 发布:php编辑器源代码 编辑:程序博客网 时间:2024/05/29 14:38

       Redis的不同命令拥有不同的属性,如是否是只读命令,是否是管理员命令等,一个命令可以拥有多个属性。在一些特殊情况下不同属性的命令会有不同的表现,下面来逐一介绍。


1、 REDIS_CMD_WRITE
      拥有REDIS_CMD_WRITE属性的命令的表现是会修改Redis数据库的数据。一个只读的从数据库会拒绝执行拥有REDIS_CMD_WRI TE属性的命令,另外在Lua脚本中执行了拥有REDIS_CMD_RANDOM属性的命令后,不可以再执行拥有REDIS_CMD_WRITE属性的命令,否则会提示错误:“Write commands not  allowed after non deterministic commands.”拥有REDIS_CMD_WRITE 属性的命令如下,

SETSETNXSETEXPSETEXAPPENDDELSETBITSETRANGEINCRDECRRPUSHLPUSHRPUSHXLPUSHXLINSERTRPOPLPOPBRPOPBRPOPLPUSHBLPOPLSETLTRIMLREMRPOPLPUSHSADDSREMSMOVESPOPSINTERSTORESUNIONSTORESDIFFSTOREZADDZINCRBYZREMZREMRANGEBYSCOREZREMRANGEBYRANKZUNIONSTOREZINTERSTOREHSETHSETNXHMSETHINCRBYHINCRBYFLOATHDELINCRBYDECRBYINCRBYFLOATGETSETMSETMSETNXMOVERENAMERENAMENXEXPIREEXPIREATPEXPIREPEXPIREATFLUSHDBFLUSHALLSORTPERSISTRESTOREMIGRATEBITOP

2、 REDIS_CMD_DENYOOM
       拥有REDIS_CMD_DENYOOM属性的命令有可能增加Redis占用的存储空间,显然拥有该属性的命令都拥有REDIS_CMD_WRI TE属性,但反之则不然。例如,DEL 命令拥有REDIS_CMD_WRITE属性,但其总是会减少数据库的占用空间,所以不拥有
REDIS_CMD_DENYOOM属性。
       当数据库占用的空间达到了配置文件中maxmemory 参数指定的值且根据maxmemory-policy 参数的空间释放规则无法释放空间时,Redis会拒绝执行拥有REDIS_CMD_DENYOOM属性的命令。
       拥有REDIS_CMD_DENYOOM属性的命令每次调用时不一定都会使数据库的占用空间增大,只是有可能而已。例如,SET命令当新值长度小于旧值时反而会减少数据库的占用空间。但无论如何,当数据库占用空间超过限制时,Redis都会拒绝执行拥有
REDIS_CMD_DENYOOM属性的命令,而不会分析其实际上是不是会真的增加空间占用
。拥有REDIS_CMD_DENYOOM属性的命令,

SETSETNXSETEXPSETEXAPPENDSETBITSETRANGEINCRDECRRPUSHLPUSHRPUSHXLPUSHXLINSERTBRPOPLPUSHLSETRPOPLPUSHSADDSINTERSTORESUNIONSTORESDIFFSTOREZADDZINCRBYZUNIONSTOREZINTERSTOREHSETHSETNXHMSETHINCRBYHINCRBYFLOATINCRBYDECRBYINCRBYFLOATGETSETMSETMSETNXSORTRESTOREBITOP

3、 REDIS_CMD_NOSCRIPT
      拥有REDIS_CMD_NOSCRIPT属性的命令无法在Redis脚本中执行。EVAL和EVALSHA命令也拥有该属性,所以在脚本中无法调用这两个命令,即不能在脚本中调用脚本。
拥有REDIS_CMD_NOSCRIPT属性的命令如下:

BRPOPBRPOPLPUSHBLPOPSPOPAUTHSAVEMULTIEXECDISCARDSYNCREPLCONFMONITORSLAVEOFDEBUGSUBSCRIBEUNSUBSCRIBEPSUBSCRIBEPUNSUBSCRIBEWATCHUNWATCHEVALEVALSHASCRIPT

4、 REDIS_CMD_RANDOM
       当一个脚本执行了拥有REDIS_CMD_RANDOM属性的命令后,就不能执行拥有REDIS_CMD_WRITE属性的命令了。拥有REDIS_CMD_RANDOM的命令如下,

SPOPSRANDMEMBERRANDOMKEYTIME

5 、REDIS_CMD_SORT_FOR_SCRIPT
      拥有REDIS_CMD_SORT_FOR_SCRIPT属性的命令会产生随机结果,在脚本中调用这些命令时Redis会对结果进行排序。
拥有REDIS_CMD_SORT_FOR_SCRIPT属性的命令如下,

SINTERSUNIONSDIFFSMEMBERSHKEYSHVALSKEYS

6 、REDIS_CMD_LOADING

      当Redis正在启动时(将数据从硬盘载入到内存中),Redis只会执行拥有REDIS_CMD_LOADI NG属性的命令。
拥有REDIS_CMD_LOADING属性的命令如下:

INFOSUBSCRIBEUNSUBSCRIBEPSUBSCRIBEPUNSUBSCRIBEPUBLISH


0 0
原创粉丝点击