最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

redis模糊批量刪除key的方法

 更新時(shí)間:2022年12月16日 15:05:51   作者:杰哥的技術(shù)雜貨鋪  
這篇文章主要介紹了redis模糊批量清除key的操作方法,包括命令行刪除和golang代碼刪除,本文結(jié)合示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

一、命令行刪除

redis-cli -h 172.18.255.99 -p 6379 -n 6 -a 123456 KEYS "websocket127.0.0.1:5*" | xargs redis-cli -h 172.18.255.99 -p 6379 -n 6 -a 123456 DEL
  • -h:redis地址
  • -p:redis端口
  • -n:reids庫(kù)
  • -a:redis密碼

Redis 提供了一個(gè)簡(jiǎn)單暴力的指令 keys 用來(lái)列出所有滿足特定正則字符串規(guī)則的 key。

注:這個(gè)指令使用非常簡(jiǎn)單,提供一個(gè)簡(jiǎn)單的正則字符串即可,但是有很明顯的兩個(gè)缺點(diǎn)。

  • 沒(méi)有 offset、limit 參數(shù),一次性吐出所有滿足條件的 key,萬(wàn)一實(shí)例中有幾百 w 個(gè) key 滿足條件,
  • 當(dāng)你看到滿屏的字符串刷的沒(méi)有盡頭時(shí),你就知道難受了。
  • keys 算法是遍歷算法,復(fù)雜度是 O(n),如果實(shí)例中有千萬(wàn)級(jí)以上的 key,這個(gè)指令就會(huì)導(dǎo)致 Redis 服務(wù)卡頓,
  • 所有讀寫 Redis 的其它的指令都會(huì)被延后甚至?xí)瑫r(shí)報(bào)錯(cuò),
  • 因?yàn)?Redis 是單線程程序,順序執(zhí)行所有指令,其它指令必須等到當(dāng)前的 keys 指令執(zhí)行完了才可以繼續(xù)。

所以建議生產(chǎn)環(huán)境屏蔽keys命令

scan 相比 keys 具備有以下特點(diǎn):

  • 復(fù)雜度雖然也是 O(n),但是它是通過(guò)游標(biāo)分步進(jìn)行的,不會(huì)阻塞線程;
  • 提供 limit 參數(shù),可以控制每次返回結(jié)果的最大條數(shù),limit 只是對(duì)增量式迭代命令的一種提示(hint),返回的結(jié)果可多可少;
  • 同 keys 一樣,它也提供模式匹配功能;
  • 服務(wù)器不需要為游標(biāo)保存狀態(tài),游標(biāo)的唯一狀態(tài)就是 scan 返回給客戶端的游標(biāo)整數(shù);
  • 返回的結(jié)果可能會(huì)有重復(fù),需要客戶端去重復(fù),這點(diǎn)非常重要;
  • 遍歷的過(guò)程中如果有數(shù)據(jù)修改,改動(dòng)后的數(shù)據(jù)能不能遍歷到是不確定的;
  • 單次返回的結(jié)果是空的并不意味著遍歷結(jié)束,而要看返回的游標(biāo)值是否為零

KEYS vs SCAN

一樣都會(huì)掃過(guò)所有的 key,scan 不會(huì)阻塞整個(gè) server,而是迭代的收集結(jié)果

DEL vs UNLINK

一樣都是刪除 key ,差別在於 unlink 是非阻塞的刪除,會(huì)以非同步的方式回收記憶體

所以對(duì)于一個(gè)大的key數(shù)量,我們可以借助sscan使用下邊的命令可以實(shí)現(xiàn)優(yōu)雅的批量刪除:

redis-cli -h 172.18.255.99 -p 6379 --scan --pattern users:* | xargs redis-cli -h 172.18.255.99 -p 6379 unlink
  • 用 scan 找出要?jiǎng)h的 key
  • 透過(guò) xargs 傳給 unlink 刪掉 key
(error) ERR unknown command 'unlink'

如果出現(xiàn)以上錯(cuò)誤,說(shuō)明redis版本不足,使用unlink需要Redis4版本

cluster 刪除數(shù)據(jù)

redis-cli -c -p 7000 --scan --pattern "age_*" | xargs -L 1 redis-cli -c -p 7000 -n 0 unlink

遍歷redis cluster各分片刪除

for port in {7000..7005}; do
    redis-cli -c -p ${port} -h 192.168.31.181 --scan --pattern "age_*" | xargs -L 1 redis-cli -h 192.168.31.181 -c -p ${port} -n 0 unlink  
done

二、golang代碼刪除

func DeleteRedisKeys(key string) {
	traceId := libra.GenTraceId(context.Background(), nil)
	ctx := libra.SetTraceId(context.Background(), traceId)
	//模糊查詢所有符合條件的key
	websocketKeys, _ := commons.GetRedisClient().Keys(ctx, key+"*").Result()
	if reflect.TypeOf(websocketKeys).Kind() == reflect.Slice {
		val := reflect.ValueOf(websocketKeys)
		if val.Len() == 0 {
			return
		}
		// 批量刪除key
		for i := 0; i < val.Len(); i++ {
			_, err := commons.GetRedisClient().Del(ctx, val.Index(i).Interface().(string)).Result()
			dlog.Errorf("DeleteKeys addr:=%v,err=%v", addr, err)
		}
	}
}

參考文檔

Redis SCAN的使用:http://jinguoxing.github.io/redis/2018/09/04/redis-scan/

到此這篇關(guān)于redis模糊批量清除key的文章就介紹到這了,更多相關(guān)redis模糊刪除key內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • redis持久化的介紹

    redis持久化的介紹

    今天小編就為大家分享一篇關(guān)于redis持久化的介紹,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2019-01-01
  • 高并發(fā)技巧之Redis和本地緩存使用技巧分享

    高并發(fā)技巧之Redis和本地緩存使用技巧分享

    在這篇文章中,我主要介紹的是分布式緩存和本地緩存的使用技巧,包括緩存種類介紹,各種的使用場(chǎng)景,以及如何使用,最后再給出實(shí)戰(zhàn)案例,需要的可以參考一下
    2022-10-10
  • redis中l(wèi)ua腳本使用教程

    redis中l(wèi)ua腳本使用教程

    在使用redis的過(guò)程中,發(fā)現(xiàn)有些時(shí)候需要原子性去操作redis命令,而redis的lua腳本正好可以實(shí)現(xiàn)這一功能。這篇文章主要介紹了redis中l(wèi)ua腳本的簡(jiǎn)單使用,需要的朋友可以參考下
    2021-10-10
  • redis使用watch秒殺搶購(gòu)實(shí)現(xiàn)思路

    redis使用watch秒殺搶購(gòu)實(shí)現(xiàn)思路

    這篇文章主要為大家詳細(xì)介紹了redis使用watch秒殺搶購(gòu)的實(shí)現(xiàn)思路,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-02-02
  • redis分片集群的部署和使用教程

    redis分片集群的部署和使用教程

    這篇文章介紹了如何使用Docker和腳本在虛擬機(jī)上部署Redis集群,并詳細(xì)講解了Spring Boot整合Redis集群的方法,包括配置、讀寫分離以及一些須知,感興趣的朋友跟隨小編一起看看吧
    2025-12-12
  • Redis實(shí)現(xiàn)庫(kù)存扣減的解決方案防止商品超賣

    Redis實(shí)現(xiàn)庫(kù)存扣減的解決方案防止商品超賣

    在日常開(kāi)發(fā)中有很多地方都有類似扣減庫(kù)存的操作,比如電商系統(tǒng)中的商品庫(kù)存,抽獎(jiǎng)系統(tǒng)中的獎(jiǎng)品庫(kù)存等,基于redis實(shí)現(xiàn)扣減庫(kù)存的具體實(shí)現(xiàn),初始化庫(kù)存回調(diào)函數(shù)(IStockCallback)扣減庫(kù)存服務(wù)(StockService),感興趣的朋友跟隨小編一起看看吧
    2022-06-06
  • Redis分布式緩存的安裝

    Redis分布式緩存的安裝

    這篇文章主要介紹了Redis分布式緩存的安裝,Redis?是一個(gè)開(kāi)源(BSD許可)的,內(nèi)存中的數(shù)據(jù)結(jié)構(gòu)存儲(chǔ)系統(tǒng),它可以用作數(shù)據(jù)庫(kù)、緩存和消息中間件,需要的朋友可以參考下
    2023-05-05
  • Redis序列化設(shè)置以及jetcache連接Redis序列化的設(shè)置過(guò)程

    Redis序列化設(shè)置以及jetcache連接Redis序列化的設(shè)置過(guò)程

    這篇文章主要介紹了Redis序列化設(shè)置以及jetcache連接Redis序列化的設(shè)置過(guò)程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • Ubuntu下安裝redis的2種方法分享

    Ubuntu下安裝redis的2種方法分享

    redis是一個(gè)開(kāi)源的、使用C語(yǔ)言編寫的、支持網(wǎng)絡(luò)交互的、可基于內(nèi)存也可持久化的Key-Value數(shù)據(jù)庫(kù)。這篇文章對(duì)redis就不進(jìn)行詳細(xì)的介紹了,這篇文章主要給大家介紹了Ubuntu下安裝redis的兩種方法,有需要的朋友們可以參考學(xué)習(xí),下面來(lái)一起看看吧。
    2016-12-12
  • Redis緩存雪崩的物種解決方案

    Redis緩存雪崩的物種解決方案

    在高并發(fā)系統(tǒng)中,Redis作為核心緩存組件,通常扮演著重要的"守門員"角色,當(dāng)大量緩存同時(shí)失效時(shí),會(huì)導(dǎo)致請(qǐng)求如洪水般直接涌向數(shù)據(jù)庫(kù),造成數(shù)據(jù)庫(kù)瞬間壓力劇增甚至宕機(jī),這種現(xiàn)象被形象地稱為"緩存雪崩",本文給大家介紹了Redis緩存雪崩的5種應(yīng)對(duì)措施,需要的朋友可以參考下
    2025-04-04

最新評(píng)論

九江县| SHOW| 永兴县| 东乡县| 塔城市| 改则县| 电白县| 浪卡子县| 玛多县| 旺苍县| 华安县| 美姑县| 台中县| 宿迁市| 泸定县| 沐川县| 射洪县| 藁城市| 松江区| 锦州市| 广宗县| 新干县| 平湖市| 五原县| 东阳市| 北安市| 宜兰市| 南康市| 山东| 茌平县| 凤凰县| 乌海市| 富平县| 甘泉县| 芜湖县| 拉孜县| 扎兰屯市| 鹤庆县| 车致| 双辽市| 五原县|