前言
Redis系列博客为对黄健宏老师《Redis设计与实现》一书内容的整理
第三大章多机数据库的实现主要与分布式内容相关,没必要在这里整理,掌握思想就好,这里先忽略
第18章 发布与订阅
Redis的发布与订阅功能由PUBLISH(指定频道)、SUBSCRIBE、PSUBSCRIBE(模式匹配)等命令组成。
通过执行subscribe命令,客户端可以订阅一个或多个频道,从而成为这类频道的订阅者:每当有其他客户端向被订阅的频道发送消息,频道的所有订阅者都会收到这条消息。
参考资料:
Redis设计与实现——Redis的发布与订阅____是六月呀~的博客-优快云博客
思考问题:
Redis发布与订阅有什么应用?
1、Redis Sentinel 节点发现
2、redission 分布式锁
订阅锁信息,查看是否可以获取对应的信息
参考资料:
Redis 发布订阅,小功能大用处,真没那么废材! - 楼下小黑哥 - 博客园
Redis发布与订阅是否可以用于实现消息队列?
答:Redis订阅功能用于实现消息队列功能的时候过于简单,需要根据业务场景判断。Redis消息队列即使使用也只适合用于处理不重要的消息。
原因:Redis订阅功能需要实时处理,不支持数据持久化;发送过来直接送走,无法缓存,因此不适合用于消息队列。
Redis消息队列与一般消息队列的对比:
将redis发布订阅模式用做消息队列和rabbitmq的区别_weixin_34061042的博客-优快云博客
第19章 事务
Redis通过MULTI、EXEC、WATCH等命令来实现事务功能。事务执行期间,事务不会中断事务而改去执行其他客户端的命令请求,它会将事务中的所有命令都执行完毕,然后才去处理其他客户端的命令请求。
事务的实现
(1)事务开始,通过MULTI实现
(2)命令入队
(3)事务执行
WATCH命令的实现
watch命令是一个乐观锁(optimistic locking),它可以在EXEC命令执行之前,监视任意数量的数据库键,并在EXEC命令执行时,检查被监视的键是否至少有一个被修改过了,如果是的话,说明事务的安全性已经被破坏,服务器将拒绝执行事务,并向客户端发送代表事务执行失败的空回复。
Redis事务没有回滚的概念,命令会全部执行完毕,有问题的指令会进行错误处理。
另外Redis使用单线程的方式来执行事务,并且服务器保证,在执行事务期间不会对事务进行中断,因此,Redis的事务总是以串行的方式运行的,并且事务也总是具有隔离性的。