回顾Redis知识点之事务机制

  • Redis事务机制
  • 为什么 Redis 不支持回滚(roll back)
  • 假如事务执行一半的时候Redis宕机怎么办?
  • 为什么需要内存回收?

上一篇回顾下Redis基础知识点中有简单介绍Redis与Memcache的区别?Redis的持久化方案由哪些?Redis的集群方式有哪些等知识点,这里就开始介绍Redis事务机制。

Redis事务机制

Redis事务功能是通过MULTI、EXEC、DISCARD和WATCH 四个原语实现的。Redis会将一个事务中的所有命令序列化,然后按顺序执行。但是Redis事务不支持回滚操作,命令运行出错后,正确的命令会继续执行。

  • MULTI: 用于开启一个事务,它总是返回OK。 MULTI执行之后,客户端可以继续向服务器发送任意多条命令,这些命令不会立即被执行,而是被放到一个待执行命令队列中
  • EXEC按顺序执行命令队列内的所有命令。返回所有命令的返回值。事务执行过程中,Redis不会执行其它事务的命令。
  • DISCARD清空命令队列,并放弃执行事务, 并且客户端会从事务状态中退出
  • WATCH:Redis的乐观锁机制,利用compare-and-set(CAS)原理,可以监控一个或多个键,一旦其中有一个键被修改,之后的事务就不会执行

使用事务时可能会遇上以下两种错误:

  • 执行 EXEC 之前,入队的命令可能会出错。比如说,命令可能会产生语法错误(参数数量错误,参数名错误,等等),或者其他更严重的错误,比如内存不足(如果服务器使用 maxmemory 设置了最大内存限制的话)。 Redis 2.6.5 开始,服务器会对命令入队失败的情况进行记录,并在客户端调用 EXEC 命令时,拒绝执行并自动放弃这个事务。
  • 命令可能在 EXEC 调用之后失败。举个例子,事务中的命令可能处理了错误类型的键,比如将列表命令用在了字符串键上面,诸如此类。 即使事务中有某个/某些命令在执行时产生了错误, 事务中的其他命令仍然会继续执行,不会回滚。

Redis官方文档参考链接Redis事务

为什么 Redis 不支持回滚(roll back)

不支持回滚的优点:

  • 从实用性的角度来说,失败的命令是由编程错误造成的,而这些错误应该在开发的过程中被发现,而不应该出现在生产环境中
  • 需要对回滚进行支持,所以 Redis 的内部可以保持简单且快速

因此,只要程序员编程是正确的,理论上说Redis会正确执行所有事务,无需回滚。

假如事务执行一半的时候Redis宕机怎么办?

Redis有持久化机制,因为可靠性问题,一般会使用AOF持久化。事务的所有命令也会写入AOF文件,但是如果在执行EXEC命令之前,Redis已经宕机,则AOF文件中事务不完整。使用 redis-check-aof 程序可以移除 AOF 文件中不完整事务的信息,确保服务器可以顺利启动。

为什么需要内存回收?

  • Redis是基于内存操作的,数据都是保存当中的,所以资源时有限且宝贵的。
  • Redis在set指令是可以指定key过期时间的,过期的数据key就失效了,数据也就没用了

所以基于以上两点,为了保证Redis能继续提供可靠的服务,Redis需要一种机制清理掉不常用的、无效的、多余的数据,失效后的数据需要及时清理,这就需要内存回收了。

关于Redis的内存回收主要分为过期删除策略和内存淘汰策略两部分。这些写到一篇文章当中

【Redis】回顾Redis知识点之事务机制相关推荐

  1. Redis的事务机制

    文章目录 一.事务演示 二.事务实现原理 2.1 事务开始 2.2 命令入队 2.3 事务执行 三.WATCH命令的实现原理 3.1 使用WATCH命令监视数据库键 3.2 监视机制的触发 3.3 判 ...

  2. Redis教程–事务机制基本介绍

    摘要:Redis是一个简单.高效的内存数据存储,支持多种数据结构.当然,有数据操作的地方往往都少不了事务性,Redis是否支持呢?答案是肯定的.本文将详细讲述如何redis事务使用相关的内,如有错误, ...

  3. 事务机制:Redis能实现ACID属性吗?

    ACID特性无需多言.我们知道关系数据库比如mysql可以实现事务的ACID特性,begin,commit,回滚实现. 那么redis可以实现ACID吗,结论是不能完全保证. 首先要知道redis通过 ...

  4. Redis学习笔记~Redis事务机制与Lind.DDD.Repositories.Redis事务机制的实现

    回到目录 Redis本身支持事务,这就是SQL数据库有Transaction一样,而Redis的驱动也支持事务,这在ServiceStack.Redis就有所体现,它也是目前最受业界认可的Redis驱 ...

  5. Redis事务机制 -Redis 核心技术与实战

    事务是数据库的一个重要功能.所谓的事务,就是指对数据进行读写的一系列操作.事务在执行时,会提供专门的属性保证,包括` 原子性(Atomicity) 一致性(Consistency) 隔离性(Isola ...

  6. Redis实战 - 15 Redis事务机制和乐观锁实现

    文章目录 1. Redis事务简介 2. Redis事务的操作命令 3. Redis的事务回滚 4. Redis监控事务 1. Redis事务简介 在 Redis 中,也存在多个客户端同时向 Redi ...

  7. redis 学习 --->>> 9、Redis 事务机制

    9.Redis 事务机制 1.事务的定义 Redis 事务是一个单独的隔离操作: 事务中的所有命令都会序列化.按顺序地执行.事务在执行的过程中,不会被其他客户端发送来的命令请求所打断. Redis事务 ...

  8. Redis 事务机制实现

    1.首先,我们来看一下Redis中事物相关的指令, 命令原型        命令描述 MULTI   用于标记事务的开始,其后执行的命令都将被存入命令队列,直到执行EXEC时,这些命令才会被原子执行. ...

  9. Redis 事务机制深入浅出

    笔者事务相关文章链接:Redis WATCH事务监视机制与回滚 什么是Redis事务 Redis的事务就是一组命令的集合.Redis提供了将一组命令打包集合的方法,并且能够一次性.按顺序的执行多个命令 ...

最新文章

  1. 五分钟搞定VS2017+TensorRT环境搭建
  2. html5掉落效果,HTML5 菜单掉落动效
  3. App-V 4.6 SP1系列之五包加速器的制作
  4. 两点之间 这题有毒啊,不会做
  5. 局域网lan设置_4G工业路由器的WAN、LAN组网方式
  6. App开发流程之创建项目和工程基本配置
  7. 高性能计算(HPC)的前景、如何学习HPC
  8. python网页抓取与按键精灵原理一样吗_Python——爬虫——爬虫的原理与数据抓取...
  9. 基于MATLAB的机械振动合成规律研究,基于MATLAB的机械振动分析研究
  10. 用vue开发的h5商城小程序,thinkphp5开发拼团、砍价、秒杀、优惠券、积分、分销等功能
  11. java 设置字符编码_java中的字符编码方式
  12. 有监督对比学习在分类任务中的应用 Supervised Contrastive Learning
  13. Visual Studio安装指南
  14. T3 登陆报错 3709
  15. ZenCart商店 OpenzcTPL模版安装教程
  16. 如果你相中上了一个程序员小伙
  17. 每日阅读:你如何过一天,你就如何过一生
  18. java屏蔽虚拟按键代码_Android虚拟按键 Recent键屏蔽(隐藏)
  19. Node.js笔记--Day5
  20. 随机森林原始论文_【科普天地】2020年还需要阅读的10篇人工智能论文(附链接)...

热门文章

  1. Android 适配Dark Theme(暗黑模式),看完跪了
  2. Java经典面试题—— int 和 Integer 有什么区别?谈谈 Integer 的值缓存范围
  3. 【SpringBoot】banner在线生成网站
  4. Jmeter脚本两种录制方式
  5. change在c语言中的用法,change的过去式和用法例句意思及阅读
  6. 旧电脑改装nas Linux,变废为宝 免费又好用的NAS软件推荐
  7. 盛迈坤电商:店铺详情页设置的特点
  8. Matlab Plot添加图名、图例、坐标轴名、坐标网格;画虚线、点划线、两条线;更改字体、字号、轴正方
  9. 域账户或者本地用户,每次开机登陆都重置桌面
  10. 软件工程-体系结构设计