当前位置: 代码迷 >> 综合 >> StringRedisTemplate常用hash操作
  详细解决方案

StringRedisTemplate常用hash操作

热度:93   发布时间:2023-10-19 01:58:04.0

 

基础model类:

class Student{

private Long id;

private String name;

private Long classId;

 

Student(Long id ,String name,Long classId){

  this.id = id;

  this.name = name;

  this.classId = classId;

}

}

1.将map放到redis中,结构为 redis常量Key(key+"_"+班级id),hash-key,hash-value

//注入redis

@Resource(name = "redisTemplate")
protected StringRedisTemplate redisTemplate;

List<Student> studentList = new ArrayList<>();

Student s1 = new Student(1,"张三",1);

Student s2 = new Student(2,"李四",1);

Student s3 = new Student(3,"王五",1);

studentList.add(s1);

studentList.add(s2);

studentList.add(s3);
//list转Map,redis中的hash结构key-value为String-String

Map<String, String> map = studentList.stream().collect(Collectors.toMap(student -> student.getId().toString(), student -> JSON.toJSONString(student)));

redisTemplate.opsForHash().putAll(RedisKeysConstants.TEST_STUDENT_HS+“_"+1, map);

 

2.根据redis模糊key查询,id为学生id(效率低不建议使用,建议根据key和hashKey获取,或者根据key获取所有值.values方法)

Set<String> keys = redisTemplate.keys(RedisKeysConstants.TEST_STUDENT_HS + "_*");
for (String key : keys) {if (redisTemplate.opsForHash().get(key, String.valueOf(id)) != null) {return JSONObject.parseObject(String.valueOf(redisTemplate.opsForHash().get(key, String.valueOf(id))), Student.class);}
}

3.根据key、hk删除

redisTemplate.opsForHash().delete(RedisKeysConstants.TEST_STUDENT_HS + "_" + classId, String.valueOf(id));

4.根据key获取所有值,获取指定班级下的所有学生List

List<Object> studentListObj = redisTemplate.opsForHash().values(RedisKeysConstants.TEST_STUDENT_HS + "_" + classId);
if (studentListObj == null){return;
}
Object objTemp = studentListObj;
List<Student> studentList = JSONArray.parseArray(objTemp.toString(), Student.class);

5.根据key获取所有的hk

Set<String> hashKeys = redisTemplate.opsForHash().keys(resultKey);

6.使变量中的键以double/long的方式进行自增

Long increment(H key, HK hashKey, long delta);

Double increment(H key, HK hashKey, double delta);

7.以集合中的数据获取变量中的值,减少redis连接,提高性能

比如:List<HV> multiGet(H key, Collection<HK> hashKeys);

List<String> studentIds = new ArrayList<>();

studentIds.add(1);

studentIds.add(2);

List<String> jsonList = redisTemplate.opsForHash().multiGet(RedisKeysConstants.TEST_STUDENT_HS+"_"+classId,studentIds);

if (!CollectionUtils.isEmpty(studentIds)){

       List<Student> studentList = studentIds.stream.map(e -> JSON.parseObject(e,Student.class)).collect(Collectos.toList());

}

8.删除

redisTemplate.opsForHash().delete