Redis事务处理
Redis 在事务失败时不进行回滚,而是继续执行余下的命令 ,Redis 命令只会因为错误的语法而失败(并且这些问题不能在入队时发现)
当前使用的redis版本
#redis-cli -v
redis-cli 2.6.4
MULTI 、EXEC 、DISCARD 和WATCH 是 Redis 事务的基础
1.MULTI 命令用于开启一个事务,它总是返回 OK 。
MULTI 执行之后,客户端可以继续向服务器发送任意多条命令,这些命令不会立即被执行,而是被放到一个队列中
2.EXEC 命令被调用时,所有队列中的命令才会被执行。
+++++++++++命令 +++++++++++
redis 192.168.1.53:6379> multi
OK
redis 192.168.1.53:6379> incr foo
QUEUED
redis 192.168.1.53:6379> set t1 1
QUEUED
redis 192.168.1.53:6379> exec
1) (integer) 2
2) OK
+++++++++++对应的java代码 +++++++++++
Jedis jedis = new Jedis("192.168.1.53", 6379);
Transaction tx = jedis.multi();
tx.incr( "foo");
tx.set( "t1", "2");
List
使用事务时可能会遇上以下两种错误:
1.事务在执行EXEC 之前,入队的命令可能会出错。比如说,命令可能会产生语法错误(参数数量错误,参数名错误,等等),或者其他更严重的错误,比如内存不足
(如果服务器使用 maxmemory 设置了最大内存限制的话)。
2.命令可能在EXEC 调用之后失败。举个例子,事务中的命令可能处理了错误类型的键,比如将列表命令用在了字符串键上面,诸如此类。
第一种错误的情况:
服务器端:
在 Redis 2.6.5 以前,Redis 只执行事务中那些入队成功的命令,而忽略那些入队失败的命令
不过,从 Redis 2.6.5 开始,服务器会对命令入队失败的情况进行记录,并在客户端调用EXEC 命令时,拒绝执行并自动放弃这个事务。
+++++++++++命令 +++++++++++
redis 192.168.1.53:6379> multi
OK
redis 192.168.1.53:6379> incr foo
QUEUED
redis 192.168.1.53:6379> set ff 11 22
(error) ERR wrong number of arguments for 'set' command
redis 192.168.1.53:6379> exec
1) (integer) 4
因为我的版本是:2.6.4,所以Redis 只执行事务中那些入队成功的命令,而忽略那些入队失败的命令
客户端(jredis):
客户端以前的做法是检查命令入队所得的返回值:如果命令入队时返回 QUEUED ,那么入队成功;否则,就是入队失败。如果有命令在入队时失败,
那么大部分客户端都会停止并取消这个事务。
第二种错误的情况:
至于那些在EXEC 命令执行之后所产生的错误,并没有对它们进行特别处理:即使事务中有某个/某些命令在执行时产生了错误,事务中的其他命令仍然会继续执行。
+++++++++++命令+++++++++++
redis 192.168.1.53:6379> multi
OK
redis 192.168.1.53:6379> set a 11
QUEUED
redis 192.168.1.53:6379> lpop a
QUEUED
redis 192.168.1.53:6379> exec
1) OK
2) (error) ERR Operation against a key holding the wrong kind of value
+++++++++++对应的java代码 +++++++++++
Jedis jedis = new Jedis("192.168.1.53", 6379);
Transaction tx = jedis.multi();
tx.set( "t1", "2");
tx.lpop( "t1");
List
Redis 在事务失败时不进行回滚,而是继续执行余下的命令
这种做法可能会让你觉得有点奇怪,以下是这种做法的优点:
1.Redis 命令只会因为错误的语法而失败(并且这些问题不能在入队时发现),或是命令用在了错误类型的键上面:这也就是说,从实用性的角度来说,,失败的命令是由编程错误造成的,而这些错误应该在开发的过程中被发现,而不应该出现在生产环境中。
2.因为不需要对回滚进行支持,所以 Redis 的内部可以保持简单且快速。
鉴于没有任何机制能避免程序员自己造成的错误,并且这类错误通常不会在生产环境中出现,所以 Redis 选择了更简单、更快速的无回滚方式来处理事务。
3.DISCARD 命令时,事务会被放弃,事务队列会被清空,并且客户端会从事务状态中退出
+++++++++++命令 +++++++++++
redis 192.168.1.53:6379> set foo 1
OK
redis 192.168.1.53:6379> multi
OK
redis 192.168.1.53:6379> incr foo
QUEUED
redis 192.168.1.53:6379> discard
OK
redis 192.168.1.53:6379> get foo
"1"
4.WATCH 命令可以为 Redis 事务提供 check-and-set (CAS)行为
被WATCH 的键会被监视,并会发觉这些键是否被改动过了。如果有至少一个被监视的键在EXEC 执行之前被修改了,那么整个事务都会被取消
+++++++++++第一条命令 +++++++++++
redis 192.168.1.53:6379> watch foo
OK
redis 192.168.1.53:6379> set foo 5
OK
redis 192.168.1.53:6379> multi
OK
redis 192.168.1.53:6379> set foo 9
QUEUED
+++++++++++暂停(执行完第二条命令才执行下面的)+++++++++++
redis 192.168.1.53:6379> exec
(nil)
redis 192.168.1.53:6379> get foo
"8"
+++++++++++第二条命令+++++++++++
redis 192.168.1.53:6379> set foo 8
OK
+++++++++++对应的java代码 +++++++++++

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

热门话题

本篇文章将详细介绍如何安装和注册比特币交易应用。比特币交易应用允许用户管理和交易比特币等加密货币。文章逐步指导用户完成安装和注册过程,包括下载应用程序、创建账户、进行身份验证和首次存款。文章的目标是为初学者提供清晰易懂的指南,帮助他们轻松进入比特币交易的世界。

欧易,又称OKX,是一个全球领先的加密货币交易平台。文章提供了欧易官方安装包的下载入口,方便用户在不同设备上安装欧易客户端。该安装包支持 Windows、Mac、Android 和 iOS 系统,用户可根据自己的设备类型选择相应版本下载。安装完成后,用户即可注册或登录欧易账户,开始交易加密货币和享受平台提供的其他服务。

本文推荐全球十大数字货币交易APP,涵盖币安(Binance)、OKX、火币(Huobi Global)、Coinbase、Kraken、Gate.io、KuCoin、Bitfinex、Gemini和Bitstamp。这些平台在交易对数量、交易速度、安全性、合规性、用户体验等方面各有特色,例如币安以其高交易速度和广泛服务闻名,而Coinbase则更适合新手用户。选择适合自己的平台需要综合考虑自身需求和风险承受能力。 了解全球主流数字货币交易平台,助您安全高效进行数字资产交易。

此次Redstone代币$RED将于币安TGE且上线binancelaunchpool!这也是币安第一次推出盘前交易涨停板的机制!首日限200%,3天后解禁,避免「开盘即巅峰」!Launchpool机制介绍参与Redstone的BinanceLaunchpool需要质押指定的代币(BNB、USDC、FDUSD)活动期限为48小时:2025年2月26日08:00UTC至2025年2月28日08:00UTC结束本次盘前涨停板规则:2025年02月28日18:00

没有单一“最好用”的数字货币交易App,选择取决于个人需求。1. OKX功能强大,币种丰富;2. Binance流动性高,交易类型多样;3. Gate.io提供质押挖矿等独特功能;4. Huobi Global界面友好,多语言支持;5. Kraken注重安全性;6. Coinbase适合新手,注重用户教育。 选择时需考虑安全性、流动性、手续费、功能、用户体验等等因素。

本文介绍了 10 个主流的加密货币交易所,涵盖了它们的成立时间、服务范围、安全性、流动性、交易费用等基本信息。这些交易所包括:OKX、Binance、Gate.io、Bitget、Coinbase、Huobi、KuCoin、Crypto.com、Gemini 和 Kraken。

本文根据全球信息,整理了全球领先的虚拟数字货币交易平台排名,包括Binance(币安)、OKX、Gate.io、Huobi(火币)、Coinbase、Kraken、Crypto.com、bitget、KuCoin和Bitstamp等。这些平台在用户数量、交易量、交易品种、安全性、合规性等方面各有特色,例如币安以其庞大的用户群和广泛的交易选择着称,Coinbase则以其在美国市场的领先地位和易用性而闻名。 选择合适的交易平台需要根据自身需求,权衡安全性、费用、交易品种等因素。

强化Debian系统上Oracle数据库的安全,需要多方面入手。以下步骤提供一个安全配置的框架:一、Oracle数据库安装与初始配置系统准备:确保Debian系统已更新至最新版本,网络配置无误,并安装所有必需的软件包。建议参考官方文档或可靠的第三方资源进行安装。用户与组:创建专用Oracle用户组(如oinstall,dba,backupdba),并为其设置合适的权限。二、安全限制设置资源限制:编辑/etc/security/limits.d/30-oracle.conf文
