Redis_命令
来源:互联网 发布:免费下载音乐软件 编辑:程序博客网 时间:2024/06/05 11:44
基本命令
EXISTS key
判断建key是否存在
TYPE key
查看key的值类型
set key value EX s
创建键值对key-value,设置生存时间s秒
KEYS pattern
查看建
pattern支持通配符:? 匹配一个字符* 匹配任意个(包括0个)字符[] 匹配括号间的任意字符,可以使用“-”符号表示一个范围,如a[b-d]可以匹配“ab”,“ac”和“ad”\x 匹配字符x,用于转义符号
删除键
DEL key
DEL命令的参数不支持通配符,可以通过如下方法删除所有符合规则的键:redis-cli KEYS “user:*” | xargs redis-cli DEL
redis-cli DEL ‘redis-cli KEYS “user:*”’获取键key对应的值
GET key
为键key的值加1
INCR key
关于Redis键命名:
比较好的实践是:“对象类型:对象ID:对象属性”,如键“user:1:friends”用来存储ID为1的用户的好友列表散列类型
散列类型(hash)适合存储对象:使用对象类别和ID构成键名,使用字段表示对象的属性。而字段值则存储属性值
赋值与取值:HSET key field valueHGET key fieldHMSET key field value[field value ···]HMGET key field [field···]HGETALL key
判断字段是否存在:
HEXISTS key field
当字段不存在时复制:HSETNX key field value
HSETNX命令与HSET命令类似,区别在于如果字段已经存在,HSETNX命令将不执行任何操作
增加数字:HINCRBY key field increment
删除字段:HDEL key field [field ···]
只获取字段名或字段值:HKEYS key
HVALS key
获得字段数量:HLEN key
列表类型
向列表两端增加元素:
LPUSH key value [value ···]
RPUSH key value [value ···]
从列表两端弹出元素:LPOP key
RPOP key
获取列表中元素的个数:LLEN key
获得列表片段:LRANGE key start stop
Redis列表的索引从0开始,LRANGE返回的值包含最右边的元素
删除列表中前count个值为value的元素:LREM key count value
获得/设置指定索引的元素值:LINDEX key index
LSET key index value
只保留列表指定字段:LTRIM key start end
向列表中插入元素:LINSERT key BEFORE|AFTER pivot value
在列表中找到值为pivot的元素,然后在其前/后插入值value
将元素从一个列表转到另一个列表:RPOPLPUSH source destination
集合类型
集合内的元素无序、唯一
列表中的元素有序、不唯一
增加/删除元素:SADD key member [member ···]
SREM key member [member ···]
获得集合中所有的元素:SMEMBERS key
判断元素是否在集合中:SISMEMBER key member
集合间运算:SDIFF setA setB [setC ···] 差集
SINTER setA setB [setC ···] 交集
SUION setA setB [setC ···] 并集
获得集合中元素个数:SCARD key
进行集合运算并将结果存储:SDIFFSTORE destination key [key ···]
SINTERSTORE destination key [key ···]
SUNIONSTORE destination key [key ···]
随机获取集合中的count个元素:SRANDMEMBER key [count]
从集合中随机弹出一个元素:SPOP key
有序集合类型
有序集合与列表的相同之处:
①都是有序的;
②都可以获得某一范围的元素。不同之处:
①列表类型是通过链表实现的,获取靠近两端的数据速度极快,而当元素增多后,访问中间的数据速度会较慢,所以它更加适合实现如“新鲜事”或“日志”这样很少访问中间数据的应用
②有序集合类型是使用散列表和跳跃表实现的,所以即使读取位于中间部分的数据速度也很快
③列表中不能简单地调整某个元素地位置,但是有序集合可以(通过更改这个元素的分数)
④有序集合要比列表类型更耗费内存
增加元素:ZADD key score member [score member···]
获得元素的分数:ZSCORE key member
获得排名在某个范围的元素列表:ZRANGE key start stop [WITHSCORES]
ZREVRANGE key start stop [WITHSCORES]
获取指定分数范围的元素:ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]
该命令按照元素分数从小到大的顺序返回分数在min和max之间(包含min和max)的元素ZRANGEBYSCORE scoreboard 80 100
如果希望分数范围不包含端点值,可以在分数前加上“(”符号。ZRANGEBYSCORE scoreboard 80 (100
min和max还支持无穷大,-inf和+inf分别表示负无穷和正无穷ZRANGEBYSCORE scoreboard (80 +inf
LIMIT offset count表示在获得的元素列表的基础上向后偏移offset个元素,并且只获取前count个元素
增加某个元素的分数:ZINCRBY key increment member
获得集合中元素的数量:ZCARD key
获得指定分数范围内的元素个数:ZCOUNT key min max
删除一个或多个元素:ZREM key member [member ···]
按照排名范围删除元素:ZREMRANGEBYRANK key start stop
按照分数范围删除元素:ZREMRANGEBYSCORE key start stop
获得元素的排名:ZRANK key member
ZREVRAN key member
计算有序集合的交集:ZINTERSTORE destination numkeys key [key ···] [WEIGHTS weight [weight ···]] [AGGREGATE SUM|MIN|MAX]
事务
redis > MULTI #开始事务
redis > EXEC #结束事务错误处理:
如果是语法错误,输入EXEC命令后Redis会直接返回错误,连正确的命令也不会执行
如果是运行错误,除了出错的命令以外的命令都会被执行,同时Redis没有回滚功能,因此需要开发者格外注意WATCH命令:
可以监控一个或多个键,一旦其中有一个键被修改(或删除),之后的事务就不会执行。监控一致持续到EXEC命令(事务中的命令是在EXEC之后才执行的,所以在MULTI命令之后可以修改WATCH监控的键值)
【由于WATCH命令的作用只是当被监控的键值被修改后阻止之后一个事务的执行,而不能保证其他客户端不修改这一键值,所以我们需要在EXEC执行失败之后重新执行整个函数】
执行EXEC命令后会取消对所有键的监控,如果不想执行事务中的命令也可以使用UNWATCH命令来取消监控生存时间
Redis中可以使用EXPIRE命令设置一个键的生存时间,到时间后Redis会自动删除它
EXPIRE key seconds
seconds表示键的生存时间,单位是秒
想知道一个键还有多久被删除,使用TTL命令:TTL key
取消键的生存时间设置(即恢复成永久的),可以使用PERSIST命令:PERSIST key
除了PERSIST命令之外,使用SET或GETSET命令为键赋值,也会同时清楚键的生存时间
【如果使用WATCH命令监测了一个拥有生存时间的键,该键时间到期自动删除并不会被WATCH命令认为该键被改变】
实际开发过程中很难为缓存键设置合理的生存时间,为此可以限制Redis能够使用的最大内存,并让Redis按照一定规则淘汰不需要的缓存键:修改配置文件的maxmemory参数,超过这个限制后Redis会依据maxmemory-policy参数指定的策略来删除不需要的键,直到Redis占用的内存小于指定内存。maxmemory-policy支持的规则如下:volatitle-lru 使用LRU算法删除一个键(只对设置了生存时间的键有效)allkeys-lru 使用LRU算法删除一个键volatitle-random 随机删除一个键(只对设置了生存时间的键有效)allkeys-random 随机删除一个键volatitle 删除生存时间最近的一个键noeviction 不删除键,只返回错误
排序
除了使用有序集合外,可以借助Redis提供的SORT命令对列表类型、集合类型和有序集合类型的键进行排序。
SORT命令还可以通过ALPHA参数按照字典顺序排列非数字元素:SORT key ALPHASORT命令的DESC参数可以实现将元素按照从大到小的顺序排列:SORT key DESCSORT命令的还支持LIMIT参数来返回指定范围的结果:SORT key DESC LIMIT 1 2
BY参数:
SORT tag:ruby:posts BY post:* ->time DESC
读取post:2、post:6、post:12、post:26几个散列键中的time字段的值并以此决定tag:ruby:posts键中各个文章ID的顺序
STORE参数:
如果希望保存排序结果,可以使用STORE参数SORT性能调优:
SORT命令的时间复杂度是O(n+mlogm)
①尽可能减少待排序键中元素的数量(使n尽可能小)
②使用LIMIT参数只获取需要的数据(使m尽可能小)
③如果要排序的数据量较大,尽可能使用STORE参数将结果缓存
- Redis_命令
- Redis_链表
- Redis_字典
- Redis_基础
- redis_初学笔记
- Redis_集群搭建
- Redis_集群介绍
- redis_持久化
- redis_主从同步
- redis_学习笔记01--基本安装
- redis_主从配置以及自动切换
- redis_三种持久化方式
- Redis_慢查询日志与简单动态字符串
- 命令
- 命令
- 命令
- 命令
- 命令
- 基于Jenkins开展集群式APP自动化测试
- SCOI2011 Day2 棘手的操作 可并堆
- Spring实战笔记(Ch01-Spring之旅)
- 【勤哲应用】用勤哲Excel服务器做工资管理系统
- hdoj 1012 u calculate e (神奇的水题)
- Redis_命令
- 你应该学会的三项能力
- SAP OData Service
- Android JNI开发(10)--实例
- 欢迎使用CSDN-markdown编辑器
- mac上mysql root密码忘记或权限错误的解决办法
- mac执行SVN命令出现xcrun: error: invalid active developer path解决方法
- linux 搭建redis集群
- 为什么通过设置ROI无法修改图像(opencv)