欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時間:2021年02月27日 09:55:11   作者:goblog  
這篇文章主要介紹了解決Java Redis刪除HashMap中的key踩到的坑,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

現(xiàn)象

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

示例代碼

//通過key取出對應(yīng)的HashMap
Map<String, String> ruleMap = jedisCluster.hgetAll("HashKey");
//通過java中移除HashMap中的Key
ruleMap.remove("ruleA");
//將移除后的HashMap重新存入redis的hashmap中
jedisCluster.hmset(key, ruleMap);
//問題來了,這里通過HashKey從redis中取出HashMap時發(fā)現(xiàn)ruleA的key的內(nèi)容還在存在
Map<String, String> newRuleMap = jedisCluster.hgetAll("HashKey");
System.out.println(newRuleMap);

解決方案

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

使用HDEL key field [field …]:

刪除哈希表 key 中的一個或多個指定域,不存在的域?qū)⒈缓雎?/p>

示例代碼

//通過redis中針對hashmap移除指定key函數(shù)進(jìn)行處理
jedisCluster.hdel("HashKey", "ruleA");

原理

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

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

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

示例代碼

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

//實(shí)際上在發(fā)往redis執(zhí)行命令前,會將HashMap中的轉(zhuǎn)成字節(jié)數(shù)據(jù)集合
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()][]));
}

實(shí)際對應(yīng)的redis命令即為:

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

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

對于redis的hash數(shù)據(jù)結(jié)構(gòu)的刪除:

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)

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

整個數(shù)據(jù)庫的刪除:

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)

以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。如有錯誤或未考慮完全的地方,望不吝賜教。

相關(guān)文章

  • Java利用for循環(huán)輸出空心菱形的實(shí)例代碼

    Java利用for循環(huán)輸出空心菱形的實(shí)例代碼

    這篇文章主要介紹了Java利用for循環(huán)輸出空心菱形的實(shí)例代碼,需要的朋友可以參考下
    2014-02-02
  • Eclipse快捷鍵使用小結(jié)

    Eclipse快捷鍵使用小結(jié)

    Eclipse是用java的同行必不可少的工具,我總結(jié)了一下它的快捷鍵,太常用的ctrl+單擊、ctrl+shift+F、Ctrl+1等我就不細(xì)說了,主要是方便查看。下邊小編就詳細(xì)的為大家介紹一下
    2013-07-07
  • 基于RecyclerChart的KLine繪制Volume實(shí)現(xiàn)詳解

    基于RecyclerChart的KLine繪制Volume實(shí)現(xiàn)詳解

    這篇文章主要為大家介紹了基于RecyclerChart的KLine繪制Volume實(shí)現(xiàn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-03-03
  • Springboot集成Kafka實(shí)現(xiàn)producer和consumer的示例代碼

    Springboot集成Kafka實(shí)現(xiàn)producer和consumer的示例代碼

    這篇文章主要介紹了Springboot集成Kafka實(shí)現(xiàn)producer和consumer的示例代碼,詳細(xì)的介紹了什么是Kafka和安裝Kafka以及在springboot項(xiàng)目中集成kafka收發(fā)message,感興趣的小伙伴們可以參考一下
    2018-05-05
  • java觀感示例分享

    java觀感示例分享

    這篇文章主要介紹了java觀感示例,該實(shí)例查詢并生成了系統(tǒng)中存在觀感對應(yīng)的按鈕并在用戶點(diǎn)擊相應(yīng)按鈕時將窗口的觀感切換到指定的觀感上
    2014-03-03
  • SpringBoot統(tǒng)一api返回風(fēng)格的實(shí)現(xiàn)

    SpringBoot統(tǒng)一api返回風(fēng)格的實(shí)現(xiàn)

    這篇文章主要介紹了SpringBoot統(tǒng)一api返回風(fēng)格的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • Java接入通義千問的簡單方法示例

    Java接入通義千問的簡單方法示例

    ? 通義千問是阿里云開發(fā)的大語言模型(Large language Model )LLM,旨在提供廣泛的知識和普適性,可以理解和回答各領(lǐng)域中的問題,這篇文章主要給大家介紹了關(guān)于Java接入通義千問的簡單方法,需要的朋友可以參考下
    2024-02-02
  • java8 實(shí)現(xiàn)提取集合對象的每個屬性

    java8 實(shí)現(xiàn)提取集合對象的每個屬性

    這篇文章主要介紹了java8 實(shí)現(xiàn)提取集合對象的每個屬性方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-02-02
  • 使用Java編寫導(dǎo)出不確定行數(shù)列數(shù)數(shù)據(jù)的工具類

    使用Java編寫導(dǎo)出不確定行數(shù)列數(shù)數(shù)據(jù)的工具類

    這篇文章主要為大家詳細(xì)介紹了如何使用Java編寫導(dǎo)出不確定行數(shù)列數(shù)數(shù)據(jù)的工具類,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-03-03
  • Java中indexOf函數(shù)示例詳解

    Java中indexOf函數(shù)示例詳解

    Java String 類的 indexOf() 方法返回指定字符串中指定字符或字符串第一次出現(xiàn)的位置,這篇文章主要介紹了Java中indexOf函數(shù)詳解,需要的朋友可以參考下
    2024-01-01

最新評論