redis基础-redis事务
学习总结
原文: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的持久化模式
- 纯内存运行,不具备持久化,服务一旦停机,所有数据将丢失
- RDB模式,取决于RDB策略,只有在满足策略才会执行bgsave,异步执行并不能保证redis具备持久化
- aof模式,只有将appendfsync设置为always,程序才会在执行命令同步保存到磁盘,这个模式下,redis具备持久化
(将appendfsync设置为always,只是在理论上持久化可行,但一般不会这么操作)
简单总结
- redis具备了一定的原子性,但不支持回滚
- redis不具备ACID中一致性的概念(或者说redis在设计就无视这点)
- redis具备隔离性
- redis通过一定策略可以保证持久性
redis追求的是简单,高性能,不必受制于传统ACID的束缚。
redis基础-redis事务的更多相关文章
- redis基础:redis下载安装与配置,redis数据类型使用,redis常用指令,jedis使用,RDB和AOF持久化
知识点梳理 课堂讲义 课程计划 1. REDIS 入 门 (了解) (操作) 2. 数据类型 (重点) (操作) (理解) 3. 常用指令 (操作) 4. Jedis (重点) (操作) ...
- 【Redis】Redis基础 - Redis安装启动测试
Redis基本 - 安装 文章目录 Redis基本 - 安装 Linux下安装Redis Docker 方式 Github 源码编译方式 直接安装方式 Windows下Redis安装 记录 - Red ...
- redis基础----->redis的基本使用(一)
这里我们就在虚拟机中安装redis,并且使用java和python实现简单的操作.深情是我承担不起的重担,情话只是偶尔兑现的谎言. redis的使用 下载地址:https://redis.io/.安装 ...
- redis 基础 Redis 数据类型
String(字符串) Hash(哈希) List(列表) Set(集合) zset(sorted set:有序集合)
- mysql主从复制、redis基础、持久化和主从复制
一.mysql(mariadb)基础 1.基础命令(centos7操作系统下) 1.启动mysql systemctl start mariadb 2.linux客户端连接自己 mysql -uroo ...
- linux - redis基础
目录 linux - redis基础 redis 源码编译安装 redis 数据结构 1. strings类型 2. list 类型 3. sets集合类型 有序集合 5. 哈希数据结构 centos ...
- redis基础之订阅发布、主从复制和事务(四)
前面已经学习了redis的基本的命令行操作和数据类型,下面开始redis一些有趣的功能. 订阅和发布机制 定义:发布者相当于电台,订阅者相当于客户端,客户端发到频道的消息,将会被推送到所有订阅此频道的 ...
- redis 基础
一 redis数据类型redis支持5种类型的数据类型,它描述如下的:1. 字符串 Redis字符串是字节序列.Redis字符串是二进制安全的,这意味着他们有一个已知的长度没有任何特殊字符终止,所以你 ...
- 转: Redis基础总结
转文:http://blog.csdn.net/basycia/article/details/52175429 1.redis是什么 2.redis的作者何许人也 3.谁在使用redis 4.学会安 ...
- 1、redis 基础
1.1 导言 如果你从来没使用过 Redis 数据库,那你肯定会问,为什么我们要学 Redis数据库,我只使用 MySQL 或 Oracle 就够了.其实 Redis 虽叫数据库,可又不是传统意义上的 ...
随机推荐
- echarts的bug
Uncaught Error: Invalide sourceFormat: unknown at assert (util.js:404:15) at mountMethods (dataProvi ...
- createrepo 命令详解
createrepo 命令用于创建yum源(软件仓库),即为存放于本地特定位置的众多rpm包建立索引,描述各包所需依赖信息,并形成元数据. 语法: createrepo [option] <di ...
- GIT 上传文件出错:fatal: Could not read from remote repository. 解决方案
问题 git push -u origin master 执行后报错 fatal: Could not read from remote repository. 解决方案 1. git执行 git ...
- C#封装以及访问修饰符
封装 被定义为"把一个或多个项目封闭在一个物理的或者逻辑的包中".在面向对象程序设计方法论中,封装是为了防止对实现细节的访问. 抽象和封装是面向对象程序设计的相关特性.抽象允许相关 ...
- 2019-2020-1 20199318《Linux内核原理与分析》第十二周作业
<Linux内核原理与分析> 第十二周作业 一.预备知识 Set-UID 是 Unix 系统中的一个重要的安全机制.当一个 Set-UID 程序运行的时候,它被假设为具有拥有者的权限.例如 ...
- JavaScript垃圾回收机制的了解
对于js种的任意长度字符串,对象,数组是没有固定大小的,只有在分配存储时,解释器就会分配内存来存储这些数据.当js的解释器消耗完系统所有可用内存时,就会造成系统崩溃.因此js有着自己的一套垃圾回收机制 ...
- 运用TextSuite和TestRunner运行测试脚本
运用TextSuite和TestRunner运行测试脚本 import app.testcase.loginUI import unittest # mysuite = unittest.TestSu ...
- 替代学习物联网-云服务-01百度云MQTT
1.登录百度智能云 2.进入 物联网接入 https://console.bce.baidu.com/iot2/core/core/list https://iotcore-dev-tool.gz ...
- java通信
RPC:同步 http webservice RMI:同步 RMI 是面向对象方式的 Java RPC . 类要extends java.rmi.Remote接口 JMS:异步 需要有消息队列 act ...
- 数据库负载均衡 happroxy 中间器(Nginx)容器的安装与配置
docker 镜像中安装haproxy 1.下载并安装haproxy镜像 docker pull happroxy # docker pull haproxy:1.7 2.查看镜像 docker i ...