redis事务特性:
事务不保整原子性,有一条执行失败,其他的正常执行不保证回滚。
事务中的所有命令,都会被序列化,按顺序执行,不会被其他客户端的命令打断。
事务没有隔离级别,没有提交之前都不会被执行。事务流程:
multi 开启事务,exec执行事务。执行事务之前有命令出错了,会执行失败。discard 回滚事务。
也可以通过watch监视key的value,当执行事务时,值已经发生了变化了,和监视时不一致,会执行失败报错。

开启并执行一个事务:

127.0.0.1:6379> multi
OK
127.0.0.1:6379> set key6 1
QUEUED
127.0.0.1:6379> set key7 7
QUEUED
127.0.0.1:6379> exec
1) OK
2) OK
127.0.0.1:6379> get key6
"1"
127.0.0.1:6379> get key7
"7"
127.0.0.1:6379>

执行事务前命令不能有错误:

 127.0.0.1:6379> multiOK127.0.0.1:6379> set key3 3QUEUED127.0.0.1:6379> set key4(error) ERR wrong number of arguments for 'set' command127.0.0.1:6379> exec(error) EXECABORT Transaction discarded because of previous errors.127.0.0.1:6379> 

执行时有命令错误不影响其他,只是报错这一条执行失败:

127.0.0.1:6379> multi
OK
127.0.0.1:6379> set key8 v
QUEUED
127.0.0.1:6379> incr key8
QUEUED
127.0.0.1:6379> set key9 9
QUEUED
127.0.0.1:6379> exec
1) OK
2) (error) ERR value is not an integer or out of range
3) OK
127.0.0.1:6379> get key8
"v"
127.0.0.1:6379> get key9
"9"
127.0.0.1:6379> 

取消事务:

 127.0.0.1:6379> multiOK127.0.0.1:6379> set key5 5QUEUED127.0.0.1:6379> discardOK127.0.0.1:6379> get ker5(nil)127.0.0.1:6379> 

watch监视key,执行事务时key的值和监视的不一样,执行事务失败。

127.0.0.1:6379> get key
"1"
127.0.0.1:6379> watch key
OK

在另一个命令行修改key的值

127.0.0.1:6379> set key 3
OK
127.0.0.1:6379> get key
"3"

执行事务失败,报错(error) ERR EXEC without MULTI,通过unwatch取消监视

 127.0.0.1:6379> get key"1"127.0.0.1:6379> watch keyOK127.0.0.1:6379> exec(error) ERR EXEC without MULTI127.0.0.1:6379> unwatchOK127.0.0.1:6379> 

以下是python实现一个redis事务:

import redis
import traceback
import timeconn = redis.StrictRedis()conn.set('gold', 100)multi = conn.pipeline()
multi.watch('gold')  # 监视
multi.multi()  # 开启事务try:multi.incr('gold', 1)time.sleep(10)  # 测试在这个时间内,把gold值改变multi.execute()  # 当gold 和 监视的不一致时,事务执行失败
except:print(traceback.format_exc())  # redis.exceptions.WatchError: Watched variable changed.# multi.discard()  # 取消事务、监视
finally:multi.unwatch()  # 取消监视multi.close()  conn.close()

redis 事务、python代码实现redis事务相关推荐

  1. c# mysql代码中写事务_代码中添加事务控制 VS(数据库存储过程+事务) 保证数据的完整性与一致性...

    [c#]代码库代码中使用事务前提:务必保证一个功能(或用例)在同一个打开的数据连接上,放到同一个事务里面操作. 首先是在D层添加一个类为了保存当前操作的这一个连接放到一个事务中执行,并事务执行打开同一 ...

  2. mysql事务操作代码_Mysql中事务的使用【mysql】

    一,概述 1,作用 主要用户操作处理量大,复杂度高的数据.要保证sql语句,要么全执行,要么全不执行,但它必须要满足四个条件:原子性,一致性,隔离性,持久性. 2,方法 事务有两种处理方法 [用 BE ...

  3. 《Redis操作Python系列、redis基本命令 list|CSDN创作打卡》

    导读 list类型是简单的字符串列表,按照插入顺序排序.每个列表最多可以存储 232 - 1 个元素(40多亿) ,list类型主要有以下应用场景. 个人用的比较多的是不分页的数据列表,或者是变动较少 ...

  4. redis在python下保持代码原子性(multi)

    需求: 从redis的字典A中查找获取结果a,将结果a作为条件查找字典B获取结果b,再将b添加到字典C中,将字典B中的记录b删除.保证整个过程的原子性. 查询redis的官方文档,给上述需求中的代码过 ...

  5. Redis 学习笔记-NoSQL数据库 常用五大数据类型 Redis配置文件介绍 Redis的发布和订阅 Redis_事务_锁机制_秒杀 Redis应用问题解决 分布式锁

    1.NoSQL数据库 1.1 NoSQL数据库概述 NoSQL(NosQL = Not Only sQL ),意即"不仅仅是sQL",泛指非关系型的数据库.NoSQL不依赖业务逻辑 ...

  6. Redis:17---常用功能之(事务)

    为了保证多条命令组合的原子性,Redis提供了简单的事务功能以及集成Lua脚本来解决这个问题,本文介绍Redis事务,Lua在下一篇文章介绍 一.事务概述 简单地说,事务表示一组动作,要么全部执行,要 ...

  7. Redis高级应(2)-事务以及LUA脚本

    事务 所谓事务(Transaction) ,是指作为单个逻辑工作单元执行的一系列操作 ACID回顾 Atomicity(原子性): 构成事务的的所有操作必须是一个逻辑单元,要么全部执行,要么全部不 执 ...

  8. redis事务方法释疑以及RedisTemplate事务实战

    redis事务释疑以及RedisTemplate实战 1.背景 2. 事务释疑 redis支持原子性吗? redis的一致性 redis的隔离性 redis的持久性 小结 3. redis基本命令操作 ...

  9. 【2020尚硅谷Java大厂面试题第三季 04】Redis 9种数据类型使用场景,分布式锁演变步骤,lua脚本,redis事务,Redisson,Redis内存占用,删除策略,内存淘汰策略,手写LRU

    1.安装redis6.0.8 2023 02 02 为:redis-7.0.8.tar.gz 2.redis传统五大数据类型的落地应用 3.知道分布式锁吗?有哪些实现方案?你谈谈对redis分布式锁的 ...

最新文章

  1. Swift - 经纬度位置坐标与真实地理位置相互转化
  2. 2010:关于 Web 的 30 个预测
  3. POJ3889-Fractal Streets【分形,递归,分治】
  4. ABP入门系列(11)——编写单元测试
  5. 2月份全球制造业PMI为55.6% 已连续8个月保持在50%以上
  6. 一分钟看懂mysql_冬天发财树“最怕”它,遇上就烂根,一分钟看懂就能养好
  7. 公司为什么需要自己的SAP内部顾问
  8. 计算机硬盘无法启动怎么办,解决办法:如果计算机无法从硬盘启动怎么办
  9. 推荐 10 个实用但偏执的 Java 编程技巧
  10. win10安装vs2015出现“安装包丢失或损坏”解决办法
  11. 直接拿来用!最火的前端开源项目
  12. 未来智安XDR及核心组件产品上榜《嘶吼2022网络安全产业图谱》
  13. 【sql server】已更新或删除的行值要么不能使该行成为唯一行,要么改变了多个行 解决方法总结
  14. python 保存网页图片到本地
  15. JAVA操作execl
  16. c语言报错spawning 插1,Visual C++中error spawning cl.exe错误的两种解决方法.
  17. 提供免费可商用的优秀背景视频素材——COVERR
  18. python 模拟微信浏览器请求_2020-03-06 python selenium 模拟访问网页检查更新并微信通知...
  19. 数据降维——Isomap
  20. linux 卸载ogg,ubuntu下卸载realplay

热门文章

  1. java 8 stream入门_java8 Stream 流快速入门
  2. linux+指令+tree,Linux命令——tree
  3. 电压与电流信号的拉绳位移传感器均可采用三线制或者四线制接线方法
  4. 构建循环链表c语言,循环链表一
  5. VS Code 快捷键(中英文对照)
  6. 唐筛的准确率这么低为什么还要做_唐氏筛查准确率这么低,为什么不能直接做羊水穿刺呢?...
  7. 水电图纸——等电位连接端子箱-4.2
  8. 我为什么喜欢成都比北京要多得多?
  9. Python——字典dic
  10. 101页4万字数字孪生能源互联网智慧能源物联网大数据建设方案