Redis 事务
2021/4/29 2:55:26
本文主要是介绍Redis 事务,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
- redis事务就是将一系列命令打包成一个队列之后,一起执行。中间不允许其他命令打断。
1. 基本操作
- 开启事务。此后所有命令,都会放进队列里面。
multi
- 执行事务。一次性将队列里面所有事务都执行了。
exec
- 取消事务。终止当前事务的定义,发生在multi之后,exec之前
discard
2. 注意事项
- 如果在定义事务期间,出现语法错误,就直接整个事务崩了。最后也没办法执行。
- redis的事务没有回滚操作,执行了就是执行了。即使中间出错了,前面执行的也不会回滚。
3. 锁
3.1 监视锁
- 即监视某个key的变化,如果在事务初始化
multi
之后,事务执行(exec
)之前,该key发生了变化。则该事务不能执行。 - 无论在事务里面有没有对该key进行操作,事务一律不能执行。
- 该操作,可以防止多个客户端同时操作的时候,发生一些并发的情况。
3.1.1 操作
- 在声明事务之前,声明要监视的key
watch key1 [key2……]
- 可以在事务声明之前,提前取消所有watch。否则,在事务里面就没办法取消了。
unwatch
- 声明事务
multi
- 一系列操作
- 执行事务。如果再次之前key发生了变化,那就直接崩了,没办法执行。
exec
3.2 分布式锁
- 这就是个防君子不防小人的玩意…
- 之前在基本数据类型中提到,在创建key的时候,可以通过
setnx
实现当没有的时候创建,存在的时候不创建。 - 借此,这里就可以创建一个分布式锁。当该锁已经被创建了,那就不执行自己的任务,直到上一个客户端执行完之后,删除了该锁。
- 因此,需要客户端之间协商出一个协议,将该锁取相同的名字。
3.2.1 实现
- 创建一个公共锁。如果已经被设置了,那就自己在外面等待,直到该锁已经被
del
setnx lock-key value
- 删除锁。其他客户端就可以设置了。
del lock-key
- 但是,如果客户端忘记了解锁。那就完蛋了,别的客户端一直在外面等。因此,可以给锁设一个生命周期,在指定时间内,如果没被删除,那就自动失效。
expire lock-key second pexpire lock-key milliseconds
第一个是秒级的,第二个是毫秒级的
- 由于操作通常都是微秒或毫秒级,因此该锁定时间不宜设置过大。具体时间需要业务测试后确认。
这篇关于Redis 事务的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-09-26阿里云Redis项目实战:新手入门教程
- 2024-09-26阿里云Redis资料入门教程
- 2024-09-25阿里云Redis入门教程:快速掌握Redis的基本操作
- 2024-09-25阿里云Redis学习:新手入门教程
- 2024-09-21Redis资料入门教程:轻松掌握Redis基础知识
- 2024-09-21Redis资料:入门级用户必学教程
- 2024-09-21Redis资料:新手入门教程与实践指南
- 2024-09-20Redis教程:从入门到实践的全面指南
- 2024-09-20Redis教程:初学者快速入门指南
- 2024-09-20Redis教程:新手入门与实践指南