java實現(xiàn)RedisTemplate操作哈希數(shù)據(jù)
概述
Redis是一個開源的內(nèi)存數(shù)據(jù)結(jié)構(gòu)存儲系統(tǒng),它可以用作數(shù)據(jù)庫、緩存和消息代理。Redis 的核心是提供數(shù)據(jù)類型的集合,在Redis中,有多種數(shù)據(jù)結(jié)構(gòu),如字符串、列表、集合、有序集合和哈希表,它可以幫助解決從緩存到隊列再到事件處理的各種問題。
RedisTemplate是Spring Data Redis提供的一個用于操作Redis的模板類,它提供了豐富的方法來操作Redis中的哈希數(shù)據(jù)。
常用方法
本文來介紹下一些常用的使用RedisTemplate操作哈希數(shù)據(jù)的方法及簡單示例。
添加哈希數(shù)據(jù)
向Redis中的哈希表中添加數(shù)據(jù),可以使用opsForHash()
方法獲取哈希操作對象,然后調(diào)用putAll()
方法。
示例:
@Resource private RedisTemplate<String, Object> redisTemplate; public void addHashData(String key, Map<String, Object> hashData) { redisTemplate.opsForHash().putAll(key, hashData); Map newMap = new HashMap(); newMap.put("map3","map3-3"); newMap.put("map5","map5-5"); redisTemplate.opsForHash().putAll("hashValue",newMap); map = redisTemplate.opsForHash().entries("hashValue"); System.out.println("通過putAll(H key, Map<? extends HK,? extends HV> m)方法以map集合的形式添加鍵值對:" + map); }
添加hashMap值
向Redis中的哈希表中添加hashMap值,可以使用opsForHash()
方法獲取哈希操作對象,然后調(diào)用put(H key, HK hashKey, HV value)
方法。
示例:
@Resource private RedisTemplate<String, Object> redisTemplate; public void addHashMapValue(String key, String hashKey, String value) { redisTemplate.opsForHash().put("hashValue","map1","map1-1"); redisTemplate.opsForHash().put("hashValue","map2","map2-2"); redisTemplate.opsForHash().put(key, hashKey, value); }
判斷hashkey
Redis中的哈希表判斷hashkey是否存在,可以使用putIfAbsent(H key, HK hashKey, HV value)
方法判斷hashkey是否存在,如果hashKey存在,啥也不操作,如果hashKey不存在,則新增。
示例:
redisTemplate.opsForHash().putIfAbsent("hashValue","map6","map6-6"); map = redisTemplate.opsForHash().entries("hashValue"); System.out.println("通過putIfAbsent(H key, HK hashKey, HV value)方法添加不存在于變量中的鍵值對:" + map);
獲取哈希數(shù)據(jù)
從Redis中的哈希表中獲取數(shù)據(jù),可以使用opsForHash()
方法獲取哈希操作對象,然后調(diào)用entries()
方法。
示例:
public Map<Object, Object> getHashData(String key) { return redisTemplate.opsForHash().entries(key); }
獲取屬性值
從Redis中的哈希表中獲取某個屬性的值,可以使用opsForHash()
方法獲取哈希操作對象,然后調(diào)用get()
方法:
示例:
public Object getHashDataValue(String key, String field) { return redisTemplate.opsForHash().get(key, field); }
獲取hashMap值
獲取指定變量中的hashMap值,通過values(H key)方法獲取變量中的hashMap值
示例:
values(H key) List<Object> hashList = redisTemplate.opsForHash().values("hashValue"); System.out.println("通過values(H key)方法獲取變量中的hashMap值:" + hashList);
獲取鍵值對
通過entries(H key)方法獲取變量中的鍵值對
示例:
entries(H key) Map<Object,Object> map = redisTemplate.opsForHash().entries("hashValue"); System.out.println("通過entries(H key)方法獲取變量中的鍵值對:" + map);
獲取map鍵是否有值
獲取變量中的指定map鍵是否有值,如果存在該map鍵則獲取值,沒有則返回null。
示例:
get(H key, Object hashKey) Object mapValue = redisTemplate.opsForHash().get("hashValue","map1"); System.out.println("通過get(H key, Object hashKey)方法獲取map鍵的值:" + mapValue);
判斷是否有map鍵
通過hasKey(H key, Object hashKey)方法判斷變量中是否存在map鍵
示例:
hasKey(H key, Object hashKey) boolean hashKeyBoolean = redisTemplate.opsForHash().hasKey("hashValue","map3"); System.out.println("通過hasKey(H key, Object hashKey)方法判斷變量中是否存在map鍵:" + hashKeyBoolean);
獲取鍵
通過keys(H key)方法獲取變量中的鍵
示例:
keys(H key) Set<Object> keySet = redisTemplate.opsForHash().keys("hashValue"); System.out.println("通過keys(H key)方法獲取變量中的鍵:" + keySet);
獲取長度
通過size(H key)方法獲取變量的長度
示例:
size(H key) long hashLength = redisTemplate.opsForHash().size("hashValue"); System.out.println("通過size(H key)方法獲取變量的長度:" + hashLength);
集合方式獲取值
通過multiGet(H key, Collection hashKeys)方法以集合的方式獲取變量中的值
示例:
multiGet(H key, Collection<HK> hashKeys) List<Object> list = new ArrayList<Object>(); list.add("map1"); list.add("map2"); List mapValueList = redisTemplate.opsForHash().multiGet("hashValue",list); System.out.println("通過multiGet(H key, Collection<HK> hashKeys)方法以集合的方式獲取變量中的值:"+mapValueList);
匹配獲取鍵值對
匹配獲取鍵值對,通過scan(H key, ScanOptions options)方法獲取匹配鍵值對,ScanOptions.NONE為獲取全部鍵對,ScanOptions.scanOptions().match(“map1”).build() 匹配獲取鍵位map1的鍵值對,不能模糊匹配。
示例:
scan(H key, ScanOptions options) Cursor<Map.Entry<Object,Object>> cursor = redisTemplate.opsForHash().scan("hashValue",ScanOptions.scanOptions().match("map1").build()); //Cursor<Map.Entry<Object,Object>> cursor = redisTemplate.opsForHash().scan("hashValue",ScanOptions.NONE); while (cursor.hasNext()){ Map.Entry<Object,Object> entry = cursor.next(); System.out.println("通過scan(H key, ScanOptions options)方法獲取匹配鍵值對:" + entry.getKey() + "---->" + entry.getValue()); }
自增
以double值大小自增。
通過increment(H key, HK hashKey, double delta)方法使變量中的鍵以值的大小進(jìn)行自增長
示例:
increment(H key, HK hashKey, double delta) double hashIncDouble = redisTemplate.opsForHash().increment("hashInc","map1",3); System.out.println("通過increment(H key, HK hashKey, double delta)方法使變量中的鍵以值的大小進(jìn)行自增長:" + hashIncDouble);
以long值大小自增。
通過increment(H key, HK hashKey, long delta)方法使變量中的鍵以值的大小進(jìn)行自增長
示例:
increment(H key, HK hashKey, long delta) long hashIncLong = redisTemplate.opsForHash().increment("hashInc","map2",6); System.out.println("通過increment(H key, HK hashKey, long delta)方法使變量中的鍵以值的大小進(jìn)行自增長:" + hashIncLong);
修改刪除
修改哈希數(shù)據(jù)中的某個屬性值
修改Redis中的哈希表中某個屬性的值,可以使用opsForHash()
方法獲取哈希操作對象,然后調(diào)用put()
方法。
示例:
public void updateHashDataValue(String key, String field, Object newValue) { redisTemplate.opsForHash().put(key, field, newValue); }
刪除哈希數(shù)據(jù)中的某個屬性值
從Redis中的哈希表中刪除某個屬性的值,可以使用opsForHash()
方法獲取哈希操作對象,然后調(diào)用delete()
方法。
示例:
public void deleteHashDataValue(String key, String field) { redisTemplate.opsForHash().delete(key, field); }
刪除哈希表
要刪除Redis中的整個哈希表,可以使用delete()
方法。示例:
public void deleteHashTable(String key) { redisTemplate.delete(key); delete(H key, Object... hashKeys) 刪除變量中的鍵值對,可以傳入多個參數(shù),刪除多個鍵值對。 redisTemplate.opsForHash().delete("hashValue","map1","map2"); map = redisTemplate.opsForHash().entries("hashValue"); System.out.println("通過delete(H key, Object... hashKeys)方法刪除變量中的鍵值對后剩余的:" + map); }
到此這篇關(guān)于java實現(xiàn)RedisTemplate操作哈希數(shù)據(jù)的文章就介紹到這了,更多相關(guān)RedisTemplate操作哈希數(shù)據(jù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
spring整合redis消息監(jiān)聽通知使用的實現(xiàn)示例
在電商系統(tǒng)中,秒殺,搶購,紅包優(yōu)惠卷等操作,一般都會設(shè)置時間限制,本文主要介紹了spring整合redis消息監(jiān)聽通知使用,具有一定的參考價值,感興趣的可以了解一下2021-12-12詳解基于Spring Cloud幾行配置完成單點登錄開發(fā)
這篇文章主要介紹了詳解基于Spring Cloud幾行配置完成單點登錄開發(fā),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-02-02maven如何動態(tài)統(tǒng)一修改版本號的方法步驟
這篇文章主要介紹了maven如何動態(tài)統(tǒng)一修改版本號的方法步驟,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12Java日常練習(xí)題,每天進(jìn)步一點點(56)
下面小編就為大家?guī)硪黄狫ava基礎(chǔ)的幾道練習(xí)題(分享)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧,希望可以幫到你2021-08-08