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
- Redis研究(十九)—命令属性
- 设计模式—命令模式(十九)
- (十九)命令模式
- Redis源码分析(十九)——二进制位操作bitops
- AgoBot 僵尸网络研究笔记(十九)
- 设计模式笔记(十九) —— 命令模式
- 设计模式(十九)——命令模式
- linux命令(十九):find命令
- javascript学习(十九)对象属性提升
- Redis研究(一)—简介
- Redis研究(二)—准备
- Redis研究(三)—字符串类型
- Redis研究(五)—列表类型
- Redis研究(六)—集合类型
- Redis研究(十二)—主从复制
- Redis研究(十四)—管理工具
- Redis研究(十五)—任务队列
- Redis研究(十七)—SORT排序
- kalman滤波器
- [C++]LeetCode: 127 Sort Colors (计数排序 & 快速排序)
- Android广播接收机制(BroadcastReceiver)
- jquery sparkline中在未加载的DOM元素中无法显示图标
- 我辞去了工作 住在帐篷中写代码
- Redis研究(十九)—命令属性
- Doc 常用命令
- c++/cli 读取配置文件app.config所需的设置
- float型数在计算机中的表示
- HDU-2563-统计问题
- 【ORACLE】oracle时间对象的处理
- C# TextBox带提示说明的搜索输入框
- 导入导出错误
- 完整百度登录源代码(2015年1月27日更新)