如何使用Redis Watch命令
如何使用Redis Watch命令使用Redis管理数据,理解如何使用事务存储键值对数据很重要。Redis事务与RDMMS事务有些类似,但也有差异。Redis主要通过几个命令有效管理事务,本文讨论Redis的Watch命令以及如何使用。1. 概述在阅读之前你最好安装好Redis环境,熟悉Redis常用命令。Redis事务命令主要包括 WATCH, EXEC, DISCARD, MULTI。这些命令
如何使用Redis Watch命令
使用Redis管理数据,理解如何使用事务存储键值对数据很重要。Redis事务与RDMMS事务有些类似,但也有差异。Redis主要通过几个命令有效管理事务,本文讨论Redis的Watch命令以及如何使用。
1. 概述
在阅读之前你最好安装好Redis环境,熟悉Redis常用命令。
Redis事务命令主要包括 WATCH, EXEC, DISCARD, MULTI。这些命令构成一组命令块,确保在一个步骤中全部执行。首先,它们确保事务中的命令将按顺序执行并序列化。这意味着在执行Redis事务时,来自不同客户端的请求不会被服务器接受处理。此外,Redis事务保证是原子的,即要么执行所有的命令,要么不执行。
了解了Redis事务机制后,我们继续看如何使用命令实现事务。
Redis事务使用MULTI
命令启动,其总是返回OK
。这时用户可以执行多条命令,Redis在队列中加入这些命令,当用户执行EXEC
命令时才真正执行队列中的命令。如果用户执行DISCARD
命令,Redis丢弃队列中的命令结束事务。
2. Watch命令
前节我们从顶层介绍了Redis的事务及操作过程。本节主要讨论Redis Watch
命令以及其在事务中扮演的角色。
Watch
命令是Exec
命令的执行条件;也就是说,如果Watch的Key没有被修改则Redis执行事务,否则(Watch的key被其他事务修改了)事务不会被执行。
Watch
命令可以被调用多次,一个Watch
命令可以监控多个key。Watch
命令调用即启动监控功能,从Watch
命令开始点到执行EXEC
命令终止。一旦EXEC
被调用,所有的键都将不被监视,无论所讨论的事务是否被中止。关闭客户端连接也会触发所有的键被取消监视。
Redis Watch
命令给事务提供check-and-set (CAS) 机制。被Watch的Key被持续监控,如果key在Exec命令执行前有改变,那么整个事务被取消,Exec返回null表示事务没有成功。
请看下面示例,我们需要给key的值加一,使用下面命令:
num = GET sampleKey
num = num + 1
SET sampleKey $num
上面命令在单用户执行环境下没有任何问题。如果多个用户尝试同时正键的值会产生问题,假设sampleKey 原来值为13,两个客户端尝试同时增加值。两者都将键设为14,最终结果为14而不是15。
使用watch命令可以解决该问题:
WATCH sampleKey
num = GET sampleKey
num = num + 1
MULTI
SET sampleKey $num
EXEC
使用上面代码,如果竞争条件发生,因为键被监控,Exec会执行失败。只有当没有竞争条件时才能正确执行事务。这种锁处理也称为“乐观锁”,它提供有效昂是保障竞争条件。大多数情况下不同客户端访问不同的键,因此冲突的概率相当小,事务不太可能需要重复执行。
3. 总结
事务是Redis的基本组件,学习如何有效使用很重要。 EXEC, WATCH, MULTI, DISCARD 命令作为实现事务机制的基本命令,管理事务执行保证数据完整性。本文主要介绍Watch命令及如何使用该命令,希望对对理解Redis事务有帮助。
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)