步骤

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. ❤️置顶帖❤️这是一篇置顶博客!

    置顶博客干点啥?推荐一下我自己,以及身边优秀的人吧~ 1.笔者公众号:知行研究院(ID:ZXAcademy),欢迎关注^_^ 微信扫一扫,关注公众号 2.武汉理工大学计算机专业课程汇总: https: ...

  2. 【置顶帖】关于博主/关于博客/博客大事记

    关于博主 ● 信息安全从业者 ● 注册信息安全认证专家资质 ● CSDN认证业界专家.安全博客专家 .全栈安全领域优质创作者 ● 中国信通院[2021-GOLF+ IT新治理领导力论坛]演讲嘉宾 ● ...

  3. 微信内置浏览器使用DevTools实现自动顶帖脚本

    接<豆瓣自动顶帖机器人JS脚本>这篇,对于仅能在微信内置浏览器中正常打开或使用的网页,不能使用开发者工具,不能使用Tampermonkey插件.例如微赞的广州租房论坛微信版http://w ...

  4. 阅读目录(置顶)(长期科技领域知识)

    第一期:适用于数据项目的7种强大的开源工具 第二期:四种正确的微服务部署方式 第三期:开源和赚钱何去何从 第四期:Web前端和Java开发哪个薪资更高,发展前景更好? 第五期:干货总结:中级前端工程师 ...

  5. SpringBoot cache-control 配置静态资源缓存 (以及其中的思考经历)

    昨天在部署项目时遇到一个问题,因为服务要部署到外网使用,中间经过了较多的网络传输限制,而且要加载arcgis等较大的文件,所以在部署后,发现页面loading需要很长时间,而且刷新也要重新从服务器下载 ...

  6. java+cache使用方法_java相关:springboot使用GuavaCache做简单缓存处理的方法

    java相关:springboot使用GuavaCache做简单缓存处理的方法 发布于 2020-3-29| 复制链接 摘记: 问题背景 实际项目碰到一个上游服务商接口有10秒的查询限制(同个账号). ...

  7. 16课:关于Springboot和@Cacheable注解拉去缓存,@CacheEvict清空缓存的原理

    16课:关于Springboot和@Cacheable注解拉去缓存,@CacheEvict清空缓存的原理 简介 代码展示 1.pox.xml 2.application.properties文件 3. ...

  8. listView点击置顶操作

    这是很久之前学过的内容,学过之后在开发一个wifi连接功能的时候,点击对应item的WiFi进行连接,能连接成功,功能都能实现,但是遇到了前端ui方面的问题,后来没时间就没做了,listView点击i ...

  9. Zabbix5系列-监控SpringBoot内置的Tomcat和JVM(二十一)

    Zabbix5系列-监控SpringBoot内置的Tomcat和JVM 一.参考 二.环境 三.开启JMX 四.配置模板 五.测试 六.修改后的模板参考 6.1 Apache Tomcat JMX模板 ...

最新文章

  1. DELL备份恢复系统的小工具 Dell DataSafe Local Backup
  2. 易语言读写配置项ini文件
  3. 电子商务时间戳服务解决方案
  4. uid(组件id) = userId + appId (android多用户)
  5. jQuery基本使用
  6. mysql语句数据库_数据库的Mysql语句
  7. spring处理循环依赖时序图_spring5源码系列--循环依赖 之 手写代码模拟spring循环依赖...
  8. node Express 框架
  9. python的优点有哪些-python的优点和缺点是什么?
  10. 2020 携程 面经
  11. curl 断点下载 wget下载
  12. C# 中的Finalize 和Dispose(bool disposing)和 Dispose()
  13. Idea标记(或书签)功能
  14. python识别火车票二维码_python实现12306查询火车票
  15. 小学生计算机按键分布图,小学生计算器上各种按键的作用
  16. python中shelf对象_shelve -- 用来持久化任意的Python对象
  17. excel表格末尾添加一行_在EXCEL表格中,快速插入多行、多列的技巧
  18. 2509-Druid监控功能的深入使用与配置-基于SpringBoot-完全使用 .properties配置文件
  19. window10 卸载输入法
  20. linux ps swn,Linux操作的基本概念与命令(转)

热门文章

  1. 有关edem仿真中,旋转与平移的相关问题。
  2. 5年亏炒股指亏1600万,最后才知道Q群里除了他全是骗子
  3. 有木有!!!有木有!!!
  4. Linux systemctl 详解自定义 systemd unit
  5. 有理函数积分的一般解法
  6. unity控制2D物体移动,2D碰撞器Box Collider却没有效果
  7. Mybatis如何批量插入数据?
  8. python 营销软件_最近超火的赚钱工具Python到底怎么用?
  9. html audio 播放amr,vue.js实现audio播放amr格式音频
  10. 机械臂速成小指南(十五):线性规划