Redis笔记:
[拓展]、Redis可视化工具
RedisClient
github地址:https://github.com/caoxinyu/RedisClient
7、Redis发布订阅
Redis 发布订阅 (pub/sub) 是一种消息通信模式:发送者 (pub) 发送消息,订阅者 (sub) 接收消息。
Redis 客户端可以订阅任意数量的频道。
7.1 发布和订阅
客户端可以订阅频道
发布者给频道发布消息时,客户端能收到
7.2 命令行实现
实现发布/订阅首先要打开两个客户端,第一个客户端订阅频道,另一个客户端向该频道发布消息
SUBSCRIBE channel1 #(接收者)订阅channel1
publish channel1 hello #(发布者)向频道channel1发布消息(返回值是订阅者数量)
演示:
第一个客户端订阅channel1
另一个客户端向channel1发布消息
然后第一个客户端就接收到消息
8、Redis事务管理
8.1 Redis事务的定义
注意:Redis事务和Mysql事务不一样
Redis事务的主要作用就是串联多个命令防止别的命令插队。
Redis事务的三个特性:
- 单独的隔离操作:事务中的所有命令都会序列化、按顺序地执行。事务在执行的过程中,不会被其他客户端发送来的命令请求所打断;
- 没有隔离级别的概念:队列中的命令没有提交之前都不会实际的被执行,因为事务提交前任何指令都不会被实际执行,也就不存在”事务内的查询要看到事务里的更新,在事务外查询不能看到”这个让人万分头痛的问题;
- 不保证原子性:redis同一个事务中如果有一条命令执行失败,其后的命令仍然会被执行,没有回滚;
8.2 Multi、Exec、discard
- Multi:开启组队
- Exec:结束组队并执行
- discard:组队过程中可以放弃组队
输入Multi
命令后,接下来输入的命令会依次进入命令队列中,但是不会执行,直到输入Exec
后Redis才会依次执行队列中的命令,期间可用用discard
放弃组队
8.2.1 事务对错误的处理
1、组队中某个命令出现了报告错误,执行时整个的所有队列都会被取消。
2、如果执行阶段某个命令报出了错误,则只有报错的命令不会被执行,而其他的命令都会执行,不会回滚。
案例:
1、组队成功,提交也成功
2、组队阶段报错,提交失败
3、组队成功,但是提交只有部分成功
8.3 锁机制
案例引入:有很多人有你的账户,同时去参加双十一抢购
一个请求想给金额减8000
一个请求想给金额减5000
一个请求想给金额减1000