redisbook(redis什么时候要用事务)

2024-04-11 05:50:05 :8

redisbook(redis什么时候要用事务)

本文目录

redis什么时候要用事务

Redis事务使用总结:

Redis的事务机制允许同时执行多条指令,它是原子性操作,事务中的命令要么全部执行,要么全部不执行,另外,事务中的所有指令都会被序列化,而且其开始执行过程中,不回被即时过来的指令所打断,其需要经历三个过程,分别为开始事务、命令入队以及执行事务。

·     相关命令

·     如何使用

·     脚本事务

·     遇到问题

·     例子演示

一、相关命令

1、MULTI

该命令用来开启事务,它总是返回ok结果,当其执行之后,客户端可以继续发送任意条数量的指令,这些指令不会立即被执行,而是被放到了队列中,直到EXEC被调用之后,所有命令才会被序列化执行。

2、EXEC

该命令负责触发并执行队列中所有的命令。

NOTE:

如果MULTI开启之后,因为某些原因没有成功执行EXEC,那么事务中所有的命令都不会被执行的。

3、DISCARD

该命令用来刷新事务中所有排队等待执行的指令,它总是返回ok结果,并且将服务连接状态恢复到正常。如果已经使用WATCH,那么其会将释放所有被WATCH的key。

4、WATCH

标记所有指定的key被监控起来,使其在事务中有条件的执行(乐观锁)。

NOTE:

A、WATCH使得EXEC命令需要有条件的执行,也就是事务只能在所有被监视的键没有被修改的前提下才能执行。另外,在EXEC被执行之后,所有的WATCH都会被取消。

B、UNWATCH手动取消对所有键的WATCH,如果执行了EXEC或者DISCARD,则不需要手动执行UNWATCH命令。

二、如何使用

Redis原生使用(Redis-cli):

127.0.0.1:6379》 multi     // 事务开始的动作标志下面即为入队

OK

127.0.0.1:6379》 set book-name "Thinking in Java"

QUEUED

127.0.0.1:6379》 get book-name

QUEUED

127.0.0.1:6379》 sadd tag "java" "Programming""Thinking"

QUEUED

127.0.0.1:6379》 smembers tag

QUEUED

127.0.0.1:6379》 exec     // 执行事务

1) OK

2) "Thinking in Java"

3) (integer) 3

4) 1) "Thinking"

2) "Programming"

3) "java"

127.0.0.1:6379》 discard  // 事务已执行完毕 已经自动取消

(error) ERR DISCARD without MULTI

127.0.0.1:6379》 multi

OK

127.0.0.1:6379》 set book-name "Patterns in Java"

QUEUED

127.0.0.1:6379》 get book-name

QUEUED

127.0.0.1:6379》 sadd tag "Java" "Thinking""Programming"

QUEUED

127.0.0.1:6379》 smembers tag

QUEUED

127.0.0.1:6379》 discard  // 事务未执行 可以刷新队列指令状态 取消执行

OK

127.0.0.1:6379》 exec     // 事务已经被取消不能再执行

(error) ERR EXEC without MULTI

三、脚本事务

Redis 2.6开始支持了脚本,而该脚本本身就是一种事务机制,所以任何在事务里可以完成的事,在脚本里面也能完成,并且使用脚本更简单些,并且速度也更快。不过因为事务提供了一种即使不使用脚本,也可以避免竞争条件的方法,并且事务本身的实现并不复杂,所以现在的使用也比较多,但不排除日后可能被替代或是占据主要地位的可能。

NOTE:

Redis为什么引入两种处理事务的方式?脚本功能是 Redis 2.6 才引入的,而事务功能则在更早之前就存在,所以 Redis 才会同时存在两种处理事务的方法。另外,事务脚本会在后续文章中总结介绍。

四、遇到问题

1、乐观锁实现

举个例子,假设我们需要原子性为某个键加1操作(假设INCR不存在),那么应该是这样的执行语句:

SET mykey 1

val = GET mykey

val = val + 1

SET mykey ${val}

单个客户端访问操作没有任何问题,如果是多个客户端同时访问mykey,就会产生资源共享访问问题,比如:现在有个两个客户端访问同一个键mykey,那么mykey的可能是2,但是我们期望的值应该是3才对,这个类似于高并发下的sync锁机制,所以我们需要使用WATCH来监控被共享的键mykey,如下:

WATCH mykey(可监控多个键)

val = GET mykey

val = val + 1

MULTI

SET mykey ${val}

EXEC

NOTE:

虽然大多情况下,多个客户端访问操作同一个键的情况很少或没有,但是不能排除这个特殊情况,所以建议在有可能产生键共享的指令中使用WATCH在EXEC执行前对其监管。

2、Redis不支持回滚(Roll Back)

Redis的事务不支持回滚,这点不同于关系数据库中的事务,所以它的内部保持了简单且快速的特点。另外,Redis不支持回滚是这样考虑的:Redis事务中命令之所以会失败,是由于错误的编程所造成,通过事务回滚是不能回避这个根本问题。

NOTE:

Redis事务中命令执行失败,仍会继续执行后面的执行,在没有特殊干预前提下,直到执行完队列中所有指令为止。

3、使用事务可能遇到的问题

A、事务在执行 EXEC 之前,入队的命令可能会出错,举个例子:命令可能会产生语法错误(参数数量错误,参数名错误等),或者其他更严重的错误,比如内存不足(如果服务器使用maxmemory 设置了最大内存限制的话)。

B、事务在执行 EXEC 之前,举个例子:事务中的命令可能处理了错误类型的键,比如将列表命令用在了字符串键上面等。

对于发生在 EXEC 执行之前的错误,客户端以前的做法是检查命令入队所得的返回值:如果命令入队时返回QUEUED ,那么入队成功;否则,就是入队失败。如果有命令在入队时失败,那么大部分客户端都会停止并取消这个事务。

从 Redis 2.6.5 开始,服务器会对命令入队失败的情况进行记录,并在客户端调用 EXEC 命令时,拒绝执行并自动放弃这个事务。

在 Redis 2.6.5 以前, Redis 只执行事务中那些入队成功的命令,而忽略那些入队失败的命令。而新的处理方式则使得在管道技术中包含事务变得简单,因为发送事务和读取事务的回复都只需要和服务器进行一次通讯即可。

至于那些在 EXEC 命令执行之后所产生的错误,并没有对它们进行特别处理: 即使事务中有某个/某些命令在执行时产生了错误, 事务中的其他命令仍然会继续执行。

五、例子演示

《?php

$redis = new \Redis();

$redis-》connect(’127.0.0.1’,6379);

$result = array();

// 开启事务

$redis-》multi();

// 添加指令到队列

$redis-》set(’book-name’,’Thinking in PHP!’);

$redis-》sAdd(’tags’,’PHP’,’Programming’,’Thinking’);

$bookname = $redis-》get(’book-name’);

$tags = $redis-》sMembers(’tags’);

// 执行事务

$redis-》exec();

// 显示结果

echo ’书名:’.$bookname.’ 标签:’.$tags;

?》

结果:

 

redis有哪些存储模式

Redis支持多种数据结构和存储模式,其中包括:

  • 字符串(String):字符串类型是Redis最基本的数据类型,它可以包含任何数据,比如文本、整数或二进制数据等。

  • 哈希(Hash):哈希类型存储的是键值对集合,这些键值对可以是字符串类型的,也可以是数字类型的。

  • 列表(List):列表类型是一个有序的字符串列表,可以添加、删除和插入元素。

  • 集合(Set):集合类型存储的是一组唯一的无序元素,支持添加、删除和查询操作。

  • 有序集合(Sorted Set):有序集合类型存储的是一组有序的元素,每个元素都有一个分数(score),可以根据分数进行排序。

  • 此外,Redis还支持多种不同的持久化模式,包括:

  • RDB持久化模式:在指定时间间隔内将内存中的数据保存到磁盘中。

  • AOF持久化模式:将所有对Redis数据库的写操作记录下来,可以通过回放这些日志文件来恢复数据库。

  • 混合持久化模式:同时使用RDB和AOF两种持久化模式,以保证数据的可靠性和恢复速度。

Macbook Pro 终端安装redis,启动redis-server之后,为啥不能用别的命令了

清空数据库:打开redis-client.exe,输入命令flushdb redis自带持久化,因此是不会因为掉电而丢失所有内容的。默认情况下,redis每隔一定时间间隔会对数据库做一次内存快照,记录数据库此刻的内容;启动服务器时会自动加载内存快照。 你可以打开...

mac 启动 redis

1、先找到redis的安装位置 默认安装的位置是      /usr/local/bin 2、找到带有 redis-server 的目录里,直接 输入 redis-server 即可

redisbook(redis什么时候要用事务)

本文编辑:admin
: redisbook,

更多文章:


oppof19参数(oppo1+9手机参数)

oppof19参数(oppo1+9手机参数)

本文目录oppo1+9手机参数oppof19pro在中国上市了吗oppo1+9手机参数oppo1+9手机参数:后置三摄,大屏手机,大容量电池,快充手机,指纹识别,支持NFC,5G手机,6.55英寸屏幕尺寸,电容屏(多点触控),支持 sRGB

2024年5月29日 08:20

surfacepro6与pro7的区别(买Surface Pro6还是Surface Pro7好呀纠结中)

surfacepro6与pro7的区别(买Surface Pro6还是Surface Pro7好呀纠结中)

另外Surface Pro 7跟Surface Pro 6相比具有更强的扩展性,另外Surface Pro 7跟Surface Pro 6相比具有更强的扩展性,surface pro 7和6有什么区别微软全新一代Surface Pro 7较

2024年2月29日 05:50

紫光展锐是国企吗(紫光展锐属于哪家上市公司)

紫光展锐是国企吗(紫光展锐属于哪家上市公司)

紫光展锐与紫光国微是什么关系紫光展锐(重庆)科技有限公司于2018年12月05日成立,紫光展锐集团有限公司成立于2006年4月23日,紫光展锐与紫光集团是什么关系,紫光展锐是紫光展锐集团有限公司的简称,紫光展锐属于哪家上市公司北京紫光展锐科

2024年3月20日 05:10

金立m2017发售价(金立m2017最贵的手机多少钱)

金立m2017发售价(金立m2017最贵的手机多少钱)

本文目录金立m2017最贵的手机多少钱金立m2017zuigui多少钱金立m2017为什么这么贵金立m2017最贵的手机多少钱你好,金立M2017定制版是16999元,可以到官网去订购哈~咨询在线客服即可!不懂欢迎追问洛~M2017手机价位

2024年5月16日 23:50

三星7572吧(买三星手机S7572和s7562哪个好)

三星7572吧(买三星手机S7572和s7562哪个好)

本文目录买三星手机S7572和s7562哪个好三星手机7572的优缺点罗列出1,2,3.三星s7572怎样买三星手机S7572和s7562哪个好尊敬的三星用户您好:S7562和S7572的区别如下:1.初期上市操作系统差别:S7562是An

2024年5月3日 08:40

诺基亚130铃声(有谁知道诺基亚手机的经典铃声)

诺基亚130铃声(有谁知道诺基亚手机的经典铃声)

本文目录有谁知道诺基亚手机的经典铃声诺基亚手机怎么设置铃声按步骤设置自己喜欢的铃声诺基亚经典铃声诺基亚1320怎样把歌曲设成铃声如何设置铃声 诺基亚1320有谁知道诺基亚手机的经典铃声滴哒 哒 哒/ 滴哒 哒 哒/ 滴哒 哒 哒 哒 公认

2024年4月28日 20:40

苹果手机怎么看版本(苹果怎么看他是什么版本)

苹果手机怎么看版本(苹果怎么看他是什么版本)

本文目录苹果怎么看他是什么版本苹果手机怎么看版本苹果怎么看他是什么版本查看苹果手机版本的方法:直接在手机中查看版本号,这种方法可通用。首先,从苹果手机的主界面找到“设置”应用,并点击进入。其次,是进入设置后在设置列表中找到“通用”选项,点击

2024年4月25日 22:40

苹果ipad pro 2020(ipadpro2020屏幕护眼吗)

苹果ipad pro 2020(ipadpro2020屏幕护眼吗)

本文目录ipadpro2020屏幕护眼吗ipadpro2020是什么芯片ipadpro2020什么芯片ipadpro2020为什么不建议买ipadpro2020屏幕护眼吗不晃眼,更符合人的视觉习惯。屏幕有抗反射涂层,减少强光下观看晃眼的情况

2024年6月8日 15:50

dacom耳机怎么样(Dacom Athlete+运动蓝牙耳机可以用多长时间)

dacom耳机怎么样(Dacom Athlete+运动蓝牙耳机可以用多长时间)

本文目录Dacom Athlete+运动蓝牙耳机可以用多长时间dacom bonebuds和韶音对比Dacom Athlete+运动蓝牙耳机可以用多长时间你爱惜的话,这个耳机应当可以用两年,是不成问题的这个运动耳机一般可以使用5个小时左右吧

2024年5月29日 21:00

苹果手机丢了怎么找到(苹果手机丢失如何找回)

苹果手机丢了怎么找到(苹果手机丢失如何找回)

本文目录苹果手机丢失如何找回苹果手机丢了怎么才能找到苹果手机丢了如何找回来苹果手机丢失如何找回可以通过以下步骤找回:1、打开设置,打开iCloud,登陆你的app id后,找到“查找我的 iPhone ”,打开显示绿色按钮。2、开启定位服务

2024年5月23日 18:10

htcg13是什么上市的(HTC G13,IMEI:359465044374553是哪里产哪里上市的机子)

htcg13是什么上市的(HTC G13,IMEI:359465044374553是哪里产哪里上市的机子)

本文目录HTC G13,IMEI:359465044374553是哪里产哪里上市的机子htcg13是智能机吗HTC G13,IMEI:359465044374553是哪里产哪里上市的机子手机型号HTC Wildfire S (手机参数介绍)

2024年4月3日 05:40

iqoo发布会宋大腿(2799 元起!iQOO Noe6 正式发布)

iqoo发布会宋大腿(2799 元起!iQOO Noe6 正式发布)

本文目录2799 元起!iQOO Noe6 正式发布如何评价IQOO的产品经理宋紫薇2799 元起!iQOO Noe6 正式发布iQOO Neo6主要参数介绍:操作系统:基于Android 12开发的OriginOS Ocean屏幕:6.6

2024年5月30日 01:50

y430拆机(关于Y430笔记本换内存的问题)

y430拆机(关于Y430笔记本换内存的问题)

本文目录关于Y430笔记本换内存的问题联想Y430笔记本R键和A键都坏了非常不好按,我能不能把他扣出来弄好,求助~~~关于Y430笔记本换内存的问题我以前用的笔记本也是Y430的。首先,就品牌来说,三星和金士顿都差不多的吧,选哪个都行。只是

2024年5月12日 23:50

中兴v870评测(中兴V889F手机怎么样)

中兴v870评测(中兴V889F手机怎么样)

本文目录中兴V889F手机怎么样中兴V870(BV0870)屏幕参数是多少我想买个千元左右的手机,下面这几个,哪个好一点 Amoi/夏新 N820 ZTE/中兴 V970 联想A789 华为U8825D中兴V870(BV0870)机身存储容

2024年5月2日 09:40

最新沃尔沃xc90价格(沃尔沃XC90多少钱)

最新沃尔沃xc90价格(沃尔沃XC90多少钱)

2、沃尔沃XC90车型的外观设计都是家族式设计,1、沃尔沃XC90是一款豪华七座SUV,外观设计全新设计的豪华风格内凹式镀铬前格栅,沃尔沃XC90的每辆车型都搭配City,沃尔沃XC902021款最低价格是多少钱沃尔沃XC90裸车价事实上,

2024年3月21日 00:40

索尼最新掌机是哪一款(PSP三个系列型号中哪个最好)

索尼最新掌机是哪一款(PSP三个系列型号中哪个最好)

本文目录PSP三个系列型号中哪个最好我想买给掌机索尼psp3000,NDS.3DS.哪个更好,或者其他牌子的50分献上PSP三个系列型号中哪个最好3000最好 但还没完全破解 给你3个系列的对比  PSP全称PlayStation Port

2024年5月16日 09:50

iphone13屏幕比例是多少(iphone13和13pro尺寸一样吗-iphone13和13pro一样大吗)

iphone13屏幕比例是多少(iphone13和13pro尺寸一样吗-iphone13和13pro一样大吗)

苹果十三屏幕尺寸苹果13屏幕是6.1英寸的,iPhone 13屏幕采用6.1英寸OLED屏幕,苹果13屏幕为2532x1170BIT苹果13尺寸大小为6.1英寸,苹果13采用OLED材质屏幕,iPhone13采用6.1英寸OLED屏幕,苹果

2024年3月3日 06:20

诺基亚经典推拉手机(适合女生用的诺基亚手机有什么好看的推拉式手机吗价格在1500之内)

诺基亚经典推拉手机(适合女生用的诺基亚手机有什么好看的推拉式手机吗价格在1500之内)

那么滑盖合上后手机是不会自动回到待机屏幕的,诺基亚上滑手机型号诺基亚上滑手机型号只有N系列的N85,2. 我不知道诺基亚其它型号怕滑盖手机是不是也有这个问题,不是诺基亚这款机特有的缺点),诺基亚手机在这款手机上外观进一步得到提升,诺基亚深蓝

2024年3月10日 19:10

ipad2018能卖多少钱(二手的ipad2018能卖多少128g)

ipad2018能卖多少钱(二手的ipad2018能卖多少128g)

本文目录二手的ipad2018能卖多少128g换过电池的ipad2018能卖多少钱IPAD2018和Apple Pencil入坑ipad2018款值得买吗二手的ipad2018能卖多少128g基本1000还是有的,你可以去闲鱼,转转等网站进

2024年4月26日 11:10

三星a90是什么屏幕(三星A90和A51哪个支持120hz)

三星a90是什么屏幕(三星A90和A51哪个支持120hz)

屏幕流畅性上更好,vivoX50屏幕还支持90Hz刷新率,三星A90是曲屏吗是全面屏手机华为Mate30 Pro 5G,一个90hz2019年10月21日A90采用6.7英寸1080p分辨率Super AMOLED屏幕,三星A90和A51哪

2024年2月18日 00:50