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分 ...
随机推荐
- fs-max、file-nr和nofile的关系
1. file-max /proc/sys/fs/file-max: 这个文件决定了系统级别所有进程可以打开的文件描述符的数量限制,如果内核中遇到VFS: file-max limit <num ...
- [转载] java的动态代理机制详解
转载自http://www.cnblogs.com/xiaoluo501395377/p/3383130.html 代理模式 代理模式是常用的java设计模式,他的特征是代理类与委托类有同样的接口,代 ...
- linux操作系统基础篇(九)
shell脚本的运算符与流程控制 1.运算符 1.1 算术运算符 + - * / % [root@MiWiFi-R3-srv ~]# echo $[3+1]4 1.2 关系操作 与(())连用 < ...
- Java面试之框架篇(八)
71,谈谈你对Struts的理解. 1. struts是一个按MVC模式设计的Web层框架,其实它就是一个Servlet,这个Servlet名为ActionServlet,或是ActionServle ...
- Javascript中prototype属性
prototype作为JS相对比较难理解的一个知识点,在这里发表下自己的理解. 本文将包含以下几部分内容: 1.js prototype的简单介绍, 2.js构造函数的介绍, 3.prototype的 ...
- Chrome 浏览器报 filed to load resource:net err cache read failure 错误:
在IE/FF下没有该错误提示,但在Chrome下命令行出现如下错误信息: Failed to load resource: net::ERR_CACHE_MISS 该问题是Chrome浏览器开发工具的 ...
- Drools文档(八) 规则语言参考
规则语言参考 概述 Drools有一个"本地"的规则语言.这种格式在标点符号上非常轻,并且通过"扩展器"支持自然语言和领域特定的语言,使语言能够变形到您的问题领 ...
- 十一、VueJs 填坑日记之使用Amaze ui调整列表和内容页面
上一篇博文我们整合了Amaze ui,并且调整了一个头部header和底部footer文件,其实做起来也很简单,只要按照步骤来做,完全没有问题.今天我们来重新调整一下列表页面和内容页面,使我们做的后台 ...
- 集合、set以及HASH
集合的数据结构数据结构就是内存中保存输出数据的形式,不同的数据结构会有不同的特征.堆栈结构:先进后出 代表类(stack):应用场景:java中的方法运行时所占用的空间就是这种结构.队列结构:先进先出 ...
- POJ3624--01背包
Charm Bracelet Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 34013 Accepted: 15087 ...