Redis(02)——事务管理

本文详细解释了Redis事务的概念,包括其特性(无隔离级别、原子性与回滚),操作流程(watch、multi、exec等),以及事务超时的设置和作用,有助于理解如何有效利用Redis事务进行数据操作和避免潜在问题。

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

事务概念

Redis事务的本质是一组命令的集合。事务支持一次执行多个命令,一个事务中所有命令都会被序列化,在事务执行过程中,会按照顺序串行化执行队列中的命令,其他客户端提交的命令请求不会插入到事务执行命令序列中

  1. Redis事务没有隔离级别

批量操作在发送EXEC命令前被放入队列缓存,并不会被实际执行,也就不存在事务内的查询要看到事务里的更新,事务外查询不能看到

  1. Redis不保证原子性、不支持回滚

Redis中单条命令是原子性执行的,但事务不保证原子性,且没有回滚。事务中任意命令执行失败,其余的命令仍会被执行

事务超时
Redis 事务支持超时。Redis 事务超时是指在指定的时间内没有执行 EXEC 命令,那么该事务就会被自动回滚。
Redis 事务超时可以防止事务长时间处于打开状态,从而导致死锁或其他问题。
Redis 事务超时可以通过以下两种方式设置:

  1. 显式超时:为了避免事务超时,可以在事务中显式地使用 EXPIRE 命令为事务设置显式超时。例如,以下命令将为当前事务设置 10 秒的超时:EXPIRE my_transaction 10
  2. 隐式超时:如果在配置文件中设置了事务超时,那么所有事务都会隐式地具有该超时值。例如,以下配置将为所有事务设置 30 秒的超时:transaction-timeout 30

Redis 事务超时优点

  1. 防止死锁:如果一个事务长时间处于打开状态,那么它可能会导致死锁。例如,如果两个事务同时尝试修改同一个键,那么这两个事务都会被阻塞,并且都不能执行。Redis 事务超时可以防止这种情况的发生,因为如果一个事务在超时时间内没有执行 EXEC 命令,那么它就会被自动回滚。
  2. 提高性能:Redis 事务超时可以提高 Redis 的性能。如果一个事务长时间处于打开状态,那么它会占用 Redis 的资源,并且可能会导致 Redis 的性能下降。Redis 事务超时可以防止这种情况的发生,因为如果一个事务在超时时间内没有执行 EXEC 命令,那么它就会被自动回滚,并且 Redis 的资源就会被释放。

事务操作

  1. watch key1[key2…]:监视一或多个key,如果在事务执行之前,被监视的key被其他命令改动,则事务被打断(类似乐观锁)
  2. multi:标记一个事务块的开始(queued)
  3. exec:执行所有事务块的命令(一旦执行exec后,之前加的监控锁都会被取消掉)
  4. discard:取消事务,放弃事务块中的所有命令
  5. unwatch:取消watch对所有key的监控

基本使用

127.0.0.1:6379> multi   # 开启事务
OK
127.0.0.1:6379> set k1 v1
QUEUED
127.0.0.1:6379> set k2 v2
QUEUED
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值