Redis学习12:事务

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介: 就是一个命令执行的队列,将一系列预定命令包装成一个整体(一个队列)。执行的时候,依次按照添加顺序依次执行,中间不会被打断或者干扰。

a75b3634a172d3b0f86824a61645636e_watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA572R5LqL6ZqP6aOOMjAxNw==,size_20,color_FFFFFF,t_70,g_se,x_16.png

事务


就是一个命令执行的队列,将一系列预定命令包装成一个整体(一个队列)。执行的时候,依次按照添加顺序依次执行,中间不会被打断或者干扰。

事务的基本操作

452052264397c171203f553e64b25b5b_watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA572R5LqL6ZqP6aOOMjAxNw==,size_14,color_FFFFFF,t_70,g_se,x_16.png


就是将从multi开始的后面的命令加到队列中,不执行,等遇到exec时,开始执行队列命令。

输入multi代表开始。

然后后面输入的命令会返回queued。

然后输入exec。

然后开始输出队列中每个任务的结果。

如下图。

7334e0b832de8a5a8549501182af3adb_watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA572R5LqL6ZqP6aOOMjAxNw==,size_8,color_FFFFFF,t_70,g_se,x_16.png

如果事务有问题,那么通过一个命令来取消。

命令:discard

0a25954ed30d0e38f28ad22fa1e5cfa3_3c6bb6e0a03f4da2bce31f8884850785.png

类似回滚。

事务的工作流程

239c63014caecb44294052c8e962d8fe_watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA572R5LqL6ZqP6aOOMjAxNw==,size_20,color_FFFFFF,t_70,g_se,x_16.png


discard是直接销毁这个队列,而exec是执行完队列中的事务才销毁队列的。

错误命令

1c2cedebe17b90d079e7614cb97d589d_watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA572R5LqL6ZqP6aOOMjAxNw==,size_15,color_FFFFFF,t_70,g_se,x_16.png


如果定义的过程中,有命令错误,那么这个队列就会没有了。

88b1becd52586b4e8d96684812bb2a9d_watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA572R5LqL6ZqP6aOOMjAxNw==,size_20,color_FFFFFF,t_70,g_se,x_16.png

f9f5527330246d4984f6e04d9429cefe_watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA572R5LqL6ZqP6aOOMjAxNw==,size_15,color_FFFFFF,t_70,g_se,x_16.png


已经执行完的命令不会回滚的,程序员需要自己在代码中实现回滚的!

e086bb74f916b1857bc09234b8e37714_watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA572R5LqL6ZqP6aOOMjAxNw==,size_10,color_FFFFFF,t_70,g_se,x_16.png

事务:锁


7f6303a3985fd2a5afdff24a67334859_21748cb0e8bd4427ba8b60d9d4e2e960.png


也就是说可以对key增加一个监控,也就是锁。如果执行exec前key发生变化了,那么就不执行操作了。

5e0110dcab7d3c983d1ff80419842c11_watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA572R5LqL6ZqP6aOOMjAxNw==,size_14,color_FFFFFF,t_70,g_se,x_16.png

watch 和 定义事务之间是可以 进行其他操作的。

48a14f5ebbd8458a2f07e3f2e2cdcfe9_watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA572R5LqL6ZqP6aOOMjAxNw==,size_10,color_FFFFFF,t_70,g_se,x_16.png

在执行exec前,通过另一个客户端 set name 修改name的值,然后再回车exec,就会返回nil。也就是执行不了了。


同时需要注意的是,在事务里面不能执行watch。

unwatch 就是取消监控。

分布式锁


34ec2c6a5a5528f72d37ff1cf6ba5024_ec63ef4ac0584d0998bc42505358d837.png


监控的是数据,数据会改变的,而不是监控别人能不能改这个值,所以应该用分布式锁。

bda0e4dc860c5da049e20d13aecfc951_watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA572R5LqL6ZqP6aOOMjAxNw==,size_15,color_FFFFFF,t_70,g_se,x_16.png

也就是说,当前的人使用的时候,锁会使得别人不能使用。

7cde82e822efcb05e783a5731abae1e4_a5cafab22f3140118cdb45e0aa3c6d5f.png

操作完毕再用del删掉就可以了。

d2eff689d99483155be945dfbe740377_1e98470245e2423c96b0d29de0c6db77.png


类似同步锁,那么就是对于多客户端就可以使得别人操作不了。

但是这个方案是一个设计概念,有风险性。

71188b1a86a782ae635f0454a8cdeb23_a12676a90e7c43e282c13488c00bdf28.png


因为锁是客户自己加的,也是他自己删掉的,那么如果客户端忘记了解锁,那么风险就很大了。

14528f098b23cf2e628a36b28a46509e_cf4a2637a00243a996d4242a95b3cdc5.png

那么可以设置一些后手,就是加时效,这样到点不释放,就可以直接释放掉这个锁了。

8cc1e67b4626d4c51200b5811e72d48c_watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA572R5LqL6ZqP6aOOMjAxNw==,size_14,color_FFFFFF,t_70,g_se,x_16.png

a948221c28fc0f24d94c876c4fae99b5_8cd1564c6bc54896b24d75e48bf77733.png

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
23天前
|
缓存 NoSQL Redis
Redis 事务
10月更文挑战第18天
24 1
|
3月前
|
负载均衡 NoSQL 算法
一天五道Java面试题----第十天(简述Redis事务实现--------->负载均衡算法、类型)
这篇文章是关于Java面试中Redis相关问题的笔记,包括Redis事务实现、集群方案、主从复制原理、CAP和BASE理论以及负载均衡算法和类型。
一天五道Java面试题----第十天(简述Redis事务实现--------->负载均衡算法、类型)
|
1月前
|
NoSQL 数据可视化 Linux
redis学习四、可视化操作工具链接 centos redis,付费Redis Desktop Manager和免费Another Redis DeskTop Manager下载、安装
本文介绍了Redis的两个可视化管理工具:付费的Redis Desktop Manager和免费的Another Redis DeskTop Manager,包括它们的下载、安装和使用方法,以及在使用Another Redis DeskTop Manager连接Redis时可能遇到的问题和解决方案。
112 1
redis学习四、可视化操作工具链接 centos redis,付费Redis Desktop Manager和免费Another Redis DeskTop Manager下载、安装
|
1月前
|
NoSQL Linux Redis
Docker学习二(Centos):Docker安装并运行redis(成功运行)
这篇文章介绍了在CentOS系统上使用Docker安装并运行Redis数据库的详细步骤,包括拉取Redis镜像、创建挂载目录、下载配置文件、修改配置以及使用Docker命令运行Redis容器,并检查运行状态和使用Navicat连接Redis。
218 3
|
1月前
|
NoSQL Java Redis
shiro学习四:使用springboot整合shiro,正常的企业级后端开发shiro认证鉴权流程。使用redis做token的过滤。md5做密码的加密。
这篇文章介绍了如何使用Spring Boot整合Apache Shiro框架进行后端开发,包括认证和授权流程,并使用Redis存储Token以及MD5加密用户密码。
24 0
shiro学习四:使用springboot整合shiro,正常的企业级后端开发shiro认证鉴权流程。使用redis做token的过滤。md5做密码的加密。
|
1月前
|
存储 Prometheus NoSQL
大数据-44 Redis 慢查询日志 监视器 慢查询测试学习
大数据-44 Redis 慢查询日志 监视器 慢查询测试学习
22 3
|
1月前
|
SQL 分布式计算 NoSQL
大数据-42 Redis 功能扩展 发布/订阅模式 事务相关的内容 Redis弱事务
大数据-42 Redis 功能扩展 发布/订阅模式 事务相关的内容 Redis弱事务
24 2
|
1月前
|
NoSQL 关系型数据库 MySQL
Redis 事务特性、原理、具体命令操作全方位诠释 —— 零基础可学习
本文全面阐述了Redis事务的特性、原理、具体命令操作,指出Redis事务具有原子性但不保证一致性、持久性和隔离性,并解释了Redis事务的适用场景和WATCH命令的乐观锁机制。
185 0
Redis 事务特性、原理、具体命令操作全方位诠释 —— 零基础可学习
|
1月前
|
NoSQL Redis
redis学习五、错误总结,redis正常运行时后会出现一些bug 总结。
本文介绍了Redis在正常运行时可能遇到的一个错误,即无法进行磁盘持久化的问题,并提供了通过设置`stop-writes-on-bgsave-error`为`no`来解决这一问题的方案。
92 0
|
3月前
|
NoSQL 关系型数据库 Redis
Redis6入门到实战------ 九、10. Redis_事务_锁机制_秒杀
这篇文章深入探讨了Redis事务的概念、命令使用、错误处理机制以及乐观锁和悲观锁的应用,并通过WATCH/UNWATCH命令展示了事务中的锁机制。
Redis6入门到实战------ 九、10. Redis_事务_锁机制_秒杀