thinkphp tp redis鎖 原始碼實現

2021-08-28 00:09:00 字數 823 閱讀 2798

tp5以上直接複製貼上即可, 需要修改命名空間

快速使用 (new redislock ())->lock($key, $expire = 5, $num = 0) 返回true代表加鎖成功

,可以執行後面**,否則失敗;  支援重試$num次,   加鎖成功後$expire秒後鎖自動釋放,  防止死鎖 ;

(new redislock ())->unlock($key) 解鎖;

<?php

namespace 你的命名空間;

use think\cache;

class redislock

/*** 獲取鎖

* @param string $key 鎖標識

* @param int $expire 鎖過期時間

* @param int $num 重試次數

* @return boolean

*/public function lock($key, $expire = 5, $num = 0)次

for($i = 0; $i < $num; $i++)

sleep(1);}}

// 不能獲取鎖

if(!$is_lock)

}return $is_lock? true : false;

}/**

* 釋放鎖

* @param string $key 鎖標識

* @return boolean

*/public function unlock($key)

}

jquery原始碼 noConflict實現

實現方式很簡單 在初始化的時候,記錄當前全域性中jquery和 兩個變數的的值,用 jquery和 分別存放,呼叫noconflict方法時,使用 jquery和 分別恢復對應的值,並且返回jquery物件。初始化jquery物件時,呼叫邏輯如下 1.記錄全域性中的jquery和 變數 此時這兩個變...

ReetrantLock鎖原始碼解析

非 公平鎖加鎖主要方法解析 protected final boolean tryacquire int acquires else if current getexclusiveownerthread 判斷是否是可重入的 加鎖失敗 return false private node addwait...

LinkedHashMap原始碼分析及實現LRU演算法

ps 要先了解hashmap的實現原理hashmap原始碼分析 可以看到linkedhashmap繼承了hashmap,其實際是在hashmap基礎上,把資料節點連成乙個雙向鍊錶,遍歷的時候按鍊錶順序遍歷。小總結預設的linkedhashmap 的遍歷會按照插入的順序遍歷出來,hashmap則不保證...