亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁技術文章
文章詳情頁

解決Java Redis刪除HashMap中的key踩到的坑

瀏覽:2日期:2022-08-16 09:52:21
現象

Java使用Redis刪除HashMap中的key時,取出對應的HashMap后通過Java中HashMap的remove方法移除key然后重新調用redis的Hmset方法將覆蓋無效

示例代碼

//通過key取出對應的HashMapMap<String, String> ruleMap = jedisCluster.hgetAll('HashKey');//通過java中移除HashMap中的KeyruleMap.remove('ruleA');//將移除后的HashMap重新存入redis的hashmap中jedisCluster.hmset(key, ruleMap);//問題來了,這里通過HashKey從redis中取出HashMap時發現ruleA的key的內容還在存在Map<String, String> newRuleMap = jedisCluster.hgetAll('HashKey');System.out.println(newRuleMap);解決方案

通過hdel命令刪除指定HashMap中指定Key:

使用HDEL key field [field …]:

刪除哈希表 key 中的一個或多個指定域,不存在的域將被忽略

示例代碼

//通過redis中針對hashmap移除指定key函數進行處理jedisCluster.hdel('HashKey', 'ruleA');原理

redis中的散列表在進行存儲值時,只會將客戶端上送的hashmap中存在的key在redis中查找對應的key值進行覆蓋重寫,

至于通過Java代碼對該HashMap進行的remove操作在redis中并不會感知到,

所以在通過HMSET函數進行操作時,redis只會找到key覆寫,不會執行del操作,實際針對redis中的hashmap key的刪除只能通過HDEL函數

示例代碼

我們通過Jedis包中 redis.clients.jedis.BinaryClient.hmset方法的源碼來看,最終發往redis服務器執行的命令時的操作

//實際上在發往redis執行命令前,會將HashMap中的轉成字節數據集合public void hmset(byte[] key, Map<byte[], byte[]> hash) { List<byte[]> params = new ArrayList(); params.add(key); Iterator i$ = hash.entrySet().iterator(); while(i$.hasNext()) { Entry<byte[], byte[]> entry = (Entry)i$.next(); params.add(entry.getKey()); params.add(entry.getValue()); } this.sendCommand(Command.HMSET, (byte[][])params.toArray(new byte[params.size()][]));}

實際對應的redis命令即為:

redis 127.0.0.1:6379> HSET HashKey 'ruleA' 'valA' 'ruleB' 'valB'

補充:redis整體刪除,整個hash刪除,批量刪除,單個刪除,正則刪除

對于redis的hash數據結構的刪除:

pool = redis.ConnectionPool(host=’127.0.0.1’,port=6381,db=0,decode_responses=True)r = redis.Redis(connection_pool=pool)pool = redis.ConnectionPool(host=’127.0.0.1’,port=6381,decode_responses=True)r = redis.Redis(connection_pool=pool)r = redis.Redis(host=’127.0.0.1’,port=6381,db=0,decode_responses=True)

以上三種連接數據庫的方式都測試過有效,主要是后面的decode_responses參數可以省去二進制寫入。

整個數據庫的刪除:

r.fushall()批量刪除hash整體的大字典:

r.delete(*r.keys(’^test’)) #表示刪除以test開頭的hash大字典。r.delete(key1,key2)#表示刪除key1字典和key2字典整個hash字典刪除:

r.delete(dict_name)批量刪除具體某個hash字典的多個鍵:

r.hdel(dict_name,key1)

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持好吧啦網。如有錯誤或未考慮完全的地方,望不吝賜教。

標簽: Java
相關文章:
主站蜘蛛池模板: 日韩亚洲人成在线综合日本 | 黄色片视频国产 | 久青草国产在线 | 一级做a爰片欧美一区 | 欧美激情综合亚洲一二区 | 成人做爰视频在线观看视频 | 久久vs国产综合色大全 | 成人久久久观看免费毛片 | 欧美精品亚洲一区二区在线播放 | 日本高清二三四本2021 | 欧美精品啪啪 | 久久er这里只有精品 | 国产成人精品免费视频大全软件 | 欧美一级片在线视频 | 91啦在线观看 | 视频一二三区 | 黄色影视在线观看 | 国产福利视频微拍在线 | 最新国产精品亚洲 | 欧美在线一级视频 | 日本精品在线观看视频 | 激情在线日韩视频免费 | 亚洲精品 国产 日韩 | 国产区免费在线观看 | 一区二区三区无码高清视频 | 色悠久久久久综合欧美99 | 成年人黄视频在线观看 | 亚洲福利在线观看 | 91精品国产免费久久久久久 | 国产精品久久成人影院 | 久久亚洲国产成人影院 | www成人免费观看网站 | 欧美一区二区三区在线 | 免费爱爱视频网站 | 欧美日韩性视频在线 | 免费亚洲一区 | 香蕉久久夜色精品国产尤物 | 女人黄色大片子色 | 国产成人精品视频一区二区不卡 | 国产福利91精品一区二区 | 久久久高清国产999尤物 |