中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Redis批量刪除key以及setnx使用場景的分析

發布時間:2021-10-20 18:17:46 來源:億速云 閱讀:468 作者:柒染 欄目:大數據

這篇文章給大家介紹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使用場景的分析就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

罗甸县| 民县| 湛江市| 库伦旗| 万宁市| 东平县| 西吉县| 黄石市| 潞西市| 安庆市| 蓝山县| 丘北县| 康保县| 桦南县| 巢湖市| 灌南县| 登封市| 石家庄市| 哈尔滨市| 福清市| 五常市| 鄂伦春自治旗| 临沂市| 监利县| 孙吴县| 辽中县| 巍山| 理塘县| 孝昌县| 灵石县| 九龙城区| 遂宁市| 泉州市| 西宁市| 汤阴县| 和田县| 阿鲁科尔沁旗| 罗源县| 本溪| 建昌县| 大新县|