Redis学习-4-1 Redis事务
1.Redis中的事务
Redis中的事务不等同于关系型数据库中的事务,其实就是一些命令,保证事务中的命令是正常执行的,没有回滚的概念。
1>multi:标记一个事务的开始,还未开始执行;
2>exec:执行事务块内的所有命令;
3>discard:取消事务中的所有命令执行;
2.Redis中执行的三种情况:
例:1实现正常事务的逻辑:
multi
sadd works john
sadd works rose
smembers works
exec
例:2exec执行之前,命令语法就是错误的,redis可检测到语法的问题
multi
set username lisi
get username
incr k1 k2
exec
此时get username 是nil
语法的有错误的话,整个事务可以放弃取消的
例:3 放入redis中的命令语法没错,执行的时候才会出错的,事务是正常执行的
lindex:是列表类型的命令,lindex string的变量,语法是没问题的,只要执行的时候发生错误
set username zs
multi
set username lisi
get username
lindex k1 2
exec
get username 变更为lisi说明已经执行了
3.watch和unwatch机制
watch:使用watch监视一个或多个key,跟踪key的value修改情况,如果有key的value值在事务exec执行之前被修改了,整个事务取消,保证任意时刻只有一个事务执行
数据竞争的问题:多个用户同一时间修改同一数据的值,redis一秒钟执行8w数据,碰撞几率太小
unwatch:取消命令
watch机制对应的是关系型数据库中的乐观锁概念
例题:
redisA:
set str.lp 10
watch str.lp
multi
set str.lp 30
此时redisB中get str.lp 是10
redisB中set str.lp 100 ==>OK
redisA中exec 返回的是nil 证明未执行这个命令
redisA中get str.lp是100
这是因为redisA在exec执行事务之前,变量str.lp已经做变更,事务执行是取消的
4.Discard命令执行取消事务
set username zhangsan
multi
set username zhangsan01
set username zhangsan02
discard <放弃事务>
get username 就是zhangsan 因为放弃了事务的执行
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理