Redis事务操作

本文详细介绍了Redis事务的基本概念,包括其特性、操作流程及常见的错误类型。同时探讨了Redis事务中的锁机制,如悲观锁和乐观锁的区别,并给出了处理并发修改问题的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

重要说明

  • Redis单条命令保证原子性,但是事务不保证原子性!

  • Redis事务中没有隔离级别的概念,关系型数据库中存在四个隔离级别【读未提交,读已提交,可重复读,序列化

定义 

事务是一组命令的集合,一个事务中的所有命令会被序列化到命令队列中,执行时会按照顺序执行。

特性

  • 一次性:一次性顺序执行队列中的全部命令

  • 顺序性:按照命令的入队顺序依次执行

  • 排他性:事务执行过程不能被打断

事务操作

1、开启事务(multi)

2、命令入队(redis命令)

3、执行事务(exec)

4、放弃事务(discard)

##示例

#1.开启事务
    multi

#2.命令入队:向List,Set,Hash,Zset中添加元素并获取元素
    #设置值
    lpush listKey gk gg yl
    sadd setKey gk gg yl
    hset hashKey h1 val1 h2 val2
    zadd zsetKey 1 z1 2 z2 3 z3

    #获取值
    lpop listKey
    smembers setKey
    hget hashKey h1
    zrange zsetKey 0 -1 withscores

 错误类型

  • 编译型错误:事务中的Redis命令语法有错误,事务中所有命令不会被执行
  • 运行时异常:如果事务命令队列中不存在语法错误,其他命令会正常执行,异常命令会抛出异常

锁--Redis监控(watch)

  • 悲观锁:认为什么时候都会出问题,无论进行何种操作都会加锁!
  • 乐观锁:认为什么时候都不会出问题,不会上锁,更新数据的时候判断数据是否被修改!

 情况1:事务执行成功,正常结束---更新数据期间没有其他修改操作

情况2: 一个事务未执行完时,另一个线程中的事务修改了变量,该线程中的事务执行失败!

1)开启一个事务命令入队并监听变量,但不执行事务----->当前事务执行出错!

2)开启新的事务,修改前一个事务中正在修改的同一个变量,并执行当前事务。

解决办法 :在执行当前事务之前,先解锁,再加锁,重新执行事务。(保证每次操作的值都是最新的!)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值