前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Redis(十二):Redis事务的基本操作

Redis(十二):Redis事务的基本操作

作者头像
栗筝i
发布2022-12-01 08:45:23
2730
发布2022-12-01 08:45:23
举报
文章被收录于专栏:迁移内容

1、Redis事务概念

Redis 事务的本质是一组命令的集合。事务支持一次执行多个命令,一个事务中所有命令都会被序列化。在事务执行过程,会按照顺序串行化执行队列中的命令,其他客户端提交的命令请求不会插入到事务执行命令序列中。

总结说:redis事务就是一次性、顺序性、排他性的执行一个队列中的一系列命令。

  • Redis不保证原子性:Redis中,单条命令是原子性执行的,但事务不保证原子性,且没有回滚。事务中任意命令执行失败,其余的命令仍会被执行。
  • Redis事务没有隔离级别的概念:批量操作在发送 EXEC 命令前被放入队列缓存,并不会被实际执行,也就不存在事务内的查询要看到事务里的更新,事务外查询不能看到。换句话说也就是所有命令在事务中,并没有直接执行,而是要在执行命令发起后才会开始执行。

Redis事务的三个阶段:

  1. 开启事务(Multi)
  2. 命令入队(…)
  3. 执行事务(Exec)

2、Redis事务基本操作命令

2.1、MULTI EXEC

代码语言:javascript
复制
127.0.0.1:6379> MULTI	//开启事务
OK
127.0.0.1:6379> set ke1 y1
QUEUED
127.0.0.1:6379> set ke2 y2
QUEUED
127.0.0.1:6379> get ke2
QUEUED
127.0.0.1:6379> set ke3 y3
QUEUED
127.0.0.1:6379> Exec	//执行事务
1) OK
2) OK
3) "y2"
4) OK

2.2、Discard

代码语言:javascript
复制
127.0.0.1:6379> MULTI	//开启事务
OK
127.0.0.1:6379> set ke1 y1
QUEUED
127.0.0.1:6379> set ke2 y2
QUEUED
127.0.0.1:6379> set ke3 y3
QUEUED
127.0.0.1:6379> Discard	//放弃事务,事务中的命令都不会执行
OK
127.0.0.1:6379> get ke1	
(nil)					//	因为放弃了事务查询不到ke1

3、Redis事务的异常

3.1、编译异常 命令有错,事务中的命令都不会执行。

代码语言:javascript
复制
127.0.0.1:6379> set kk1 y1
QUEUED
127.0.0.1:6379> set kk2 y2
QUEUED
127.0.0.1:6379> get kk3 y3	//这是一个错误命令
(error) ERR wrong number of arguments for 'get' command
127.0.0.1:6379> get kk4 y4
(error) ERR wrong number of arguments for 'get' command
127.0.0.1:6379> set kk3 y3
QUEUED
127.0.0.1:6379> set kk4 y4
QUEUED
127.0.0.1:6379> Exec	//这里因为上面错误,进而整个事务列队都无法执行
(error) EXECABORT Transaction discarded because of previous errors.
127.0.0.1:6379> get kk3	//因为事务执行错误,所以取不到kk3的值
(nil)

3.2、运行异常 事务队列中存在逻辑性语法错误,其他命令是可以执行的,所以说Redis没有原子性的说法。

代码语言:javascript
复制
127.0.0.1:6379> MULTI
OK
127.0.0.1:6379> set k1 v1
QUEUED
127.0.0.1:6379> INCR k1		//“v1”怎么加一?所以是错的
QUEUED						//并不是命令错误,运行前Redis无法识别
127.0.0.1:6379> set k2 v2
QUEUED
127.0.0.1:6379> get k2
QUEUED
127.0.0.1:6379> exec
1) OK
2) (error) ERR value is not an integer or out of range	//报错了
3) OK	//其他的正常执行
4) "v2"

4、总结

总的来说redis事务就是一次性、顺序性、排他性的执行一个队列中的一系列命令。值得注意的是它的非原子性和没有隔离级别的特性!!!

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-06-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1、Redis事务概念
  • 2、Redis事务基本操作命令
  • 3、Redis事务的异常
  • 4、总结
相关产品与服务
云数据库 Redis
腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档