新聞中心
Redis中NX和xx異同淺析

創(chuàng)新互聯(lián)擁有一支富有激情的企業(yè)網(wǎng)站制作團隊,在互聯(lián)網(wǎng)網(wǎng)站建設(shè)行業(yè)深耕十年,專業(yè)且經(jīng)驗豐富。十年網(wǎng)站優(yōu)化營銷經(jīng)驗,我們已為千余家中小企業(yè)提供了成都網(wǎng)站建設(shè)、成都網(wǎng)站設(shè)計解決方案,按需網(wǎng)站建設(shè),設(shè)計滿意,售后服務(wù)無憂。所有客戶皆提供一年免費網(wǎng)站維護!
Redis作為一款快速高效的鍵值對存儲系統(tǒng),不僅提供了各種數(shù)據(jù)結(jié)構(gòu),還提供了多種命令來操作這些數(shù)據(jù)結(jié)構(gòu)。其中,SET命令是常用的命令之一,而SET命令中的NX和XX選項則是常常被使用的部分,下面我們將對它們進行一些簡單的分析。
一、NX選項
在Redis中,NX選項指的是如果當(dāng)前鍵不存在,則執(zhí)行set操作,否則該命令不做任何操作,直接返回null。其語法格式如下:
SET KEY value [EX seconds] [PX milliseconds] [NX|XX]
NX
NX即Not eXists(不存在),表示只有當(dāng)key不存在時才能set成功,否則返回null。這個選項最常見的用法是鎖的實現(xiàn),
示例:
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設(shè)值為1,并指定NX選項,表示只有在key1不存在的情況下才能設(shè)置成功,返回OK。第二行為nx2實驗,我們再次使用set命令給key1設(shè)值為2,并同樣指定NX選項,由于key1已經(jīng)存在,所以無法設(shè)置成功,返回nil。
二、XX選項
在Redis中,XX選項則表示只有當(dāng)前鍵已經(jīng)存在才能設(shè)置成功。其語法格式如下:
SET key value [EX seconds] [PX milliseconds] [NX|XX]
XX
XX選項也有一個別名,叫做EXISTS,即當(dāng)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并不存在,所以設(shè)置失敗,返回nil。在xx2實驗中,我們還是使用set指令,但這次指定的key2存在,所以設(shè)置成功,返回OK。
三、比較
我們可以發(fā)現(xiàn),對于NX和XX兩個選項,一個主要是在key不存在時才能set成功,另一個則在key已存在時才能set成功。因此二者主要的區(qū)別在于針對的情形不同,具體使用哪個選項就要根據(jù)實際場景進行選擇了。
實際上,Redis在某些場景下會經(jīng)常用到NX和XX選項,比如分布式鎖的實現(xiàn),當(dāng)一個進程獲取到鎖時,只有該進程才能執(zhí)行接下來的任務(wù)。在這種情況下,NX選項就很適合使用了,因為每個進程在獲取鎖之前都會請求Redis服務(wù),具有相同key值的請求只有一個可以成功,而其他的請求則無法改變該key的值。
四、代碼部分
下面是一些用Redis實現(xiàn)分布式鎖的代碼示例:
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選項設(shè)為True,表示key值不存在才能設(shè)置成功。在設(shè)置成功后會返回True,否則返回False。這種鎖實現(xiàn)的好處在于每個進程都可以獲取鎖,但最終只有一個進程能夠執(zhí)行任務(wù),避免了不必要的資源浪費。
成都創(chuàng)新互聯(lián)科技公司主營:網(wǎng)站設(shè)計、網(wǎng)站建設(shè)、小程序制作、成都軟件開發(fā)、網(wǎng)頁設(shè)計、微信開發(fā)、成都小程序開發(fā)、網(wǎng)站制作、網(wǎng)站開發(fā)等業(yè)務(wù),是專業(yè)的成都做小程序公司、成都網(wǎng)站建設(shè)公司、成都做網(wǎng)站的公司。創(chuàng)新互聯(lián)公司集小程序制作創(chuàng)意,網(wǎng)站制作策劃,畫冊、網(wǎng)頁、VI設(shè)計,網(wǎng)站、軟件、微信、小程序開發(fā)于一體。
網(wǎng)站欄目:Redis中NX和XX異同淺析(redis的nx和xx)
分享地址:http://m.5511xx.com/article/dhcopsg.html


咨詢
建站咨詢
