RedisTemplateAPI:Hash

文章目录

⛄介绍

Hash类型,也叫散列,其value是一个无序字典,类似于Java中的 HashMap 结构。

String 结构是将对象序列化为JSON字符串后存储,当需要修改对象某个字段时很不方便:

key value
snow:user:1 {"id":1, "name": "Snow", "age": 18}
snow:product:1 {"id":1, "name": "Apple", "price": 9999}

Hash结构可以将对象中的每个字段独立存储,可以针对单个字段做CRUD:

⛄命令

Hash 类型的常见命令🌈🌈

HSET key field value:添加或者修改 hash 类型 key 的 field 的值

HGET key field:获取一个hash类型key的field的值

HMSET:批量添加多个hash类型key的field的值

HMGET:批量获取多个hash类型key的field的值

HGETALL:获取一个hash类型的key中的所有的field和value

HKEYS:获取一个hash类型的key中的所有的field

HVALS:获取一个hash类型的key中的所有的value

HINCRBY:让一个hash类型key的字段值自增并指定步长

HSETNX:添加一个hash类型的key的field值,前提是这个field不存在,否则不执行

⛄RedisTemplate API

❄️❄️添加缓存

java 复制代码
//1、通过redisTemplate设置值
redisTemplate.boundHashOps("HashKey").put("SmallKey", "HashVaue");

//2、通过BoundValueOperations设置值
BoundHashOperations hashKey = redisTemplate.boundHashOps("HashKey");
hashKey.put("SmallKey", "HashVaue");

//3、通过ValueOperations设置值
HashOperations hashOps = redisTemplate.opsForHash();
hashOps.put("HashKey", "SmallKey", "HashVaue");

❄️❄️设置过期时间(单独设置)

java 复制代码
HashMap<String, String> hashMap = new HashMap<>();
redisTemplate.boundHashOps("HashKey").putAll(hashMap );

注意:只能给大 KEY 设置过期时间, 小 KEY 不能拥有独立的过期时间.

❄️❄️添加一个Map集合

java 复制代码
HashMap<String, String> hashMap = new HashMap<>();
redisTemplate.boundHashOps("HashKey").putAll(hashMap );

❄️❄️提取所有的小key

java 复制代码
//1、通过redisTemplate获取值
Set keys1 = redisTemplate.boundHashOps("HashKey").keys();

//2、通过BoundValueOperations获取值
BoundHashOperations hashKey = redisTemplate.boundHashOps("HashKey");
Set keys2 = hashKey.keys();

//3、通过ValueOperations获取值
HashOperations hashOps = redisTemplate.opsForHash();
Set keys3 = hashOps.keys("HashKey");

❄️❄️提取所有的value值

java 复制代码
//1、通过redisTemplate获取值
List values1 = redisTemplate.boundHashOps("HashKey").values();

//2、通过BoundValueOperations获取值
BoundHashOperations hashKey = redisTemplate.boundHashOps("HashKey");
List values2 = hashKey.values();

//3、通过ValueOperations获取值
HashOperations hashOps = redisTemplate.opsForHash();
List values3 = hashOps.values("HashKey");

❄️❄️根据key提取value值

java 复制代码
//1、通过redisTemplate获取
String value1 = (String) redisTemplate.boundHashOps("HashKey").get("SmallKey");

//2、通过BoundValueOperations获取值
BoundHashOperations hashKey = redisTemplate.boundHashOps("HashKey");
String value2 = (String) hashKey.get("SmallKey");

//3、通过ValueOperations获取值
HashOperations hashOps = redisTemplate.opsForHash();
String value3 = (String) hashOps.get("HashKey", "SmallKey");

❄️❄️获取所有的键值对集合

java 复制代码
//1、通过redisTemplate获取
Map entries = redisTemplate.boundHashOps("HashKey").entries();

//2、通过BoundValueOperations获取值
BoundHashOperations hashKey = redisTemplate.boundHashOps("HashKey");
Map entries1 = hashKey.entries();

//3、通过ValueOperations获取值
HashOperations hashOps = redisTemplate.opsForHash();
Map entries2 = hashOps.entries("HashKey");

❄️❄️删除

java 复制代码
//删除小key
redisTemplate.boundHashOps("HashKey").delete("SmallKey");
//删除大key
redisTemplate.delete("HashKey");

❄️❄️判断Hash中是否含有该值

java 复制代码
Boolean isEmpty = redisTemplate.boundHashOps("HashKey").hasKey("SmallKey");

⛄RedisTemplate API 实战

❄️❄️添加 put / putAll

java 复制代码
//	初始数据:
template.opsForHash().put("redisHash","name","tom");
template.opsForHash().put("redisHash","age",26);
template.opsForHash().put("redisHash","class","6");

Map<String,Object> testMap = new HashMap();
testMap.put("name","jack");
testMap.put("age",27);
testMap.put("class","1");
template.opsForHash().putAll("redisHash1",testMap);

仅当hashKey不存在时才设置散列hashKey的值。

java 复制代码
System.out.println(template.opsForHash().putIfAbsent("redisHash","age",30));
System.out.println(template.opsForHash().putIfAbsent("redisHash","kkk","kkk"));
//结果:
false
true

❄️❄️删除小Key

java 复制代码
template.opsForHash().delete("redisHash","name");

❄️❄️删除大Key

java 复制代码
template.opsForHash().delete("redisHash");

❄️❄️判断key是否存在

java 复制代码
template.opsForHash().hasKey("redisHash","age")

❄️❄️获取

java 复制代码
template.opsForHash().get("redisHash","age")

❄️❄️增加散列hashKey的值(整型)

java 复制代码
System.out.println(template.opsForHash().get("redisHash","age"));
System.out.println(template.opsForHash().increment("redisHash","age",1));
//	结果:
26
27

❄️❄️获取key所对应的散列表的key

java 复制代码
System.out.println(template.opsForHash().keys("redisHash1"));
//redisHash1所对应的散列表为{class=1, name=jack, age=27}
//结果:[name, class, age]

❄️❄️获取key所对应的散列表的大小个数

java 复制代码
template.opsForHash().size("redisHash1");
//redisHash1所对应的散列表为{class=1, name=jack, age=27}
//结果:3

❄️ ❄️获取整个哈希存储的值

java 复制代码
template.opsForHash().values("redisHash");
//	结果:[tom, 26, 6]

❄️❄️获取整个哈希存储

java 复制代码
template.opsForHash().entries("redisHash");
//	结果:{age=26, class=6, name=tom}

❄️❄️使用Cursor在key的hash中迭代,相当于迭代器。

java 复制代码
Cursor<Map.Entry<Object, Object>> curosr 
	= ops.scan("redisHash", ScanOptions.ScanOptions.NONE);
        while(curosr.hasNext()){
            Map.Entry<Object, Object> entry = curosr.next();
            System.out.println(entry.getKey()+":"+entry.getValue());
        }
//结果:
age:28.1
class:6
kkk:kkk
相关推荐
肥猪猪爸2 小时前
使用卡尔曼滤波器估计pybullet中的机器人位置
数据结构·人工智能·python·算法·机器人·卡尔曼滤波·pybullet
readmancynn2 小时前
二分基本实现
数据结构·算法
萝卜兽编程2 小时前
优先级队列
c++·算法
盼海2 小时前
排序算法(四)--快速排序
数据结构·算法·排序算法
一直学习永不止步2 小时前
LeetCode题练习与总结:最长回文串--409
java·数据结构·算法·leetcode·字符串·贪心·哈希表
Rstln3 小时前
【DP】个人练习-Leetcode-2019. The Score of Students Solving Math Expression
算法·leetcode·职场和发展
芜湖_3 小时前
【山大909算法题】2014-T1
算法·c·单链表
珹洺3 小时前
C语言数据结构——详细讲解 双链表
c语言·开发语言·网络·数据结构·c++·算法·leetcode
几窗花鸢4 小时前
力扣面试经典 150(下)
数据结构·c++·算法·leetcode
.Cnn4 小时前
用邻接矩阵实现图的深度优先遍历
c语言·数据结构·算法·深度优先·图论