日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

Redis 通配符批量删除key

發(fā)布時間:2023/12/6 数据库 50 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Redis 通配符批量删除key 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

問題:

  線上有部分的redis key需要清理。

?

一、

 由于Keys模糊匹配,請大家在實際運用的時候忽略掉。因為Keys會引發(fā)Redis鎖,并且增加Redis的CPU占用,情況是很惡劣的,

  官網(wǎng)說明如下:

Warning: consider KEYS as a command that should only be used in production environments with extreme care. It may ruin performance when it is executed against large databases. This command is intended for debugging and special operations, such as changing your keyspace layout. Don’t use KEYS in your regular application code. If you’re looking for a way to find keys in a subset of your keyspace, consider using SCAN or sets.

?

?

二、方案一

如果有這種需求的話可以自己對鍵值做索引,

比如把各種鍵值存到不同的set里面,分類建立索引,這樣就可以很快的得到數(shù)據(jù),

但是這樣也存在一個明顯的缺點,就是浪費寶貴的空間,要知道這可是內(nèi)存空間啊,所以還是要合理考慮,當(dāng)然也可以想辦法,比如對于有規(guī)律的鍵值,可以存儲他們的始末值等等。?

?

三、方案二

從redis的官方文檔上看,2.8版本之后SCAN命令已經(jīng)可用,允許使用游標(biāo)從keyspace中檢索鍵。

對比KEYS命令,雖然SCAN無法一次性返回所有匹配結(jié)果,但是卻規(guī)避了阻塞系統(tǒng)這個高風(fēng)險,從而也讓一些操作可以放在主節(jié)點上執(zhí)行。

?

需要注意的是,SCAN 命令是一個基于游標(biāo)的迭代器。

SCAN 命令每次被調(diào)用之后, 都會向用戶返回一個新的游標(biāo),用戶在下次迭代時需要使用這個新游標(biāo)作為 SCAN 命令的游標(biāo)參數(shù), 以此來延續(xù)之前的迭代過程。同時,使用SCAN,用戶還可以使用keyname模式和count選項對命令進行調(diào)整。SCAN相關(guān)命令還包括SSCAN 命令、HSCAN 命令和 ZSCAN 命令,分別用于集合、哈希鍵及有續(xù)集等。

?

四、代碼示例

?

# -*- coding: utf-8 -*- import sys from sys import argv from rediscluster import RedisCluster# 生產(chǎn)環(huán)境 product_redis_nodes_str = "*"def get_redis():redis_nodes_str = product_redis_nodes_strprint redis_nodes_strstartup_nodes = []for hp in redis_nodes_str.split(','):host, port = hp.split(':')port = int(port)startup_nodes.append({"host": host, "port": port})rc = RedisCluster(startup_nodes=startup_nodes, max_connections=16, decode_responses=False)print "get_redis success"return rcdef test_keys():rc = get_redis()key_list = []for key in rc.scan_iter(match='rc.rs.smallvideo*', count=1000):key_list.append(key)if(len(key_list)>=100000):break;for key in key_list:rc.delete(key)if __name__ == "__main__":Usage = "python %s" % __file__if len(argv) != 1:print Usagesys.exit(1)test_keys()

  

?

?

參考:

  1、http://www.redis.cn/commands/scan.html

轉(zhuǎn)載于:https://www.cnblogs.com/KyleXu/p/10447862.html

總結(jié)

以上是生活随笔為你收集整理的Redis 通配符批量删除key的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。