Redis原始碼分析之unlock

2021-09-23 06:00:15 字數 676 閱讀 7042

@override

public void unlock()

if (opstatus)

}

第一步:發布解鎖訊息刪除key

protected rfutureunlockinnerasync(long threadid)
呼叫lua指令碼,exists命令:若 key 存在返回 1 ,否則返回 0 。 

publish 發布unlockmessage訊息

hexists 如果雜湊表含有給定字段,返回 1 。 如果雜湊表不含有給定字段,或 key 不存在,返回 0 。

hincrby redis hincrby 命令用於為雜湊表中的字段值加上指定增量值,此處是-1即減1,因為存在重入鎖問題,n次上鎖需要n次解鎖

del 刪除key

第二步:取消定時任務

void cancelexpirationrenewal() 

}

private static final concurrentmapexpirationrenewalmap = platformdependent.newconcurrenthashmap();
呼叫lock(),trylock()無參方法會生成乙個定時任務,手動unlock的時候會取消任務

redis之string原始碼分析

string資料型別的物件編碼有兩種,分別是embstr和raw。兩種編碼的區別並不大,embstr相對於raw,記憶體空間連續。兩者的資料格式見下圖 redis的string資料之所以使用embstr和raw兩種編碼格式,是為了當乙個string物件的值比較小時,使用乙個連續的記憶體分割槽存放re...

Redis原始碼分析之SET流程

本篇分析redis 如何處理set指令 客戶端解析使用者輸入 構造指令 redisformatsdscommandar clisendcommand issuecommandrepeat repl 例如使用者輸入set abcd 2,則構造的指令就是 3 r n 3 r nset r n 4 r n...

Redis原始碼分析 intset h c

intset.h c 是redis 的整數set實現,intset的結構體如下 基本結構 typedef struct intset intset intset的第乙個成員encoding,表明contents中的儲存資料的資料長度,可以是16bits,32bits,64bits。第二個成員leng...