对事务部分支持
概念
- 可以一次执行多个命令,本质上是一组命令的集合
- 一个事务中的所有命令都会序列化,按照顺序的串行化执行而不会被其他命令插入,不许加塞
作用
一个队列中,一次性,顺序性,排他性的执行一系列命令
用法
Multi:标记一个事务端的开始:返回ok,告诉知道了,开启事务
Exec:执行所有事务块内的事务
Discad: 取消事务,放弃执行所有事务块内的事务
Watch|unwactn key,key: 监视一个或多个key,如果在执行事务之前,key被其他命令改动,事务将被打断 ---类似乐观锁
事务的一致性,连坐性
如果事务中,有一个命令有错误,所有的命令都不能执行,在第一次检测的时候报错了
冤有头债有主:语法检测通过之后,那条命令出错了,那条命令不执行;但是其他命令可以执行
连坐性和命令的执行:语法检测
watch 监控
- 悲观锁 :并发性极差,一致性极好,如表锁;认为一定有人修改数据,会锁定整张表,锁定记录,锁定读写等,都是在操作之前先上锁
- 乐观锁: 并发性好,一致性较差;认为没有人修改数据,只有我一个修改;在表中添加一个version列,记录修改版本,每次修改数据时对照version字段
- CAS check and set:先加监控,再Multi修改,如果没有被别人修改,则完成操纵,如果被别人修改了,事务自动取消,完成之后unwatch取消
事务的三个阶段
- 开始:以Multi开始一个事务
- 入队:将多个命令入队到事务中,接到这些命令并不会立即执行,而是放到等待执行的事务队列里卖弄
- 执行:有Exec命令触发事务
特性
- 单独的隔离操作:事务中的所有命令都会序列化,按顺序执行。事务在执行的过程中,不会被其他客户端发送来的命令请求打破
- 没有隔离操作的概念:队列中的命令没有提交之前都不会实际的被执行,因为事务提交前任何指令都不会被实际执行,也就不存在“事务内的查询要看到事务内的更新,事务外的查询不能看到”的问题
- 不保证原子性:redis同一个事务中如果有一条命令执行失败,其后的命令依旧会被执行,不会回滚
redis 发布订阅
Redis 发布订阅(pub/sub)是一种消息通信模式
- 发送者(pub)发送消息
- 订阅者(sub)接收消息
-
Redis 客户端可以订阅任意数量的频道,多个客户端连接同一个服务器
PSUBSCRIBE pattern [pattern …] | 订阅一个或多个符合给定模式的频道 |
PUBSUB subcommand [argument | 查看订阅与发布系统状态 |
PUBLISH channel message | 将信息发送到指定的频道 |
PUNSUBSCRIBE [pattern [pattern …]] | 退订所有给定模式的频道 |
SUBSCRIBE channel [channel …] | 订阅给定的一个或多个频道的信息 |
UNSUBSCRIBE [channel [channel …]] | 指退订给定的频道 |