流水线
流水线特性允许客户端把任意多条redis命令请求打包在一起,等待服务器将请求完全处理后,一次性将执行结果返回客户端(即批处理思想)
注意事项:
- redis服务器为每个客户段设置的输入缓冲区设置默认值为1GB上限(待验证),超过这个值,服务器将会强行关闭该客户端
事务
redis事务特性:
- 将多个redis命令打包成一个事务,当事务成功执行,意味这其中所有的命令执行成功
- 如果事务没有执行成功,那么它包含的所有命令都不会被执行
- 事务的安全性
- redis事务总是具有
ACID
中的ACI
性质- 原子性A:事务中的所有命令要么都执行,要么都不执行
- 一致性C:确保逻辑一致
- 隔离性I:每个Redis事务独立执行,不同事务之间不会互相干扰
- 当redis运行在特定的持久化模式下,redis事务也具有持久性D,当事务执行完毕时,它的结果将被存储在硬盘中
- redis事务总是具有
- 实践:避免在事务中执行过多命令或执行大量计算,以免造成服务器阻塞
使用multi
和exec
开启一次事务
|
|
按顺序返回事务中所有命令的返回值
将exec
替换成discard
,将丢次此次事务
流水线与事务
很多redis客户端都会使用流水线去包裹事务命令,等到用户输入 exec
命令后,再将所有事务命令通过流水线一并发送至服务器
watch:对键进行监听
客户端要求服务器对一个或多个键进行监听,如果在客户端尝试执行事务之前,这些键值发生变化,那么服务器将拒绝执行客户端发送的事务,并返回一个空值:
|
|
watch + multi 实现事务
使用watch + multi, 确保事务只会在被监视键没有发生任何变化的情况下执行,从而保证事务对被监听键的所有修改都是安全的、正确的、有效的