发布订阅
特点
可以使用发布订阅来实现消息队列,但因为发出的消息不会被持久化,所以消费者只能收到从它开始订阅这个频道发之后发布的消息。
命令
支持订阅一个或多个具体的频道,也支持正则表达式订阅频道。具体命令请参考
http://www.redis.cn/commands.html#pubsub
redis事务
特点
执行命令的顺序按照进入队列的顺序执行。
命令
multi:开始事务,类似于sql的begin
exec:执行事务,类似于sql的commit
discard:取消事务,类似于sql的rollback
watch:监视,类似于sql的版本号更新,当监视的key在exec执行之前发生修改,则执行事务会失败。
错误
1 若先执行一个错误命令,在执行exec,则整个事务拒绝执行即所有的命令都不会执行。
2 若执行exec后出现错误,则该错误命令会被跳过,继续执行其他命令。
Lua脚本
作用
类似于sql的函数,redis将整个脚本作为一个整体执行,保证其原子性。
缓存Lua脚本
先利用script load命令将函数生成摘要,服务端可以通过该摘要获取对应的函数,从而减少了客户端和服务端之前的网络传输消耗。
命令
具体命令请参考:http://www.redis.cn/commands.html#scripting
脚本超时
因为redis是单线程的,当这个线程因为执行脚本超时或者陷入死循环,redis是如何解决的?
1 redis提供lua脚本的超时时间,若超过这个时间,redis可以接受命令但不执行命令,以确保脚本的原子性。
2 若lua脚本没有对redis数据的修改操作,可以通过script kill来终止脚本的执行;反之,若只能通过shutdown nosave来终止脚本的执行。