redis的hash類型操作方法
簡(jiǎn)介
Hash是一個(gè)鍵值對(duì)的集合。Hash 是一個(gè) String 類型的 field(字段) 和 value(值) 的映射表,hash 特別適合用于存儲(chǔ)對(duì)象。
Hash存儲(chǔ)結(jié)構(gòu)優(yōu)化:
如果field數(shù)量較少,存儲(chǔ)結(jié)構(gòu)優(yōu)化為類數(shù)組結(jié)構(gòu)
如果field數(shù)量較多,存儲(chǔ)結(jié)構(gòu)使用HashMap結(jié)構(gòu)
原生操作
增加/修改【key的field的value】
增加/修改
hset key field value
如果哈希表不存在,一個(gè)新的哈希表被創(chuàng)建并進(jìn)行 HSET 操作。 如果字段已經(jīng)存在于哈希表中,舊值將被重寫
增加(多個(gè))
hmset key field1 value1 field2 value2……
增加(鎖,只有field不存在時(shí)生效)
hsetnx key field value
如果哈希表不存在,一個(gè)新的哈希表被創(chuàng)建并進(jìn)行 hsetnx 操作。
如果字段已經(jīng)存在于哈希表中,操作無效。
如果 key 不存在,一個(gè)新哈希表被創(chuàng)建并執(zhí)行 hsetnx 命令
查詢
查詢一個(gè)(key的field的value)
hget key field
查詢所有field
hkeys key
查詢所有value
hvals key
刪除【key的field】
刪除一個(gè)或多個(gè)
hdel key field1 field2……
不存在的字段將被忽略
方法 判斷指定key中是否存在field
hexists key field
如果哈希表含有給定字段,返回 1 。 如果哈希表不含有給定字段,或 key 不存在,返回 0
為哈希表key中的field字段的值加上增量increment(數(shù)字)
hincrby key field increment
增量也可以為負(fù)數(shù),相當(dāng)于對(duì)指定字段進(jìn)行減法操作 如果哈希表的 key 不存在,一個(gè)新的哈希表被創(chuàng)建并執(zhí)行 hincrby 命令 如果指定的字段不存在,那么在執(zhí)行命令前,字段的值被初始化為 0 對(duì)一個(gè)儲(chǔ)存字符串值的字段執(zhí)行 hincrby 命令將造成一個(gè)錯(cuò)誤
java操作redis的hash類型
【boundHashOps()】 增加 往指定key中存儲(chǔ) 鍵值
redisTemplate.boundHashOps("demo").put("1",1);
批量存儲(chǔ)到指定key中
Map<String,String> map = new HashMap<>(); map.put("3","zhangsan"); map.put("4","lisi"); redisTemplate.boundHashOps("demo").putAll(map);
根據(jù)指定key判斷鍵是否存在,存在返回false不新增,不存在則新增鍵值對(duì)返回true
System.out.println(redisTemplate.boundHashOps("demo").putIfAbsent("7", 5));
修改
重新命名當(dāng)前key的名稱
redisTemplate.boundHashOps(key).rename("test");
查詢
根據(jù)指定key中得鍵取出值
System.out.println(redisTemplate.boundHashOps("demo").get("1"));
根據(jù)指定key取出所有鍵
Set<Object> keys = redisTemplate.boundHashOps("demo").keys();
獲取指定key中所有鍵值對(duì)得值
List<Object> values = redisTemplate.boundHashOps("demo").values(); System.out.println(values);
根據(jù)指定key取出全部鍵值對(duì)
Map<Object, Object> entries = redisTemplate.boundHashOps("demo").entries();
刪除
根據(jù)指定key中得鍵刪除
redisTemplate.boundHashOps("demo").delete("1");
方法
設(shè)置key得到期時(shí)間 TimeUnit 設(shè)置時(shí)間類型(時(shí)、分、秒...)
redisTemplate.boundHashOps("demo").expire(100000, TimeUnit.MILLISECONDS);
獲取當(dāng)前key過期時(shí)間
System.out.println(redisTemplate.boundHashOps("demo").getExpire());
獲取指定key得元素長(zhǎng)度
Long size = redisTemplate.boundHashOps("demo").size();
判斷指定key中是否存在該鍵
System.out.println(redisTemplate.boundHashOps("demo").hasKey("1"));
獲取當(dāng)前key的存儲(chǔ)方式
System.out.println(redisTemplate.boundHashOps("demo").getType());
到此這篇關(guān)于redis的hash類型的詳解的文章就介紹到這了,更多相關(guān)redis的hash類型內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Redis基本數(shù)據(jù)類型哈希Hash常用操作命令
這篇文章主要為大家介紹了Redis基本數(shù)據(jù)類型哈希Hash常用操作,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-05-05Redisson分布式限流的實(shí)現(xiàn)原理解析
這篇文章主要為大家介紹了Redisson分布式限流的實(shí)現(xiàn)原理解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-02-02詳解redis大幅性能提升之使用管道(PipeLine)和批量(Batch)操作
這篇文章主要介紹了詳解redis大幅性能提升之使用管道(PipeLine)和批量(Batch)操作 ,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。2016-12-12Redis基本數(shù)據(jù)類型Zset有序集合常用操作
這篇文章主要為大家介紹了redis基本數(shù)據(jù)類型Zset有序集合常用操作,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-05-05Web-ssrfme:redis 未授權(quán)訪問攻擊的問題解決
本文主要介紹了Web-ssrfme:redis 未授權(quán)訪問攻擊的問題解決,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2025-04-04Redis高并發(fā)緩存設(shè)計(jì)問題與性能優(yōu)化
本文詳細(xì)介紹了Redis緩存設(shè)計(jì)中常見的問題及解決方案,包括緩存穿透、緩存失效(擊穿)、緩存雪崩、熱點(diǎn)緩存key重建優(yōu)化、緩存與數(shù)據(jù)庫(kù)雙寫不一致以及開發(fā)規(guī)范與性能優(yōu)化,感興趣的可以了解一下2024-11-11