Redis进阶命令

Redis进阶命令

昨天写了一篇关于redis的文章,这一次,就在上一次的基础上增加一些更好,更优秀的命令。(嗯,没错,优秀又复杂,当然是实现的复杂,不是命令的复杂,毕竟redis也算是一个比较优秀的软件了,哈哈)
下文中的命令都可以按照格式,在redis的redis-cli直接输入运行。

事务

Redis可以设置事务,这样事务内的命令会一次性的执行完毕,不会被其他的内容影响。命令格式为:

>  multi
>  //中间可以插入若干的命令
>  exec

事务是将中间的所有的命令作为一个整体运行,不允许中间被打断,redis会将中间的步骤先存储起来不执行,当允许执行以后开始进行整体执行。
watch key:watch命令的作用是当被监控的键值被修改以后,阻止之后的一个事务的执行,但是不能保证其他客户端不修改这一键值,所以我们需要在exec执行失败以后重新执行整个函数。

过期时间

expire key seconds:设置键值的有效时间,以秒为单位,当时间到达的时候,键值自动失效;
ttl key:用于查看键值剩余的时间,显示剩余的秒数,当键值失效的时候,返回-2;
persist key:用于清除倒计时时间,清除成功返回1,清除失败返回0(用set,getset重新设置键值也可以消除键的过期时间);
expireat key millsecond:设置键值的时间,但是是以毫秒为单位;
pexpireat key:取消expireat设置的时间。

排序

排序是一个功能强大的函数,用于对列表进行排序。为什么要对列表进行排序呢?是为了弥补原有的有序集合的一些不足之处,让列表的操作更有效,更具有一般性。
sort list:对列表(默认从小到大)进行双精度排序
sort list alpha:按照字典顺序进行排序
sort list [alpha] desc:用于字典序倒序输出
同时sort函数有很多的参数可以使用,这些参数让sort函数更加的优秀!
(1)by 参考键:函数,用于辅助sort函数,对排序的方式进行排序。这是一个异常强大的函数,强大到不可想象……参考键可以是一个键值或者一个散列表的某个字段,格式为:
① 当为键值:by 键名:
② 当为散列表:by 键名:
->字段名;
使用by函数以后,sort函数会先根据by函数提供的内容进行排序,从小到大将内容输出,如果参考键值相同就会重新比较元素本身的大小来决定最终的顺序。
注意:
参考键虽然支持散列类型,但是“”只能在“->”前面出现时开有用,在“->”后会被当做字段本身而不会作为占位符被元素值替换,即常量名。
(2)get参数
又是一个强大的参数,用于将sort返回元素本身的值改为我们制定的元素。
例如:sort tag:ruby:post by post:
->time get post:->title get post:->time
同时,get #为返回元素本身的值。
(3)store参数
用于保存排序完成以后的结果。
例如:sort tag:ruby:post by post:->time get post:->title get post:*->time store sort.result

关于性能优化:
sort是redis中最强大和复杂的命令之一,如果使用不好很容易成为性能的瓶颈。这个函数的时间复杂度是O(n+mlog(m)):
· n表示列表中元素的个数
· m表示要返回的元素的个数
n较大的时候性能较低,并且redis在排序以前会建立一个长度为n的容器来存储待排序的元素。虽然是一个临时的存储,但是当有较多的数据量的时候,会严重影响性能。
建议:
(1)尽可能减少待排序的元素的个数(让n尽可能小)
(2)使用limit参数只获取需要的数据(让m尽可能小)
(3)如果要排序的数据量巨大,尽可能使用store参数将结果缓存

消息通知

消息通知理解起来很容易,有三个内容:消息队列、发布订阅以及按照规则的订阅。
其中消息队列等到一条消息以后就会结束订阅,但是发布订阅不会受到消息数量的限制,只有用户主动取消频道的时候,才会停止接受。
(1)消息队列
brpop key time:当超过了此时间仍然没有获得新的元素,就会返回nil。0为不限时等待。
(2)发布订阅
subscribe channel:订阅频道,channel为频道的名称
unsubscribe channel:取消订阅
publish channel message:向频道发送消息,message为消息内容
(3)按照规则订阅
psubscribe channel.?*:psubscribe可以使用channel.?等符号,可以匹配channel.1,channel.10,但不会匹配channel.。
punsubscribe channel.?
:退订频道,但是只能退订psubscribe命令的频道,不会对subscribe的频道造成影响。同时,punsubscribe命令是不会将其中的通配符展开的,所以必须要严格的进行字符串匹配,如punsubscribe *无法退订channel.*规则,必须使用punsubscirbe channel.*才能退订。

管道

管道的使用可以大大的提升消息传输的效率。但是管道的实现没有办法通过命令行直接的使用,只能通过代码,脚本文件来实现,这一部分,以后会开新的一篇文章来详细的介绍。
管道示意图,其中竖着是时间
以上就是redis的进阶部分的命令,希望对大家有所帮助,也希望大家指正。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值