学习总结

原文:https://juejin.im/post/5d29ac845188252cc75e2d5c

redis事务:

redis是否有事务?

redis是有事务的。命令如下:

Redis事务从开始到结束通常会通过三个阶段:

1.事务开始

2.命令入队

3.事务执行

数据库事务正确执行的四个基本要素ACID:

即:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)。

那么,redis事务是否具备这四个要素?

原子性:要么全部执行,要么全部不执行。

redis里面,事务以multi开始,exec执行前面的所有操作:

例子:

1.

127.0.0.1:6379> multi
OK
127.0.0.1:6379> set zhangyuzhen 1
QUEUED
127.0.0.1:6379> set zhangyuzhen1 2
QUEUED
127.0.0.1:6379> getzhangyuzhen
(error) ERR unknown command 'getzhangyuzhen'
127.0.0.1:6379> get zhangyuzhen
QUEUED
127.0.0.1:6379> exec
(error) EXECABORT Transaction discarded because of previous errors.
127.0.0.1:6379> get zhangyuzhen
"1"
127.0.0.1:6379>

结论:redis具有一定的原子性。

2.

127.0.0.1:6379> multi
OK
127.0.0.1:6379> set appledog famle
QUEUED
127.0.0.1:6379> incr appledog
QUEUED
127.0.0.1:6379> exec
1) OK
2) (error) ERR value is not an integer or out of range
127.0.0.1:6379> get appledog
"famle"

结论:redis事务发生异常不会滚。

为什么不会滚:

因为redis先执行命,后写日志,而mysql数据库是先写日志,再执行操作的,整个过程复杂,不符合redis的定位。

这个其实跟redis的定位和设计有关系,先看看为何我们的mysql可以支持回滚,这个还是跟写log有关系,redis是完成操作之后才会进行aof日志记录,aof日志的定位只是记录操作的指令记录,而mysql有完善的redolog,并且是在事务进行commit之前就会写完成redolog,binlog

要知道mysql为了能进行回滚是花了不少的代价,redis应用的场景更多是对抗高并发具备高性能,所以redis选择更简单,更快速无回滚的方式处理事务也是符合场景。

一致性:

如果事务块出错,因为不会回滚,所以不具有一致性,如果宕机引起的一致性问题可以通过持久化策略来保持,持久化将在后面来说。
 
隔离性:
redis 因为是单线程操作,所以在隔离性上有天生的隔离机制,当redis执行事务时,redis的服务端保证在执行事务期间不会对事务进行中断,所以,redis事务总是以串行的方式运行,事务也具备隔离性。
 
持久性:

取决于redis的持久化模式

  • 纯内存运行,不具备持久化,服务一旦停机,所有数据将丢失
  • RDB模式,取决于RDB策略,只有在满足策略才会执行bgsave,异步执行并不能保证redis具备持久化
  • aof模式,只有将appendfsync设置为always,程序才会在执行命令同步保存到磁盘,这个模式下,redis具备持久化

(将appendfsync设置为always,只是在理论上持久化可行,但一般不会这么操作)

简单总结

  • redis具备了一定的原子性,但不支持回滚
  • redis不具备ACID中一致性的概念(或者说redis在设计就无视这点)
  • redis具备隔离性
  • redis通过一定策略可以保证持久性

redis追求的是简单,高性能,不必受制于传统ACID的束缚。

redis基础-redis事务的更多相关文章

  1. redis基础:redis下载安装与配置,redis数据类型使用,redis常用指令,jedis使用,RDB和AOF持久化

    知识点梳理 课堂讲义 课程计划 1. REDIS 入 门 (了解) (操作)   2. 数据类型 (重点) (操作) (理解) 3. 常用指令   (操作)   4. Jedis (重点) (操作) ...

  2. 【Redis】Redis基础 - Redis安装启动测试

    Redis基本 - 安装 文章目录 Redis基本 - 安装 Linux下安装Redis Docker 方式 Github 源码编译方式 直接安装方式 Windows下Redis安装 记录 - Red ...

  3. redis基础----->redis的基本使用(一)

    这里我们就在虚拟机中安装redis,并且使用java和python实现简单的操作.深情是我承担不起的重担,情话只是偶尔兑现的谎言. redis的使用 下载地址:https://redis.io/.安装 ...

  4. redis 基础 Redis 数据类型

    String(字符串) Hash(哈希) List(列表) Set(集合) zset(sorted set:有序集合)

  5. mysql主从复制、redis基础、持久化和主从复制

    一.mysql(mariadb)基础 1.基础命令(centos7操作系统下) 1.启动mysql systemctl start mariadb 2.linux客户端连接自己 mysql -uroo ...

  6. linux - redis基础

    目录 linux - redis基础 redis 源码编译安装 redis 数据结构 1. strings类型 2. list 类型 3. sets集合类型 有序集合 5. 哈希数据结构 centos ...

  7. redis基础之订阅发布、主从复制和事务(四)

    前面已经学习了redis的基本的命令行操作和数据类型,下面开始redis一些有趣的功能. 订阅和发布机制 定义:发布者相当于电台,订阅者相当于客户端,客户端发到频道的消息,将会被推送到所有订阅此频道的 ...

  8. redis 基础

    一 redis数据类型redis支持5种类型的数据类型,它描述如下的:1. 字符串 Redis字符串是字节序列.Redis字符串是二进制安全的,这意味着他们有一个已知的长度没有任何特殊字符终止,所以你 ...

  9. 转: Redis基础总结

    转文:http://blog.csdn.net/basycia/article/details/52175429 1.redis是什么 2.redis的作者何许人也 3.谁在使用redis 4.学会安 ...

  10. 1、redis 基础

    1.1 导言 如果你从来没使用过 Redis 数据库,那你肯定会问,为什么我们要学 Redis数据库,我只使用 MySQL 或 Oracle 就够了.其实 Redis 虽叫数据库,可又不是传统意义上的 ...

随机推荐

  1. 微信小程序 - canvas实现多行文本 ,实现文本断行

    1.canvas绘制文本坑点 绘制的文本不管多长,永远只有一行,不会断行. 2.解决思路 根据每行文本字数来断行,超出的就向下排列. 由于 canvas绘制文本的语法如下: context.fillT ...

  2. windows2020 更换sid

    cmd whoami /user 查看sid的值 点击运行sysprep程序.记得在"通用"前面打上勾 点击运行sysprep程序.记得在"通用"前面打上勾

  3. abc285h题解

    考虑容斥,强制要求\(k\)个数为完全平方数,系数为\((-1)^k*C_n^k\)(因为我们要从\(n\)个数选出\(k\)个数作为完全平方数).则在唯一分解\(p_1^{e_1}...p_n^{e ...

  4. vue 中 watch 和 watchEffect 区别

    vue 中 watch 和 watchEffect 区别 * watch 需要先指明需要侦听的数据源,watchEffect 不需要,只要传入的函数带有依赖就会自动追踪. * watchEffect ...

  5. iis express添加网站,并启动

    1.查看网站列表 C:\Program Files (x86)\Microsoft Visual Studio 12.0>"C:\Program Files\IIS Express\a ...

  6. Profiler中WaitForTargetFPS详解【转】

    WaitForTargetFPS 该参数一般出现在 CPU开销过低,且通过设定了目标帧率的情况下(Application.targetFrameRate).当上一帧低于目标帧率时,将会在本帧产生一个W ...

  7. Mac如何用鼠标快速锁屏

    锁屏谁不会啊?本来写这篇文章,感觉自己太多余,但用鼠标直接锁屏就有点小意思,Mac对于很多人来说非常模式,通常是商务.设计这类人事在使用,对于新手而言,它的功能过于隐藏,那么Mac要如何达到快速锁屏呢 ...

  8. 043_关于Salesforce集中权限的解释

    1.创建Object的时候,一定要选中Deploy,避免在All Tabs 中找不到 2.在Profile里,选择 Standart tab Setting.Custom tab setting,有三 ...

  9. Echarts xAxis、yAxis

    2017年08月06日 09:10:12 数据架构师 阅读数:37641更多 所属专栏: Echarts数据可视化    版权声明:本文为博主原创文章,转载请注明来源.开发合作联系82548597@q ...

  10. [419] C1 Harbingers Of War OpCodez

    [419] C1 Harbingers Of War Client 00 SendProtocolVersion 01 MoveBackwardToLocation 02 Say 03 Request ...