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 因为放弃了事务的执行

 

posted on   companion  阅读(85)  评论(0编辑  收藏  举报

编辑推荐:
· 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编程运行原理
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

点击右上角即可分享
微信分享提示