redis事务执行常用命令及watch监视详解

 更新时间:2023年11月23日 11:18:13   作者:bug生产者  
这篇文章主要为大家介绍了redis事务执行常用命令及watch监视详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

redis事务

注意:我使用的版本是6.0.10,不同版本可能略有差别

redis事务就是一组命令的集合,一个事务中所有命令都会序列化,按顺序的串行化执行而不会被其他命令插入

  • Redis的事务仅仅是保证事务里的操作会被连续独占的执行,因为是单线程架构,在执行完事务内所有指令前是不可能再去同时执行其他客户端的请求的
  • Redis的事务没有隔离级别的概念,因为事务提交前任何指令都不会被实际执行,也就不存在事务内的查询要看到事务里的更新,在事务外查询不能看到这种问题了
  • Redis的事务不保证原子性,也就是不保证所有指令同时成功或同时失败,只有决定是否开始执行全部指令的能力,没有执行到一半进行回滚的能力

事务的常用命令

  • multi 标记一个事务块的开始,后续命令逐个放入队列中
  • exec 执行事务块的命令
  • discard 取消事务,丢弃事务块的命令
  • watch key [key ...] 监视key,如果在事务执行之前,这个key被其他命令所改动,则事务中断
  • unwatch 取消监视所有key

事务的执行

#标注事务的开始
MULTI
OK
#在事务内部的操作全是入队,不会真正执行
set tran1 v1
QUEUED
set tran2 v2
QUEUED
#执行
exec
1) OK
2) OK

redis的事务没有隔离级别的概念,并且不会保证原子性

  • 如果任何一个命令语法有错,Redis会直接返回错误,所有的命令都不会执行
  • 如果某个命令执行错误,那么其它的命令仍然会正常执行,然后在执行后返回错误信息
  • Redis不提供事务回滚的功能,开发者必须在事务执行出错后,自行恢复数据库状态

watch监视

watch指令类似于乐观锁,在事务开始之前使用,如果在watch之后有任何所监视的key发生变化,exec指令所执行的事务将会被放弃,当 EXEC 被调用后,所有的之前被监视的键值会被取消监视,不管事务是否被取消或者执行。并且当客户端连接丢失的时候,所有东西都会被取消监视

#设值
set balance 100
OK
#监视
watch balance
OK
#修改
set balance 200
OK
get balance
"200"
#开启事务
MULTI 
OK
#修改入队
DECRBY balance 10
QUEUED
#执行失败
exec
(nil)
get balance
"200"

redis只能保证事务中的操作顺序执行,但是如果事务中有一条命令失败了,并不会回滚其他命令

以上就是redis事务执行常用命令及watch监视详解的详细内容,更多关于redis事务执行watch监视的资料请关注脚本之家其它相关文章!

相关文章

  • 微服务Spring Boot 整合 Redis 实现好友关注功能

    微服务Spring Boot 整合 Redis 实现好友关注功能

    这篇文章主要介绍了微服务Spring Boot 整合 Redis 实现 好友关注,本文结合示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-12-12
  • Linux Redis 的安装步骤详解

    Linux Redis 的安装步骤详解

    这篇文章主要介绍了 Linux Redis 的安装步骤详解的相关资料,希望大家通过本文能掌握如何安装Redis,需要的朋友可以参考下
    2017-08-08
  • Redis发布订阅和实现.NET客户端详解

    Redis发布订阅和实现.NET客户端详解

    发布订阅在应用级其作用是为了减少依赖关系,通常也叫观察者模式。主要是把耦合点单独抽离出来作为第三方,隔离易变化的发送方和接收方。下面这篇文章主要给大家介绍了关于Redis发布订阅和实现.NET客户端的相关资料,需要的朋友可以参考下
    2017-03-03
  • 一文弄懂Redis 线程模型

    一文弄懂Redis 线程模型

    使用Redis 时,几乎不存在 CPU 成为瓶颈的情况, Redis 主要受限于内存和网络 使用了单线程后,可维护性高,感兴趣的可以了解一下
    2024-02-02
  • Redis所实现的Reactor模型设计方案

    Redis所实现的Reactor模型设计方案

    这篇文章主要介绍了Redis所实现的Reactor模型,本文将带领读者从源码的角度来查看redis关于reactor模型的设计,需要的朋友可以参考下
    2024-06-06
  • SpringBoot整合Redis入门之缓存数据的方法

    SpringBoot整合Redis入门之缓存数据的方法

    Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API,下面通过本文给大家介绍下SpringBoot整合Redis入门之缓存数据的相关知识,感兴趣的朋友一起看看吧
    2021-11-11
  • redis源码分析教程之压缩链表ziplist详解

    redis源码分析教程之压缩链表ziplist详解

    ziplist结构在redis运用非常广泛,是列表、字典等数据类型的底层结构之一。ziplist的优点在于能够一定程度地节约内存。下面这篇文章主要给大家介绍了关于redis源码分析教程之压缩链表ziplist的相关资料,需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-12-12
  • 配置Redis序列化方式不生效问题及解决

    配置Redis序列化方式不生效问题及解决

    这篇文章主要介绍了配置Redis序列化方式不生效问题及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-12-12
  • 命令行清除Redis缓存的实现

    命令行清除Redis缓存的实现

    本文主要介绍了命令行清除Redis缓存的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-04-04
  • 解决redis修改requirepass后不生效的问题

    解决redis修改requirepass后不生效的问题

    今天小编就为大家分享一篇解决redis修改requirepass后不生效的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-05-05

最新评论