当前位置:网站首页>如何用Redis实现事物以及锁?
如何用Redis实现事物以及锁?
2022-07-28 18:42:00 【我是一棵卷心菜】
大家好,我是卷心菜。本篇主要讲解Redis中的事物以及锁的简单实现,如果您看完文章有所收获,可以三连支持博主哦~,嘻嘻。
一、什么是Redis事物
- Redis事务是一个单独的隔离操作:事务中的所有命令都会序列化、按顺序地执行。事务在执行的过程中,不会被其他客户端发送来的命令请求所打断。
作用:串联多个命令防止别的命令插队。
二、Redis 事务命令
下表列出了 redis 事务的相关命令:

注意:加入事务的命令暂时进入到任务队列中,并没有立即执行,只有执行exec命令才开始执行
三、命令行演示
演示事物的开始、执行
127.0.0.1:6379> MULTI
OK
127.0.0.1:6379(TX)> set name cabbage
QUEUED
127.0.0.1:6379(TX)> set age 20
QUEUED
127.0.0.1:6379(TX)> EXEC
1) OK
2) OK
127.0.0.1:6379> keys *
1) "name"
2) "age"
演示事物的开始与取消:
127.0.0.1:6379> MULTI
OK
127.0.0.1:6379(TX)> set name cabbage
QUEUED
127.0.0.1:6379(TX)> set age 20
QUEUED
127.0.0.1:6379(TX)> DISCARD
OK
127.0.0.1:6379> keys *
(empty array)
演示事物的watch:
四、事物注意事项
指命令书写格式有误时,整体事务中所有命令均不会执行,包括那些语法正确的命令
指命令格式正确,但是无法正确的执行时,能够正确运行的命令会执行,运行错误的命令不会被执行且对应的数据不会实现回滚。

五、事务三特性
- 单独的隔离操作
事务中的所有命令都会序列化、按顺序地执行。事务在执行的过程中,不会被其他客户端发送来的命令请求所打断。 - 没有隔离级别的概念
队列中的命令没有提交之前都不会实际被执行,因为事务提交前任何指令都不会被实际执行 - 不保证原子性
事务中如果有一条命令执行失败,其后的命令仍然会被执行,没有回滚
六、分布式锁
业务分析:虽然redis是单线程的,但是多个客户端对同一数据同时进行操作时,如何避免不被同时修改?解决方案:使用 expire 为锁key添加时间限定,到时不释放,则放弃锁命令行演示:
127.0.0.1:6379> set name cabbage
OK
127.0.0.1:6379> setnx lock_time 1
(integer) 1
127.0.0.1:6379> EXPIRE lock_time 20
(integer) 1
127.0.0.1:6379> get name
"cabbage"
通过这种方式,即使某个客户端由于某种原因没有手动释放锁,也不会造成死锁。因为设置了锁lock_time的有效时间为20秒,当20秒过后,其它的客户端就可以拿到锁、实施业务操作、释放锁了。
感谢阅读,一起进步,嘻嘻~
边栏推荐
- Mysql报错:Specified key was too long; max key length is 767 bytes
- 一文让你搞懂什么是TypeScript
- 一文读懂Okaleido Tiger近期动态,挖掘背后价值与潜力
- Raspberry pie 4B parsing PWM
- Solutions to the environment created by Anaconda that cannot be displayed in pycharm
- 上海交大牵手淘宝成立媒体计算实验室:推动视频超分等关键技术发展
- GRU神经网络
- Database tuning - connection pool optimization
- LeetCode_位运算_中等_260.只出现一次的数字 III
- About the title of linking to other pages
猜你喜欢

类与对象(中)

Solve the problem that the nocturnal simulator cannot access the Internet after setting an agent

DHCP.DNS.NFS

漂亮的蓝色背景表单输入框样式

Clock distribution of jesd204 IP core (ultrascale Series)

如何平衡SQL中的安全与性能?

Simple example of C language 1

Nocturnal simulator settings agent cannot be saved

Dsactf July re

Unity typewriter teaches you three ways
随机推荐
企业如何成功完成云迁移?
[dynamic link library (DLL) initialization example program failed "problem]
Talking about canvas and three rendering modes in unity
Simple example of C language 1
Database tuning - connection pool optimization
Vivado design single cycle CPU
Product manager interview | innovation and background of the fifth generation verification code
Data mining (data preprocessing) -- Notes
LVS load balancing cluster
Explain RESNET residual network in detail
Use of DDR3 (axi4) in Xilinx vivado (3) module packaging
Unity uses shader to quickly make a circular mask
Shanghai Jiaotong University joined hands with Taobao to set up a media computing laboratory: promoting the development of key technologies such as video super score
太空射击第10课: Score (繪畫和文字)
js飞入js特效弹窗登录框
同质化代币与 NFT 结合,如何使治理结构设计更灵活?
How to make the design of governance structure more flexible when the homogenization token is combined with NFT?
Unity performance optimization
Teach you unity scene switching progress bar production hand in hand
View the thread stack according to the lwtid of opengauss/mogdb.