redis的事务(简单介绍)
1、简单描述
redis对事务的支持目前还是比较简单。redis只能保证一个client发起的事务中的命令是可以连续的执行,而中间不会插入其他client的命令。由于redis是但现场来处理所有client的请求的,所以这种事务的实现还是容易的。
2、相关操作
1)mulit命令:发起事务。
2)exec命令:收到此命令后,redis会执行client开启事务后发来的一连串的命令,并返回所有命令的执行结果。
一般来说,redis接收到client发来的命令后是马上处理并返回结果,但是当接收到multi命令时,redis会让这个client的连接进入一个事务的上下文,该连接发来的后续命令并不是立即执行,而是放到队列里面,直到收到exec命令就开始执行队列中的命令,执行完后把结果发给client,然后此连接就关闭事务上下文。

3)discard命令:取消事务处理。比如multi命令发出后,操作了一些命令,在执行exec前遇到问题想退出事务,可以用这个discard命令,那么multi发起之后的所有命令都不会被执行。队列会被清空掉,事务上下文也会关闭。

【注意】multi之后的多个命令,如果有命令执行的结果是出错的,不影响后续的命令的执行。

【注意】上面截图的列子可以看到事务中有命令操作失败的,但是没有回滚,这是redis事务的一个缺陷。
4)乐观锁(watch命令)
在事务执行前可以先watch一些key,如果这些key的值没有变化,那么可以执行mulit的命令,如果有变化,则事务会退出,exec操作会返回nil。
【注意】watch的key是对整个连接有效的,事务也一样。如果连接断开,监视和事务都会被清空。exec和discard以及unwatch都可以清除连接中的监视。
3、小结
1)虽说redis事务在本质上也相当于序列化隔离级别的了,但是由于事务上下文的命令只排队并不会立即执行,所以事务中的写操作不能依赖事务中的读操作结果;
2)在php中可以使用phpredis扩展。如果使用了multi,代码中不能够对之后的命令比如 get命令的结果进行处理,因为get命令会返回一个句柄,而不是返回get到的key的值,因为multi之后的命令会被放在队列中。
3)事务是没有回滚功能,部分命令执行失败,不影响其他的命令。
4)如果事务操作过程中,redis挂了,会导致部分操作成功,部分失败。如果用aof方式做持久化,redis会用write操作写入整个事务内容,但是这样还是有可能只有一部分的事务写入了磁盘,redis重启的时候检测到这种情况,然后失败退出。要使用redis-check-aof工具来修复,会删除写入的这部分的事务,然后重启才能成功。
redis的事务(简单介绍)的更多相关文章
- redis数据库的简单介绍
NoSQL:一类新出现的数据库(not only sql) 泛指非关系型的数据库 不支持SQL语法 存储结构跟传统关系型数据库中的那种关系表完全不同,nosql中存储的数据都是KV形式 NoSQL的世 ...
- Redis持久化的简单介绍
Redis的强大功能很大程度上是由于其将所有数据都存储在内存中,为了使Redis在重启后仍能保证数据不丢失,需要将数据从内存中以某种形式持久化到硬盘中. Redis支持两种方式的持久化,一种是RDB方 ...
- Redis缓存数据库简单介绍
\ 1.什么是redis redis是一种基于内存的高性能键值型数据库(key-value),属于NoSQL,和 Memcached 类似: 从内存读取速度为110000次/s,写入内存速度为8100 ...
- Redis的简单介绍及在Windows下环境搭建
简单介绍 1,Redis是什么 最直接的还是看官方的定义吧. Redis is an open source (BSD licensed), in-memory data structure stor ...
- Python redis 简单介绍
Python redis 简单介绍 1.安装 终端输入: pip(or)pip3.6 install redis 安装成功 2.哈哈,发现我并没有redis服务可以访问,所以到这里,在本机安装了red ...
- 9、redis之事务2-Jedis的八种调用方式(事务、管道、分布式)介绍
1.普通同步 @Test public void test1Normal() { Jedis jedis = new Jedis("localhost"); long start ...
- Redis简单介绍
redis简单介绍 Redis VS key-value缓存产品 Redis支持数据的持久化,能够将内存中的数据保持在磁盘中,重新启动的时候能够再次载入进行使用. Redis不只支持简单的key-va ...
- Redis实战——简单介绍
出自:https://www.cnblogs.com/moonlightL/p/7364107.html Redis简单介绍 Redis是一个开源,高级的键值存储和一个适用的解决方案,用于构建高性能, ...
- Redis主从复制简单介绍
由于本地环境的使用,所以搭建一个本地的Redis集群,本篇讲解Redis主从复制集群的搭建,使用的平台是Windows,搭建的思路和Linux上基本一致! (精读阅读本篇可能花费您15分钟,略读需5分 ...
随机推荐
- ionic开发环境搭建之android及问题
1. 准备工作: a) 配置java开发环境 b) 配置安卓开发环境 注:下载android-studio后,可能会出现android一直在编译,出现这种情况,关掉你的as ,找到你的路 ...
- C# 排序技术研究与对比
一. 排序场景 一维数组排序 多维数组排序 集合排序,例如Dictionary ,List<T>, 自定义类集合排序等 DataTable排序 二. 排序实现和测试 1. 一维数组排序 1 ...
- Python 函数返回值
本章详细介绍 返回值: 0x 00 返回值简介 0x 01 指定返回值与隐含返回值 0x 02 return 语句位置与多条 return 语句 0x 03 返回值类型 0x 04 函数嵌套 0x 0 ...
- Java数据结构和算法(一)——简介
本系列博客我们将学习数据结构和算法,为什么要学习数据结构和算法,这里我举个简单的例子. 编程好比是一辆汽车,而数据结构和算法是汽车内部的变速箱.一个开车的人不懂变速箱的原理也是能开车的,同理一个不懂数 ...
- [动态规划]P1378 油滴扩展
题目描述 在一个长方形框子里,最多有N(0≤N≤6)个相异的点,在其中任何一个点上放一个很小的油滴,那么这个油滴会一直扩展,直到接触到其他油滴或者框子的边界.必须等一个油滴扩展完毕才能放置下一个油滴. ...
- 前端面试题:css相关面试题
CSS 选择器中,元素选择器和类选择器的区别是什么? 元素选择器是最常见的 CSS 选择器,即,文档的元素就是最基本的选择器.选择器通常是某个 HTML 元素,比如 <p>.<h1& ...
- Less注释语法
Less注释语法 适当的注释是保证代码可读性的必要手段,Less支持两种类型的注释:多行注释和单行注释. 1)形如 /* */ 的多行注释.如: /* Hello, I'm a CSS-style c ...
- Winform控件Tag使用规范
背景 Tag在WinForm控件中经常被用来存储临时数据,类型为object,但是当程序中多个地方使用到Tag时,容易造成Tag使用的混乱,Tag是如此重要的一个属性,应该要好好考虑下如何有效的使用T ...
- Numpy入门 - 生成数组
今天是Numpy入门系列教程第一讲,首先是安装Numpy: $ pip install numpy numpy是高性能科学计算和数据分析的基础包,本节主要介绍生成连续二维数组.随机二维数组和自定义二维 ...
- [转] linux系统中如何进入退出vim编辑器,方法及区别
原文链接:http://www.cnblogs.com/crazylqy/p/5649860.html 在linux家族中,vim编辑器是系统自带的文本编辑器,其功能强大自不必说了. 偶有小白,刚接触 ...