基础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-StringMap<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