当前位置: 首页 > news >正文

你真的懂Redis事务吗?

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

MULTI 、 EXEC 、 DISCARD 和 WATCH 是 Redis 事务的基础。
事务可以一次执行多个命令, 并且带有以下两个重要的保证:

  • 事务是一个单独的隔离操作:事务中的所有命令都会序列化、按顺序地执行。事务在执行的过程中,不会被其他客户端发送来的命令请求所打断。
  • 事务是一个原子操作:事务中的命令要么全部被执行,要么全部都不执行。
    EXEC 命令负责触发并执行事务中的所有命令:

当使用 AOF 方式做持久化的时候, Redis 会使用单个 write(2) 命令将事务写入到磁盘中。
然而,如果 Redis 服务器因为某些原因被管理员杀死,或者遇上某种硬件故障,那么可能只有部分事务命令会被成功写入到磁盘中。
如果 Redis 在重新启动时发现 AOF 文件出了这样的问题,那么它会退出,并汇报一个错误。
使用 redis-check-aof 程序可以修复这一问题:它会移除 AOF 文件中不完整事务的信息,确保服务器可以顺利启动。

  • 如果客户端在使用 MULTI 开启了一个事务之后,却因为断线而没有成功执行 EXEC ,那么事务中的所有命令都不会被执行。
  • 另一方面,如果客户端成功在开启事务之后执行 EXEC ,那么事务中的所有命令都会被执行。

从 2.2 版本开始,Redis 还可以通过乐观锁(optimistic lock)实现 CAS (check-and-set)操作,具体信息请参考文档的后半部分。

用法

MULTI 命令用于开启一个事务,它总是返回 OK 。
MULTI 执行之后, 客户端可以继续向服务器发送任意多条命令, 这些命令不会立即被执行, 而是被放到一个队列中, 当 EXEC 命令被调用时, 所有队列中的命令才会被执行。
另一方面, 通过调用 DISCARD , 客户端可以清空事务队列, 并放弃执行事务。
以下是一个事务例子, 它原子地增加了 foo 和 bar 两个键的值:

转载于:https://my.oschina.net/u/3611008/blog/2874098

相关文章:

  • MySQL-去重留一
  • *p=a是把a的值赋给p,p=a是把a的地址赋给p。
  • Presentational and Container Components
  • 使用Python一年多了,总结八个好用的Python爬虫技巧
  • IO的模式
  • [cogs2652]秘术「天文密葬法」
  • 【AliOS Things学习笔记】在Developerkit开发板上运行blink例程
  • 黑盒测试的测试方法
  • 开发阶段
  • angular2+ 生命周期
  • 可见面判别算法---光线投射算法
  • [每日短篇] 10 - Docker 清理无用的镜像
  • 书摘—极致产品
  • 0013-如何在Kerberos与非Kerberos的CDH集群BDR不可用时复制数据
  • MySQL数据类型详解
  • 2017-08-04 前端日报
  • Django 博客开发教程 8 - 博客文章详情页
  • iOS动画编程-View动画[ 1 ] 基础View动画
  • Nginx 通过 Lua + Redis 实现动态封禁 IP
  • React as a UI Runtime(五、列表)
  • Spring声明式事务管理之一:五大属性分析
  • Vue 重置组件到初始状态
  • vue数据传递--我有特殊的实现技巧
  • 不发不行!Netty集成文字图片聊天室外加TCP/IP软硬件通信
  • 动态规划入门(以爬楼梯为例)
  • 构造函数(constructor)与原型链(prototype)关系
  • 回顾2016
  • 看图轻松理解数据结构与算法系列(基于数组的栈)
  • 你不可错过的前端面试题(一)
  • 前端面试之闭包
  • 如何进阶一名有竞争力的程序员?
  • 使用 Docker 部署 Spring Boot项目
  • 硬币翻转问题,区间操作
  • 最简单的无缝轮播
  • 3月27日云栖精选夜读 | 从 “城市大脑”实践,瞭望未来城市源起 ...
  • 宾利慕尚创始人典藏版国内首秀,2025年前实现全系车型电动化 | 2019上海车展 ...
  • ​LeetCode解法汇总1410. HTML 实体解析器
  • #pragma once
  • #快捷键# 大学四年我常用的软件快捷键大全,教你成为电脑高手!!
  • ${factoryList }后面有空格不影响
  • (1)Nginx简介和安装教程
  • (二)Linux——Linux常用指令
  • (分布式缓存)Redis持久化
  • (四)搭建容器云管理平台笔记—安装ETCD(不使用证书)
  • (转)Android中使用ormlite实现持久化(一)--HelloOrmLite
  • ./indexer: error while loading shared libraries: libmysqlclient.so.18: cannot open shared object fil
  • .Net 访问电子邮箱-LumiSoft.Net,好用
  • .NET 自定义中间件 判断是否存在 AllowAnonymousAttribute 特性 来判断是否需要身份验证
  • .NET精简框架的“无法找到资源程序集”异常释疑
  • .NET中winform传递参数至Url并获得返回值或文件
  • .net中调用windows performance记录性能信息
  • .sys文件乱码_python vscode输出乱码
  • .xml 下拉列表_RecyclerView嵌套recyclerview实现二级下拉列表,包含自定义IOS对话框...
  • [].slice.call()将类数组转化为真正的数组
  • [20171101]rman to destination.txt