一.命令支持

1.multi
开始事务

2.exec
事务提交

3.取消事务
discard

二.事务示例

1.示例

redis>set key1 20
OK
redis>mutil
OK
redis>get key1
QUEUED
redis>incr key1
QUEUED
redis>exec
1)"20"
2)(integer)"21"

2.redis中的事务算是非常简单的,它将一组命令放入队列;即便要取值,也会将该命令放入队列.等到exec时候,再用for循环,将命令全部写入,如果其中一条命令执行错误,则放弃全部命令的写入.

三.并发控制(乐观锁)

设想一个场景,client1拿到了key1后,做了一系列其他操作,在此期间client2对key1加1;client1最后也对key1加1;理论上应该是key1加2,但实际上key1只是加了1;这就是并发产生的问题,redis提供了基于watch命令的乐观锁来防止这一问题产生.

1.基本命令
a.watch key1 ... keyN
监控某个key

b.unwatch
取消监控

*watch必须和mutil...exec配合使用,单独使用并不起作用.watch监控一个key,之后mutil...exec执行一组语句,如果在此期间,有另一个client更改了watch监控的key对应的值,则exec执行返回nil,整组命令不会提交.

2.示例

A.client1

a.redis>watch key1
b.redis>multi
c.redis>incr key1
d.redis>exec

B.client2
在client1执行到c这一步时,client2也执行incr key1;client1执行exec时,发现watch的key1有改变,则放弃整个事务写入,返回nil

redis中的事务(版本2.6.16)的更多相关文章

  1. Redis系列之key操作命令与Redis中的事务详解(六)

    序言 本篇主要目的有二: 1.展示所有数据类型中key的所有操作命令,以供大家学习,查阅,更深入的挖掘redis潜力. 2.掌握redis中的事务,让你的数据完整性一致性拥有更优的保障. redis命 ...

  2. redis中的事务

    首先明白在java中线程和进程的区别: 1.什么是多线程? 是指一个应用程序同时执行多个任务,一般来说一个任务就是一个线程 ,而一个应用程序有一个以上的线程我们称之为多线程. 2.什么是进程? 进程是 ...

  3. Redis中的事务及乐观锁的实现

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

  4. 如何在Redis中实现事务

    如何在Redis中实现事务 - 微店技术团队 - SegmentFault 思否 https://segmentfault.com/a/1190000007429197

  5. Redis 中的事务分析,Redis 中的事务可以满足ACID属性吗?

    Redis 中的事务 什么是事务 1.原子性(Atomicity) 2.一致性(Consistency) 3.隔离性(Isolation) 4.持久性(Durability) 分析下 Redis 中的 ...

  6. Redis 中的事务

    Redis支持简单的事务 Redis与mysql事务的对比 Mysql Redis 开启 start transaction muitl 语句 普通sql 普通命令 失败 rollback 回滚 di ...

  7. Redis中的事务(多命令)操作

    作为一个nosql数据库,事务是必要功能.但是redis我们是可以理解为它不支持事务操作的,因为它的特征完全不满足我们对事物的正常理解 ps:我不知道是谁一开始提出redis支持事务的,但是我更倾向于 ...

  8. 【记录一个问题】redis中执行事务出现错误“EXECABORT Transaction discarded because of previous errors”

    执行事务的大致代码如下: redisClient := GetRedisClient() pipe := redisClient.TxPipeline() err := pipe.ZAdd(k, ar ...

  9. redis中的事务、lua脚本和管道的使用场景

    参考文章 : https://blog.csdn.net/fangjian1204/article/details/50585080

随机推荐

  1. 编译gdb 报错 No module named gdb.frames

    将源码目录下的python模块拷贝到指定目录即可 cd /root/gdb-7.12/ cp -rp gdb/python/lib/gdb /usr/local/share/gdb/python/ 编 ...

  2. [洛谷1972][SDOI2009]HH的项链

    题目描述 HH 有一串由各种漂亮的贝壳组成的项链.HH 相信不同的贝壳会带来好运,所以每次散步完后,他都会随意取出一段贝壳,思考它们所表达的含义.HH 不断地收集新的贝壳,因此,他的项链变得越来越长. ...

  3. Xcode5 上64位编译 出错No architectures to compile for

    http://blog.csdn.net/chocolateloveme/article/details/16900999 详细错误信息如下: No architectures to compile ...

  4. redis加入到Windows系统服务

    1.cmd命令,到redis的安装目录输入以下命令  安装命令: redis-server.exe --service-install redis.windows.conf --loglevel ve ...

  5. 【排序算法】java实现

    1.冒泡排序 最简单的排序实现,冒泡排序,是一种交换排序,它的基本思想是:两两比较相邻记录的关键字,如果反序则交换,直到没有反序的记录为止. //冒泡排序 private int[] bubbleSo ...

  6. mysql-MHA 故障收集

    在manager 主机上开启监控服务,启动不了 [root@manager ~]# managerStart [] [root@manager ~]# managerStatus app1 is st ...

  7. MSSQL删除重复记录

    SQL(根据自己需要改列名.表名): delete from tableA where id not in (select min(id) from tableA group by name,age)

  8. J.U.C并发框架源码阅读(十)ConcurrentLinkedQueue

    基于版本jdk1.7.0_80 java.util.concurrent.ConcurrentLinkedQueue 代码如下 /* * ORACLE PROPRIETARY/CONFIDENTIAL ...

  9. Codeforces Round #306 (Div. 2) A. Two Substrings【字符串/判断所给的字符串中是否包含不重叠的“BA” “AB”两个字符串】

    A. Two Substrings time limit per test 2 seconds memory limit per test 256 megabytes input standard i ...

  10. ReactiveCocoa(一)

    前言 之前总听别人说什么Reactive Cocoa + MVVM,但是没有找到讲解Reactive Cocoa相关的资料.结果进入新公司,项目里面有部分代码使用到了Reactive Cocoa,所以 ...