Redis+SpringBoot实现置顶帖缓存
步骤
1.通过服务器或者本地虚拟机开通redis缓存服务。
2.项目映入redis和连接池依赖。
3.在项目的配置文件中配置redis,例如,ip地址,端口号,和database和连接池属性。
4.定义redis配置类,字符串序列化。
@EnableCaching
@Configuration
public class RedisConfig {@Beanpublic RedisTemplate<String, Object> redisTemplate(LettuceConnectionFactory connectionFactory) {RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();//字符传序列化。redisTemplate.setKeySerializer(new StringRedisSerializer());redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());//hash的Key也要string化redisTemplate.setHashKeySerializer(new StringRedisSerializer());redisTemplate.setHashValueSerializer(new GenericJackson2JsonRedisSerializer());redisTemplate.setConnectionFactory(connectionFactory);return redisTemplate;}
}
5.写redis工具类。
6.重写service业务层逻辑,如下所示。
判断redis中有无对应Key,有则获取;没有就从数据库找,再存放于缓存中即可。
这里要注意lrange方法查到的list里面存的还是list需要调用get方法才能拿到合适的list数据。
public PaginationDTO list(String search, String tag, String sort, Integer page, Integer size) {//先查置顶的,再查非置顶的,然后在分页。if (StringUtils.isNotBlank(search)) {//通过空格分割String[] tags = StringUtils.split(search, ' ');search = Arrays.stream(tags).collect(Collectors.joining("|"));}PaginationDTO paginationDTO = new PaginationDTO();//通过拓展方法带search查找QuestionQueryDTO questionQueryDTO = new QuestionQueryDTO();questionQueryDTO.setSearch(search);questionQueryDTO.setTag(tag);//sortfor (SortEnum sortEnum : SortEnum.values()) {if (sortEnum.name().toLowerCase().equals(sort)) {questionQueryDTO.setSort(sort);break;}}//查找所有问题List<QuestionDTO> questionDTOList = new ArrayList<>();//缓存int toppingSize = 0;Boolean topKey = redisService.hasKey("topKey");if (topKey == false) {//查找置顶数据List<Question> toppings = questionExtMapper.selectTopping();if (toppings != null && toppings.size() != 0) {List<QuestionDTO> questionDTOS = new ArrayList<>();for (Question topping : toppings) {User user = userMapper.selectByPrimaryKey(topping.getCreator());QuestionDTO questionDTO = new QuestionDTO();BeanUtils.copyProperties(topping, questionDTO);questionDTO.setUser(user);questionDTOS.add(questionDTO);}redisService.lPush("topKey", questionDTOS, 60);//秒toppingSize = questionDTOS.size();if (page == 1) {questionDTOList.addAll(questionDTOS);}}} else {List<Object> topKeyLists = redisService.lRange("topKey", 0, -1);List<QuestionDTO> list = (List<QuestionDTO>) topKeyLists.get(0);toppingSize = list.size();if (page == 1) {questionDTOList.addAll(list);}}//查找非置顶个数+置顶个数Integer totalCount = questionExtMapper.countBySearch(questionQueryDTO) + toppingSize;if (totalCount % size == 0) {totalPage = totalCount / size;} else if (totalCount < size) {totalPage = 1;} else {totalPage = totalCount / size + 1;}if (page < 1) {page = 1;}if (page > totalPage) {page = totalPage;}paginationDTO.setPagination(totalPage, page);//加分页,offset不能为负Integer offset = page < 1 ? 0 : size * (page - 1);questionQueryDTO.setOffset(offset);questionQueryDTO.setSize(size);//数据库List<Question> questions = questionExtMapper.selectBySearch(questionQueryDTO);for (Question question : questions) {User user = userMapper.selectByPrimaryKey(question.getCreator());QuestionDTO questionDTO = new QuestionDTO();//利用工具类,把前者赋值到后者BeanUtils.copyProperties(question, questionDTO);questionDTO.setDescription("");questionDTO.setUser(user);questionDTOList.add(questionDTO);}//重新把值赋进去paginationDTO.setData(questionDTOList);return paginationDTO;}
Redis+SpringBoot实现置顶帖缓存相关推荐
- ❤️置顶帖❤️这是一篇置顶博客!
置顶博客干点啥?推荐一下我自己,以及身边优秀的人吧~ 1.笔者公众号:知行研究院(ID:ZXAcademy),欢迎关注^_^ 微信扫一扫,关注公众号 2.武汉理工大学计算机专业课程汇总: https: ...
- 【置顶帖】关于博主/关于博客/博客大事记
关于博主 ● 信息安全从业者 ● 注册信息安全认证专家资质 ● CSDN认证业界专家.安全博客专家 .全栈安全领域优质创作者 ● 中国信通院[2021-GOLF+ IT新治理领导力论坛]演讲嘉宾 ● ...
- 微信内置浏览器使用DevTools实现自动顶帖脚本
接<豆瓣自动顶帖机器人JS脚本>这篇,对于仅能在微信内置浏览器中正常打开或使用的网页,不能使用开发者工具,不能使用Tampermonkey插件.例如微赞的广州租房论坛微信版http://w ...
- 阅读目录(置顶)(长期科技领域知识)
第一期:适用于数据项目的7种强大的开源工具 第二期:四种正确的微服务部署方式 第三期:开源和赚钱何去何从 第四期:Web前端和Java开发哪个薪资更高,发展前景更好? 第五期:干货总结:中级前端工程师 ...
- SpringBoot cache-control 配置静态资源缓存 (以及其中的思考经历)
昨天在部署项目时遇到一个问题,因为服务要部署到外网使用,中间经过了较多的网络传输限制,而且要加载arcgis等较大的文件,所以在部署后,发现页面loading需要很长时间,而且刷新也要重新从服务器下载 ...
- java+cache使用方法_java相关:springboot使用GuavaCache做简单缓存处理的方法
java相关:springboot使用GuavaCache做简单缓存处理的方法 发布于 2020-3-29| 复制链接 摘记: 问题背景 实际项目碰到一个上游服务商接口有10秒的查询限制(同个账号). ...
- 16课:关于Springboot和@Cacheable注解拉去缓存,@CacheEvict清空缓存的原理
16课:关于Springboot和@Cacheable注解拉去缓存,@CacheEvict清空缓存的原理 简介 代码展示 1.pox.xml 2.application.properties文件 3. ...
- listView点击置顶操作
这是很久之前学过的内容,学过之后在开发一个wifi连接功能的时候,点击对应item的WiFi进行连接,能连接成功,功能都能实现,但是遇到了前端ui方面的问题,后来没时间就没做了,listView点击i ...
- Zabbix5系列-监控SpringBoot内置的Tomcat和JVM(二十一)
Zabbix5系列-监控SpringBoot内置的Tomcat和JVM 一.参考 二.环境 三.开启JMX 四.配置模板 五.测试 六.修改后的模板参考 6.1 Apache Tomcat JMX模板 ...
最新文章
- DELL备份恢复系统的小工具 Dell DataSafe Local Backup
- 易语言读写配置项ini文件
- 电子商务时间戳服务解决方案
- uid(组件id) = userId + appId (android多用户)
- jQuery基本使用
- mysql语句数据库_数据库的Mysql语句
- spring处理循环依赖时序图_spring5源码系列--循环依赖 之 手写代码模拟spring循环依赖...
- node Express 框架
- python的优点有哪些-python的优点和缺点是什么?
- 2020 携程 面经
- curl 断点下载 wget下载
- C# 中的Finalize 和Dispose(bool disposing)和 Dispose()
- Idea标记(或书签)功能
- python识别火车票二维码_python实现12306查询火车票
- 小学生计算机按键分布图,小学生计算器上各种按键的作用
- python中shelf对象_shelve -- 用来持久化任意的Python对象
- excel表格末尾添加一行_在EXCEL表格中,快速插入多行、多列的技巧
- 2509-Druid监控功能的深入使用与配置-基于SpringBoot-完全使用 .properties配置文件
- window10 卸载输入法
- linux ps swn,Linux操作的基本概念与命令(转)