RedisTemplate模板的使用
时间:2019-11-20
本文章向大家介绍RedisTemplate模板的使用,主要包括RedisTemplate模板的使用使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
一、Map =======boundHashOps
(1)主方法,向redis当中存储Map值
@Resource private RedisTemplate<String, Object> redisTemplate; private static final Long EXPIRED_MINUTE = new Long(1); private static final String HUM_NUM_KEY = "HUM_NUM_"; //统计医师人文医学测评次数 @RequestMapping("/hum_num") public @ResponseBody ApiResult getDoctorHumnum(@RequestParam Map<String,Object> paramMap) { paramMap.put("orgs", this.getOrganization()); Map<String, Object> result = Maps.newHashMap(); String key = this.generateKey(HUM_NUM_KEY, paramMap); if(this.isExistInRedis(key)) { result = this.getMapFromRedis(key); }else { result = doctorInfoService.selectDoctorHumNum(paramMap); this.putMapToRedis(key, result); } return ApiResult.success(result); }
(2)设置Key值
private String generateKey(String prefix, Map<String,Object> paramMap) { return prefix + (paramMap.get("orgUuid")==null?"": paramMap.get("orgUuid").toString()) + "_" + (paramMap.get("cycleId")==null?"": paramMap.get("cycleId").toString()); }
注意: 上面的设置key其实就是一个识别的字符串,将此字符串存储到redis里面作为key
(3)判断key是否存在
private boolean isExistInRedis(String key) { return redisTemplate.boundHashOps(key).size()==0? false: true; // 注意的是因为我们插入的是一个Map所以存储的是Hash的内容。 }
(4)获取redis当中存储的值
private Map<String, Object> getMapFromRedis(String key){ // 这里使用guava工具类中的方法,在一定程度上简化了使用HasMap时创建泛型的错误操作 Map<String, Object> result = Maps.newHashMap(); Map<Object, Object> map = redisTemplate.boundHashOps(key).entries();// 根据key获取Map // 将Map遍历出来 for(Map.Entry<Object, Object> entry: map.entrySet()) { result.put(entry.getKey().toString(), entry.getValue()); } return result; }
(5)将Map中的值插入到Redis当中的方法
private void putMapToRedis(String key, Map<?, ?> map) { redisTemplate.boundHashOps(key).putAll(map); // 设置过期时间,单位是分钟 redisTemplate.boundHashOps(key).expire(EXPIRED_MINUTE, TimeUnit.MINUTES); }
二、Object========boundVauleOps
(1)主方法
@Resource private RedisTemplate<String, Object> redisTemplate; @RequestMapping("/statistic") @ResponseBody public ApiResult statistic(@RequestParam Map<String, Object> paramMap) { String key = this.generateKey(PERIDIC_STATISTIC_TAB3_KEY, paramMap); StatisticGroupResult statistic = null; if (isExistStringInRedis(key)) { statistic =(StatisticGroupResult) redisTemplate.boundValueOps(key).get(); } else { statistic = operateService.selectStatisticGroup(paramMap); redisTemplate.boundValueOps(key).set(statistic,EXPIRED_MINUTE, TimeUnit.MINUTES); } return ApiResult.success(statistic); }
(2)判断key值是否存在
// 判断字符串类型的Key值是否存在 private boolean isExistStringInRedis(String key) { return redisTemplate.boundValueOps(key).size()==0? false: true; }
注意这里面存在一些内容和Map中使用的是公共的
三、List ============boundListOps
(1)主方法
// 使用的都是String,Object方式 @Resource private RedisTemplate<String, Object> redisTemplate; @RequestMapping("/periodic_list") @ResponseBody public ApiResult periodicList(@RequestParam Map<String,Object> paramMap) { String key = this.generateKey(PERIDIC_TAB3_KEY ,paramMap); List<PeriodicExamineResult> result = new ArrayList<>(); if (isExistListInRedis(key)) { List<Object> list = redisTemplate.boundListOps(key).range(0,-1); for (int i = 0; i < list.size(); i++) { result.add((PeriodicExamineResult) list.get(i)); } }else { result = operateService.queryPeriodicExamineList(paramMap); for (PeriodicExamineResult temp:result) { redisTemplate.boundListOps(key).leftPush(temp); redisTemplate.boundListOps(key).expire(EXPIRED_MINUTE, TimeUnit.MINUTES); } } return ApiResult.success(result); }
(2)判断List当中的值是否存在
// 判断列表类型的key值是否存在 private boolean isExistListInRedis(String key) { return redisTemplate.boundListOps(key).size() == 0 ? false : true; }
四、当RedisTemplate<String,List<....>> redisTemplate;
@Resource private RedisTemplate<String, List<PeriodicExamineResult>> redisTemplate; @org.junit.Test public void Test4() { String key = "LI_HAO"; // 设置key List<PeriodicExamineResult> result = new ArrayList<>(); Map<String,Object> paramMap = Maps.newHashMap(); result = operateService.queryPeriodicExamineList(paramMap); redisTemplate.boundListOps(key).leftPush(result); // 将获取的result放到redis当中 redisTemplate.boundListOps(key).expire(10, TimeUnit.MINUTES);// 设置时间 List<List<PeriodicExamineResult>> list =redisTemplate.boundListOps(key).range(1,-1); //将存储到redis当中的值获取出来 for (PeriodicExamineResult res:list.get(0)) { System.out.println(res.getTotal()); } }
注意: range(1,-1) 表示遍历出列表中的所有内容。因为我们是以List插入的所以也应该以List进行接收。所以使用list.get(0)从而获取到插入的列表
五、如果在使用分页时遇到这个问题,那么我们可以手动的写一个分页,用来承接List
//它所使用的模板同上面使用的一样为: @Resource private RedisTemplate<String, Object> redisTemplate; @RequestMapping("/examine_result_search") @ResponseBody public JQGirdPageResult examineResultSearch(@RequestParam Map<String,Object> paramMap, @ModelAttribute PageBean pageBean) { String key = this.generateKey(PERIDIC_EXAMINE_TAB4_KEY, paramMap); List<PeriodicExaminePageResult> result = new ArrayList<>(); if (isExistListInRedis(key)) { List<Object> list = redisTemplate.boundListOps(key).range(0,-1); for (int i = 0; i < list.size(); i++) { result.add((PeriodicExaminePageResult) list.get(i)); } Long total =Long.valueOf(result.size()); Integer pageSize = pageBean.getRows(); Integer page = pageBean.getPage(); JQGirdPageResult jqGirdPageResult = new JQGirdPageResult(); Integer totalPage = total % pageSize == 0? total.intValue() / pageSize: total.intValue() / pageSize + 1; jqGirdPageResult.setTotal(totalPage == 0? 1: totalPage); jqGirdPageResult.setPage(page); jqGirdPageResult.setRows(result); jqGirdPageResult.setRecords(total); return jqGirdPageResult; } else { result = operateService.queryPeriodicPageList(paramMap); for (PeriodicExaminePageResult temp:result) { redisTemplate.boundListOps(key).leftPush(temp); redisTemplate.boundListOps(key).expire(EXPIRED_MINUTE, TimeUnit.MINUTES); } Long total =Long.valueOf(result.size()); Integer pageSize = pageBean.getRows(); Integer page = pageBean.getPage(); JQGirdPageResult jqGirdPageResult = new JQGirdPageResult(); Integer totalPage = total % pageSize == 0? total.intValue() / pageSize: total.intValue() / pageSize + 1; jqGirdPageResult.setTotal(totalPage == 0? 1: totalPage); jqGirdPageResult.setPage(page); jqGirdPageResult.setRows(result); jqGirdPageResult.setRecords(total); return jqGirdPageResult; } }
原文地址:https://www.cnblogs.com/xinghaonan/p/11900544.html
- python django 学习(一)数据库 目的根据已有BBS建立新的网站步骤
- SpringMVC中@RequestMapping的基本用法
- Java面试系列13
- 【Go 语言 时间相关操作 demo】
- redis AOF保存机制
- 用 TensorFlow 让你的机器人唱首原创给你听
- 不用synchronized块的话如何实现一个原子的i++?
- Oracle升级中的参数补充(r9笔记第2天)
- 【Go 语言,服务器模块】日志系统源码
- wait方法和sleep方法的区别
- Java面试系列10
- python django整理(三)页面基础(仿BBS)
- 高并发场景下的httpClient优化使用
- socket.io 相关:Example: A simple chat server(官方 实例)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法