一、 事务:

与关系型数据库一样redis也支持事务。也就是可以一次执行多个命令,本质是一组命令的集合。一个事务中的所有命令都会序列化,按顺序地串行化执行而不会被其它命令插入,不许加塞。

二、 事务能干嘛?

一个队列中,一次性、顺序性、排他性的执行一系列命令。

三、 redis事务支持的命令

1、 MULTI:标记一个事务块的开始。 随后的指令将在执行EXEC时作为一个原子执行。

2、 EXEC:执行事务中所有在排队等待的指令并将链接状态恢复到正常 当使用WATCH 时,只有当被监视的键没有被修改,且允许检查设定机制时,EXEC会被执行。

3、 DISCARD:刷新一个事务中所有在排队等待的指令,并且将连接状态恢复到正常。如果已使用WATCH,DISCARD将释放所有被WATCH的key。

4、 WATCH:标记所有指定的key 被监视起来,在事务中有条件的执行(乐观锁)。

事务可以一次执行多个命令, 并且带有以下两个重要的保证:
事务是一个单独的隔离操作:事务中的所有命令都会序列化、按顺序地执行。事务在执行的过程中,不会被其他客户端发送来的命令请求所打断。事务是一个原子操作:事务中的命令要么全部被执行,要么全部都不执行。

四、 redis事务的操作

1、 正常执行


使用MULTI开启一个事务,每当添加一个命令,将该命令加入队列,使用EXEC命令提交时全部执行。

2、 放弃事务


使用命令DISCARD取消事务。

3、 全体连坐

全体连坐的意思就是在一个事务中有一条语句语法有错误就会导致这条事务全部失效。

命令出错,所有的命令失效。

4、 冤头债主

意思就是在所有的命令均为正确的情况下,其中一条命令没有拿到数据,而导致该条数据为空,但是其他命令还是会执行成功。

K99不存在,但是其他的命令还是执行成功。

5、 WATCH操作

WATCH用于监控键是否发生改变。被 WATCH 的键会被监视,并会发觉这些键是否被改动过了。 如果有至少一个被监视的键在 EXEC 执行之前被修改了, 那么整个事务都会被取消, EXEC 返回nil-reply来表示事务已经失败。

悲观锁:

每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会block直到它拿到锁。传统的关系型数据库里边就用到了很多这种锁机制,比如行锁,表锁等,读锁,写锁等,都是在做操作之前先上锁。

乐观锁:

每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据,可以使用版本号等机制。乐观锁适用于多读的应用类型,这样可以提高吞吐量。
WATCH使用的是乐观锁策略。
一旦执行了exec之前加的监控锁都会被取消掉了。或者使用unwatch取消监控。

小结

1、WATCH类似于乐观锁,在事务提交时,如果key的值已被别的客户端改变,整个事务队列都不会执行。
2、通过WATCH命令在事务执行之前监控了多个keys,若在WATCH之后key的值发生了变化,EXEC命令执行的事务将被放弃。
3、事务的三阶段
开启–MULTI,入队,执行-EXEC。
4、事务的三特性
单独隔离操作、没有隔离级别的概念、不保证原子性(执行失败、集体连坐、冤头债主等)。

分布式内存数据库--Redis事务相关推荐

  1. 分布式内存数据库---Redis的持久化

    一. Redis 提供了不同级别的持久化方式: Redis提供了两种方式对数据进行持久化,分别是RDB和AOF. RDB持久化方式能够在指定的时间间隔能对你的数据进行快照存储. AOF持久化方式记录每 ...

  2. 分布式内存数据库---redis配置文件常用配置介绍

    想要熟练使用redis,那么redis的相关配置也要非常熟悉,在大数据开发中使用redis就常常需要修改redis的常见配置. 一. redis的单位 redis的数据单位跟常用的单位有点不一样,打开 ...

  3. 分布式内存数据库---Redis操作String、list、set、hash和Zset

    Redis是一个Key-Value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合)和zset(有序集合).这些数据类 ...

  4. 分布式内存数据库---Redis数据库之(键)key

    Redis数据库之(键)key 前面讲了Redis存储的数据类型是key-value类型,Value可以是如String.List.Set.Hashes和Sorted-Set.这些命令都具有一个共同点 ...

  5. 高性能分布式缓存Redis(缓存分类 安装 数据类型选择和应用场景 发布订阅 事务 Lua脚本 慢查询日志)

    高性能分布式缓存Redis 高性能分布式缓存Redis 1. 缓存发展史&缓存分类 1.1 大型网站中缓存的使用 1.2 常见缓存的分类 1.3 分布式缓存选型方案对比 2. Redis概述& ...

  6. 纯java分布式内存数据库_最新Java岗面试清单:分布式+Dubbo+线程+Redis+数据库+JVM+并发...

    最近可能有点闲的慌,没事就去找面试面经,整理了一波面试题.我大概是分成了Java基础.中级.高级,分布式,Spring架构,多线程,网络,MySQL,Redis缓存,JVM相关,调优,设计模式,算法与 ...

  7. Redis事务和分布式锁

    Redis事务 Redis中的事务(transaction)是一组命令的集合.事务同命令一样都是Redis最小的执行单位,一个事务中的命令要么都执行,要么都不执行.Redis事务的实现需要用到 MUL ...

  8. Redis应用学习——Redis事务与实现分布式锁

    2019独角兽企业重金招聘Python工程师标准>>> 1. Redis事务机制 1. 与MySQL等关系数据库相同,Redis中也有事务机制,Redis的事务实质上是命令的集合,但 ...

  9. 【2020尚硅谷Java大厂面试题第三季 04】Redis 9种数据类型使用场景,分布式锁演变步骤,lua脚本,redis事务,Redisson,Redis内存占用,删除策略,内存淘汰策略,手写LRU

    1.安装redis6.0.8 2023 02 02 为:redis-7.0.8.tar.gz 2.redis传统五大数据类型的落地应用 3.知道分布式锁吗?有哪些实现方案?你谈谈对redis分布式锁的 ...

最新文章

  1. 荐号 | 技术人如何在职场竞争中处于优势地位
  2. 跨浏览器的CSS固定定位{position:fixed}
  3. 一分钟了解ArrayList和Vector的区别
  4. jQuery到底有什么好?
  5. Redis cluster原理
  6. 保姆级C语言版高斯坐标正算反算倾情奉献!
  7. 融于心而表于行 之 程序的执行问题
  8. lightOJ 1132 Summing up Powers(矩阵 二分)
  9. 人生第一次被迫转行!实现月薪16K!勤能补拙是良训,一分耕耘一分才
  10. 在三维坐标中给出三个点,求三个点所在平面的圆心和圆心坐标
  11. 通用技术和信息技术合格考知识点_通用技术学考复习_重要知识点汇总
  12. 准备计算机二级c语言需要多久,计算机二级自学需要准备多久
  13. 口算题自动生成小工具
  14. 学神经网络需要什么基础,深度神经网络怎么用
  15. java中怎么输入中文_MultiMC下载-MultiMC中文实用版 v1.0
  16. 大数据毕设 - 深度学习植物识别系统(python OpenCV)
  17. Flink State 深度讲解
  18. 共享纸巾机系统开发,关于Switch的使用
  19. scanf(),printf()以及fscanf(),fprintf()的返回值
  20. 迅雷向链享云售让部分区块链业务:包括链克与链克商城

热门文章

  1. 框架下cookie的使用_为什么自动化运维系统越来越多使用都RESTful API?
  2. centos7 go yum 安装_超详细的centos7下载安装Postgresql11(yum安装)教程
  3. C/Cpp / 野指针和悬空指针
  4. C/Cpp / STL / map 的 key 为自定义的 struct 或者 class 时,有什么注意事项?
  5. php四则运算出题器_四则运算出题器3
  6. gis如何加入emf图片_当GIS运用于建筑遗产保护
  7. android 如何做记住密码
  8. SlidingMenu实现侧滑
  9. 使用 istringstream 遇到的一点小问题
  10. IsPostBack原理