本节介绍的“Redis 原子性”很费解

来源:2-3 开发环境 Redis 介绍

Poplar_hills

2019-10-18

老师好

本节课介绍的“Redis 原子性”让我很费解。课中说

  1. “Redis 的原子性可细分为原子性和原子操作这两个概念”4'55''

  2. “Redis 的所有单个命令的执行都是原子性的”5'27''。

我的问题如下

  1. “原子性”的对象应该是事务而不是单个命令所以没理解老师说的“单个命令的执行都是原子性的”是什么意思。

  2. Redis 事务不支持回滚如果一个事务中间的某个命令失败了是无法回滚已经执行过的命令也无法终止将要执行的命令。这样看的话 Redis 的事务是不具有原子性的吧

  3. 而老师举的银行转账的例子转出、转入这两个命令组成一个原子操作而原子操作应该也是需要事务才能保证的吧那么基于上面结论如果 Redis 的事务不具有原子性则对于转出、转入这个操作也是无法保证其原子性的对么

不知道我的理解是否正确

谢谢

写回答

1回答

张勤一

2019-10-18

同学你好:

    其实原子性和原子操作这两个概念很相似,粗糙的看法,可以认为这就是一个概念(不必要过分的解读)。下面,我来回答下你这里提出的三个问题:

    1. 单个命令的执行是原子性的意思是任何一个命令的执行都不会因为其他的事情而中断,一定会一次性执行完成(不管成功还是失败)立即返回,就是不会被其他的命令中断或者抢占的意思

    2. Redis 中所说的事务与数据库中的事务是有差别的,它只能保证这些命令当做一个命令去执行,而不能保证所有的命令都成功或者都失败,简单来说,Redis 事务允许部分成功。所以,它也就自然不支持回滚。这个概念比较特殊;

    3. 确实是这样的,如果要使用 Redis 处理真正的事务,那么,就一定需要有兜底策略,就是 Redis 事务在出现失败时,需要有修复方案。


    欢迎来 QQ 群随时交流、讨论,也非常感谢同学的支持!

2
1
Poplar_hills
非常感谢老师的细致解答!
2019-10-18
共1条回复

Java分布式后台开发 Spring Boot+Kafka+HBase

从零到一完整搭建企业级架构的通用卡包工程,让你迈到百度T4+ 。

886 学习 · 221 问题

查看课程