Redis中NX和XX异同浅析(redis的nx和xx)

Redis中NX和xx异同浅析

创新互联拥有一支富有激情的企业网站制作团队,在互联网网站建设行业深耕十年,专业且经验丰富。十年网站优化营销经验,我们已为千余家中小企业提供了成都网站建设、成都网站设计解决方案,按需网站建设,设计满意,售后服务无忧。所有客户皆提供一年免费网站维护!

Redis作为一款快速高效的键值对存储系统,不仅提供了各种数据结构,还提供了多种命令来操作这些数据结构。其中,SET命令是常用的命令之一,而SET命令中的NX和XX选项则是常常被使用的部分,下面我们将对它们进行一些简单的分析。

一、NX选项

在Redis中,NX选项指的是如果当前键不存在,则执行set操作,否则该命令不做任何操作,直接返回null。其语法格式如下:

SET KEY value [EX seconds] [PX milliseconds] [NX|XX]

NX

NX即Not eXists(不存在),表示只有当key不存在时才能set成功,否则返回null。这个选项最常见的用法是锁的实现,

示例:

127.0.0.1:6379>[nx1] set key1 1 nx

“OK”

127.0.0.1:6379>[nx2] set key1 2 nx

(nil)

解释:第一行为nx1实验,我们在Redis中使用set命令给key1设值为1,并指定NX选项,表示只有在key1不存在的情况下才能设置成功,返回OK。第二行为nx2实验,我们再次使用set命令给key1设值为2,并同样指定NX选项,由于key1已经存在,所以无法设置成功,返回nil。

二、XX选项

在Redis中,XX选项则表示只有当前键已经存在才能设置成功。其语法格式如下:

SET key value [EX seconds] [PX milliseconds] [NX|XX]

XX

XX选项也有一个别名,叫做EXISTS,即当key存在时才能set成功,否则返回null。

示例:

127.0.0.1:6379>[xx1] set key2 2 xx

(nil)

127.0.0.1:6379>[xx2] set key2 3 xx

“OK”

解释:这里我们分别进行了两个操作。在xx1实验中,我们使用了set指令,指定key2已存在,value值为2,由于key2并不存在,所以设置失败,返回nil。在xx2实验中,我们还是使用set指令,但这次指定的key2存在,所以设置成功,返回OK。

三、比较

我们可以发现,对于NX和XX两个选项,一个主要是在key不存在时才能set成功,另一个则在key已存在时才能set成功。因此二者主要的区别在于针对的情形不同,具体使用哪个选项就要根据实际场景进行选择了。

实际上,Redis在某些场景下会经常用到NX和XX选项,比如分布式锁的实现,当一个进程获取到锁时,只有该进程才能执行接下来的任务。在这种情况下,NX选项就很适合使用了,因为每个进程在获取锁之前都会请求Redis服务,具有相同key值的请求只有一个可以成功,而其他的请求则无法改变该key的值。

四、代码部分

下面是一些用Redis实现分布式锁的代码示例:

def distributed_lock_succeeded(key, expire_time):

“””

:param key: key值

:param expire_time: 过期时间

“””

result = redis_conn.set(

key=key,

value=”1″,

ex=expire_time,

nx=True

)

if result:

return True

else:

return False

在上面这段代码中,我们使用的是Redis的set命令,其中nx选项设为True,表示key值不存在才能设置成功。在设置成功后会返回True,否则返回False。这种锁实现的好处在于每个进程都可以获取锁,但最终只有一个进程能够执行任务,避免了不必要的资源浪费。

成都创新互联科技公司主营:网站设计、网站建设、小程序制作、成都软件开发、网页设计、微信开发、成都小程序开发、网站制作、网站开发等业务,是专业的成都做小程序公司、成都网站建设公司成都做网站的公司。创新互联公司集小程序制作创意,网站制作策划,画册、网页、VI设计,网站、软件、微信、小程序开发于一体。

网站题目:Redis中NX和XX异同浅析(redis的nx和xx)
转载来于:http://www.gawzjz.com/qtweb2/news18/29368.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联