一个经常遇到到的场景,就是查询列表数据,列表数据由多张表构成

最简单的查询方法是先写一个查询单条数据的方法,比如这个方法中要查询十张表;

然后一个循环调用查单条的方法,这种逻辑上理解是比较简单的(因为这样不会有比较复杂SQL语句,也不用连表查询,很少会产生慢查询)

但是这里面会产生较多的SQL语句查询,如果一个列表有10条数据,那么产生的SQL查询语句就是 10*10条

改造前

改造后

** 两个查询案例非一模一样的场景下产生,只为形象的对比产生的SQL语句数量

通过in查询改造后, 尽量不连表查询,都是通过in查询来解决,即使改造了,一次请求还是有过多的数据表查询,一个请求需要查询10几张表,这个时候就该缓存出场了,缓存能够很好的解决重复查询的困扰,但是又将系统的复杂度提升了一个档次

存入缓存容易,

销毁缓存就变得麻烦了,

个人觉得比较好的使用机制是:

接口层面直接从缓存中拿结构化好的数据,如果拿不到就直接去数据库查询,查回来的数据结构化好返回给用户,顺便把数据通过MQ消息给缓存管理服务,当出现数据变动时,MQ消息通知缓存管理服务直接删掉(或者发送格式化好的数据给MQ直接替换或者更新),但是实现起来需要对接的系统也就多了,缓存想做好还需要下细功夫

最新文章

  1. 第一次用golang写个小程序
  2. Docker初步认识安装和简单实例
  3. HTML5几种常见的错误写法
  4. java23 XML
  5. CSS Masking(翻译)
  6. Truck History
  7. asp.net,mvc4,mysql数据库,Ef遇到问题集合
  8. Qt creator error: LNK1123: 转换到 COFF 期间失败: 文件无效或损坏(vs2010的嵌入式清单文件)
  9. C# CodeHelper
  10. 【java】反射简单示例
  11. 201621123050 《Java程序设计》第11周学习总结
  12. PBRT笔记(7)——反射模型
  13. Azkaban学习之路 (三)Azkaban的使用
  14. SDL中 so库的使用
  15. 前端传送JSON数据,报Required request body is missing
  16. 阿里四不像Fourinone
  17. JavaScript基础视频教程总结(011-020章)
  18. boost-字符编码转换:使用conv
  19. js中编写velocity逻辑
  20. hive 抽样方法

热门文章

  1. bzoj1605 / P2905 [USACO08OPEN]农场危机Crisis on the Farm
  2. 20145314郑凯杰《网络对抗技术》可选实验 shellcode注入与Return-to-libc攻击实验
  3. POJ3278_Catch that cow
  4. 【bzoj4972】小Q的方格纸 前缀和
  5. Python学习札记(二十九) 模块2
  6. 总结关于express vue-cli
  7. Android Eclipse keystore.jks文件生成,根据keystore密钥获取SHA1安全码 ,apk打包
  8. bzoj-3195-状压dp
  9. System.ComponentModel.DataAnnotations 命名空间和RequiredAttribute 类
  10. 记录vue中一些有意思的坑