<Redis> 入门三 事务
Redis事务是什么
1.可以一次执行多个命令,本质是一组命令的集合。
2.一个事务中的所有命令都会被序列化,按顺序串行化执行而不会被其他命令插入,不许加塞。
意味着redis在事务执行的过程中,不允许另一个客户端发出请求,保证了隔离性。
3.在一个redis事务中,不能保证原子性,下面案例会说明。
Redis事务可以做什么
一个队列中,一次性,按顺序,排他的执行一组命令
Redis事务命令
怎么使用
1.multi,exec简单的使用
multi : 开启事务
每次输入命令不会马上执行,而是返回queued,表示命令已给服务器接收并且暂时保存起来
exec : 执行事务
2.出现错误的情况
2.1 运行错误
首先插入了string 类型的 key 为 k1 的数据,之后又插入了 set 类型的 key为 k1 的数据,
那么在这组命令执行前,redis是无法发现这种非语法错误的
调用exec后,redis执行,会报出错误信息,但是正确的语句依然会被执行。
所以可以看出,事务的操作不是原子性的(要么都成功,要么都失败)
2.2 语法错误
在插入的时侯,语法发生错误,redis会检测出来
当执行exec时,所有的操作都会被取消
所有语法错误的时侯,redis是满足原子性的
Redis事务不支持回滚功能,需要使用者自己收拾烂摊子
3.watch的使用
一旦其中有一个键被修改(或删除),之后的事务就不会执行。
监控一直持续到exec命令(事务中的命令是在exec之后才执行的,所以在multi命令后可以修改watch监控的键值)。
3.1 在multi前改变数值
先设置了 no1 的值为 10,调用watch 监控 no1
在事务执行前,修改了no1的值
执行事务,发现事务执行失败
3.2 在multi中改变值
在事务外监控av的值,开启事务multi
改变监控的值,并设置新值,事务执行成功
可以看出multi后改变监控的值是可以的,因为执行了exec后,watch就失效了
3.3 再举个例子
4.discard使用
<Redis> 入门三 事务的更多相关文章
- redis入门(三)
目录 redis入门(三) 目录 前言 事务 原理 Lua脚本 安装 脚本命令 集群搭建工具 redis-trib.rb redis官方集群搭建 集群横向扩展 故障转移 redis管理 参考文档 re ...
- Redis 学习(三) —— 事务、消息发布订阅
一.Redis事务 Redis 提供的事务机制与传统的数据库事务有些不同,传统数据库事务必须维护以下特性:原子性(Atomicity), 一致性(Consistency),隔离性(Isolation) ...
- redis入门(一)
目录 redis入门(一) 前言 特性 速度快 简单稳定 丰富的功能 历史 历史版本 安装与启动 安装 数据类型与内部编码 数据结构 内部编码 常用API与使用场景 常用命令 字符串 列表 哈希 集合 ...
- redis入门(二)
目录 redis入门(二) 前言 持久化 RDB AOF 持久化文件加载 高可用 哨兵 流程 安装部署 配置技巧 集群 原理 集群搭建 参考文档 redis入门(二) 前言 在redis入门(一)简单 ...
- redis入门指南(三)—— 事务、过期时间、SORT命令、消息通知与管道
写在前面 学习<redis入门指南>笔记,结合实践,只记录重要,明确,属于新知的相关内容. 事务 1.redis中的事务由一组命令的集合组成,要么都执行,要么都不执行,同时redis的事务 ...
- 三、redis系列之事务
1. 绪言 Redis也提供了事务机制,可以一次执行多个命令,本质是一组命令的集合.一个事务中的所有命令都会序列化,按顺序地串行化执行而不会被其他命令插入,不许加塞.但Redis对事务的支持是部分支持 ...
- Redis入门教程(三)— Java中操作Redis
在Redis的官网上,我们可以看到Redis的Java客户端众多 其中,Jedis是Redis官方推荐,也是使用用户最多的Java客户端. 开始前的准备 使用jedis使用到的jedis-2.1.0. ...
- redis入门到精通系列(六):redis的事务详解
(一)事务的概念 谈到数据库的高级应用,不可避免会谈到事务.熟悉mysql的朋友们对事务肯定不陌生,简单来讲事务就是控制一个数据库操作序列要么全部执行要么全部不执行.今天我们就来了解redis中的事务 ...
- 万字长文入门 Redis 命令、事务、锁、订阅、性能测试
作者:痴者工良 Redis 基本数据类型 Redis 中,常用的数据类型有以下几种: String:字符串类型,二进制安全字符串: Hash:哈希表: List 列表:链表结构,按照插入顺序排序的字符 ...
随机推荐
- MySQL ERROR Got an error reading communication packets
200 ? "200px" : this.width)!important;} --> 介绍 经常会在错误日志中看到这个报错,首先我们可以从show GLOBAL statu ...
- bzoj 2756 [SCOI2012]奇怪的游戏【二分+最大流】
达成成就:为二分调参 !:多次memset的话要把数组大小开严格一点,否则会T 看到网格图,首先黑白染色. 注意到每次操作都是在一个黑格子和一个白格子上进行的,也就是说,最后黑格子数字和白格子数字和的 ...
- (6)css盒子模型(基础下)
一.理解多个盒子模型之间的相互关系 现在大部分的网页都是很复杂的,原因是一个“给人用的”网页中是可能存在着大量的盒子,并且它们以各种关系相互影响着. html与DOM的关系 详情了解“DOM” :ht ...
- Java实现Excel数据批量导入数据库
Java实现Excel数据批量导入数据库 概述: 这个小工具类是工作中的一个小插曲哦,因为提数的时候需要跨数据库导数... 有的是需要从oracle导入mysql ,有的是从mysql导入oracle ...
- VI/VIM修改Tab为4个空格
配置方法 在当前用户目录下创建或修改~/.vimrc Root用户下修改/etc/virc 和 /etc/vimrc set ts= set softtabstop= set expandtab se ...
- C++this详解
以前对this指针误解挺多的,在这里单独写一篇进行总结,有不对之处,欢迎指正批评! 一.问题 1.一个类中的不同对象在调用自己的成员函数时,其实它们调用的是同一段函数代码,那么成员函数如何知道要访问哪 ...
- [POI2011]Temperature
Description The Byteotian Institute of Meteorology (BIM) measures the air temperature daily. The mea ...
- 区间DP UVA 10739 String to Palindrome
题目传送门 /* 题意:三种操作,插入,删除,替换,问最少操作数使得字符串变成回文串 区间DP:有一道类似的题,有点不同的是可以替换,那么两端点不同的时候可以替换掉一个后成回文, 即dp[j+1][k ...
- string.Format 中不能包含{}字符串
string scss = @"<style type=""text/css""> body{ margin-left: {0}px; m ...
- CF932C Permutation Cycle
思路: 构造. 实现: #include <bits/stdc++.h> using namespace std; ]; int main() { int n, a, b; while ( ...