redis事务

devtools/2024/10/11 11:20:00/

redis_1">什么是redis事务

redis事务本质上是一组命令集合,支持用于一次执行多个命令. 一个事务的命令都会被序列化,在事务执行过程中串行化执行命令,其他客户端的请求不会插入到命令执行过程中

为什么需要redis事务?
虽然redis执行是单线程的,但是只能保证一个命令的原子性,如果操作涉及多个命令,则可能被其他客户端中途的请求影响

redis_9">redis事务使用

事务相关命令

  • Multi: 开启事务,redis后续命令都会被放入队列中
  • exec: 按照顺序依次原子化执行事务内命令
  • discard: 取消事务
  • watch: 监视一个或者多个key,如果事务在执行之前被修改,则事务不会执行.exec调用结束后,watch都会被取消
  • unwatch: 取消watch的key

redis_20">redis事务出现错误:

  • 编译错误: 开始事务后,如果命令出现编译错误,事务则自动被discard
  • 运行错误: redis跳过该命令,继续向下执行

redisCAS_25">redis内部如何实现CAS

watch + multi能实现CAS,如下通过watch监视事务发生前key值是否被改动,如果没被改动,则执行事务是原子的,一定安全

watch key1
multi 
a = get key
b = a + 1
set key b
exec

扩展

为什么redis不实现运行中事务回归,而只实现编译回滚?

  1. redis认为运行出错应该事先编码时被考虑到,而不是依赖事务回滚
  2. 事务回滚需要更复杂机制处理,影响性能

redis事务是否满足ACID

  • 原子性: 不满足, 如果出现运行时错误,则会跳过错误命令,继续执行,不是完全成功
  • 一致性: 可能半成功,不满足
  • 隔离性: 满足,单进程执行命令
  • 持久化: redis事务不一定持久化. redis持久化 AOF和RDB,不是完全实时备份的

http://www.ppmy.cn/devtools/35017.html

相关文章

2G 3G LTE 5G的区别

2G、3G、LTE和5G是不同代的移动通信技术,每一代技术都在其前一代的基础上提供了改进的性能、更高的数据速率和新的功能。以下是这些技术的主要区别: ### 2G (第二代移动通信技术): - **数据速率**:较低的数据速率,通常在几百kbps…

JavaScript代码挑战#4

// 编程挑战 #4 /* 朱莉亚和凯特仍在研究狗,这次她们研究的是狗是否吃得太多或太少。 吃得太多意味着狗当前的食物份量比推荐份量大,吃得太少则相反。 吃得适量意味着狗当前的食物份量在推荐份量的正负 10% 的范围内(参见提示)。 …

selenium解放双手--记某电力学校的刷课脚本

免责声明:本文仅做技术交流与学习... 重难点: 1-对目标网站的html框架具有很好的了解,定位元素,精准打击. 2-自动化过程中窗口操作的转换. 前置知识: python--selenium模块的操作使用 前端的html代码 验证码自动化操作 Chrome & Chromedriver : Chrome for Testing ava…

K. 子串翻转回文串

给一个串 s  s1s2... sn,你可以选定其一个非空子串,然后将该子串翻转。具体来说,若选定的子串区间为 [l, r](1 ≤ l ≤ r ≤ n),则翻转后该串变为 s1s2... sl - 1srsr - 1... slsr  1... sn…

vue2 webpack-dev-server Unknown promise rejection reason

在vue.config.js中添加如下配置,重启项目即可 module.exports defineConfig({devServer: {client: {overlay: false,},} })参考

Java类和对象

一 、类的声明 (1)类的概念 类是对对象的抽象描述,对象是表示某个具体的事物。类作为一个抽象的数据类型,用来描述相同类型的对象的属性和行为。如将人抽象为一个类,张三就是这个类的一个实例(对象&#xf…

【C++】stack、queue和priority_queue的模拟实现

在本篇博客中,作者将会讲解STL中的stack、queue和priority_queue的模拟实现,同时还会带大家了解一下deque这个容器。 一.什么是适配器 STL中一共有6大组件:容器,适配器,空间配置器,仿函数,迭代器…

从0开始的数据结构的书写-------线性表(顺序表)

(复习考研的休息区,心血来潮,写点代码) 三个规则: 1、不使用c stl库进行书写 2、最好基于严蔚敏老师的数据结构 3、最好使用malloc和realloc动态分配内存 (如果有问题,请大家看看&#xff…