您好,登錄后才能下訂單哦!
這篇文章給大家介紹Redis批量刪除key以及setnx使用場景的分析,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。
1, 批量刪除key
redis中要刪除某個key的值,只能通過del key的方式進行刪除。如果要批量刪除呢?很遺憾,Redis并不支持按key的正則方式進行刪除的操作。那如何去達到這個效果呢?可以使用linux的管道命令,如下:
/usr/local/redis/bin/redis-cli keys abc:* | xargs /usr/local/redis/bin/redis-cli del
前面的/usr/local/redis/bin/redis-cli是redis的客戶端,keys abc:* 表示獲取到以abc:開頭的所有key,然后把這些key,當做參數(xargs),傳遞給管道后面的del命令。這樣就實現了批量刪除key的功能。但是如果key的前綴后面接著就是空格,那這個正則就無法命中了。
當然,在redis命令后面,還可以加上很多其他的參數,比如:
-h ip //表示某個ip主機 -p port //表示該主機端口 -a password //表示連接密碼 -n 1 //表示選擇節點號為1的數據庫節點(不寫默認連接為0),對應的命令為 select 1
比如
/usr/local/redis/bin/redis-cli -n 1 keys "ab:token*" | xargs /usr/local/redis/bin/redis-cli -n 1 del (integer) 188 //表示刪除了188個key
注意管道前后都加了相同的參數,否則會匹配不上。
當然,如果要全部刪除某個節點的數據,可以直接使用
flushdb flushall
這兩個命令。
2, redis 的 expire key time_in_seconds 命令,后面的過期時間,必須是整數,不能為小數。否則會報 ERR value is not an integer or out of range 錯誤。
3,redis的setnx使用場景
<?php public function abc() { //唯一key $key = 'string_key_'.$uniqueId; //redis實例 $redis = app('redis')->connection('cache'); $random = rand(1, 10000); //將唯一key賦值為$random值,如果成功,表示加上了鎖,如果未成功,等待鎖釋放,直到獲取到鎖 while (!$locked = $redis->setnx($key, $random)) { sleep(0.05); } //設置成功后加過期時間 $ttl = 1; $redis->expire($key, $ttl); //業務邏輯處理 //如果業務邏輯處理完,為防止del把其他請求的鎖刪掉,這里加上$random值校驗,確保這里刪除的鎖是本次周期內的 if ($redis->get($key) == $random) { $redis->del([$key]); } //返回結果 return $result; }
這里要注意的是,如果業務處理邏輯未處理完,此時key失效了,那第二個請求過來,它可以直接獲取到一個新的鎖,然后執行一個新的業務邏輯,造成實際上的并發。所以,這里的 過期時間,一定要設置得比 業務處理邏輯更長一些,讓業務邏輯處理完。
4,對redis進行連接限制保護時,有三部分:
在redis配置文件中的protected-mode 設置,yes 表示 以保護模式運行,需要配置 bind ip 或者需要設置訪問密碼(requirepass);
bind ip 綁定IP 配置,它限制的是哪些IP才可以連接本redis,其中0.0.0.0是允許所以外網連接,當然127.0.0.1就是本機;
requirepass 設置訪問密碼;
有四種方式可以改變保護模式,如下
DENIED Redis is running in protected mode because protected mode is enabled, no bind address was specified, no authentication password is requested to clients. In this mode connections are only accepted from the loopback interface. If you want to connect from external computers to Redis you may adopt one of the following solutions: //如果你想要從外部電腦連接Redis,你可能需要采用以下方案中的一種 1) Just disable protected mode sending the command 'CONFIG SET protected-mode no' from the loopback interface by connecting to Redis from the same host the server is running, however MAKE SURE Redis is not publicly accessible from internet if you do so. Use CONFIG REWRITE to make this change permanent. 2) Alternatively you can just disable the protected mode by editing the Redis configuration file, and setting the protected mode option to 'no', and then restarting the server. 3) If you started the server manually just for testing, restart it with the '--protected-mode no' option. 4) Setup a bind address or an authentication password. NOTE: You only need to do one of the above things in order for the server to start accepting connections from the outside
關于Redis批量刪除key以及setnx使用場景的分析就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。