redis的高级特性

发布订阅

特点

可以使用发布订阅来实现消息队列,但因为发出的消息不会被持久化,所以消费者只能收到从它开始订阅这个频道发之后发布的消息。

命令

支持订阅一个或多个具体的频道,也支持正则表达式订阅频道。具体命令请参考
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来终止脚本的执行。

你可能感兴趣的:(redis的高级特性)