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
相关推荐
想睡觉 . 我也想睡觉 .7 分钟前
【C++算法】1.【模板】前缀和
开发语言·c++·算法
mit6.82410 分钟前
[数据结构] LRU Cache | List&Map 实现
算法
Schwertlilien1 小时前
图像处理-Ch1-数字图像基础
图像处理·人工智能·算法
程序员一诺1 小时前
【深度学习】嘿马深度学习笔记第10篇:卷积神经网络,学习目标【附代码文档】
人工智能·python·深度学习·算法
刚学HTML2 小时前
leetcode 05 回文字符串
算法·leetcode
AC使者3 小时前
#B1630. 数字走向4
算法
冠位观测者3 小时前
【Leetcode 每日一题】2545. 根据第 K 场考试的分数排序
数据结构·算法·leetcode
古希腊掌管学习的神4 小时前
[搜广推]王树森推荐系统笔记——曝光过滤 & Bloom Filter
算法·推荐算法
qystca4 小时前
洛谷 P1706 全排列问题 C语言
算法
浊酒南街4 小时前
决策树(理论知识1)
算法·决策树·机器学习