内存级缓存>Redis缓存>数据库
2018-03-14 21:00
78 查看
情况描述:
有以下几张表,单据表(t_bill)、货物表(t_cargo)、原料表(t_raw_material)、配置表(t_configure),表关系如下:
一张单据对应多个货物信息,每种货物都有自己对应的原料信息,货物和原料都有属于自己的配置信息。
需求如下:
当我查询一个单据信息的时候,会展示该单据下的所有货物信息,以及货物所属原料名称和配置信息,不是单纯的对象,是需要通过DTO转换的数据,意思就是说,货物信息、原料信息、配置信息需要组装成为一个DTO。
按照常理来说,直接查询单据就可以级联查询出单据明细信息,这样做也无可厚非,但是忽略了一点,如果一张单据里面包含了成千上万的货物信息,成千上万的货物又对应的成千上万的原料,同时也对应了成千上万的配置信息,这个时候就会遇到数据量太大,导致前端请求超时问题。
最开始的解决方案:
用redis缓存货物和原料对应的配置信息,这样在查询货物和原料对应的配置信息时,可以先从redis中查询,如果有直接返回,如果没有则再去数据库查询,这样可以减少数据库的开销,提高查询速度,在一定程度上看减少前端超时的问题,但是随之而来又会有新的问题,那就是货物和原料对应的配置信息更新不及时的问题,意思就是说会存在脏数据问题,所以想到这些后续还需要更改更多代码,于是过段暂时放弃这种方式。
第二种解决方案:
在查询明细信息的时候,在代码中用HashMap的方式暂存数据,形式和redis相同,以key和value的形式在内存中保存数据,因为货物和原料中都是保存的配置信息的code,根据code拿到name,返回给前端,所以查询的时候,先会去map中找,如果存在,则直接返回name,如果不存在,再去数据库中查询,然后add进map中,这样在后续的查询中,效率会更高,当然这带来不利的因素就是内存会被增加,所以这个只是暂时的解决方案。
我写这篇文章的目的在于想告诉大家,内存的性能大于Redis缓存,Redis缓存性能大于数据库直接查询。
有以下几张表,单据表(t_bill)、货物表(t_cargo)、原料表(t_raw_material)、配置表(t_configure),表关系如下:
一张单据对应多个货物信息,每种货物都有自己对应的原料信息,货物和原料都有属于自己的配置信息。
需求如下:
当我查询一个单据信息的时候,会展示该单据下的所有货物信息,以及货物所属原料名称和配置信息,不是单纯的对象,是需要通过DTO转换的数据,意思就是说,货物信息、原料信息、配置信息需要组装成为一个DTO。
按照常理来说,直接查询单据就可以级联查询出单据明细信息,这样做也无可厚非,但是忽略了一点,如果一张单据里面包含了成千上万的货物信息,成千上万的货物又对应的成千上万的原料,同时也对应了成千上万的配置信息,这个时候就会遇到数据量太大,导致前端请求超时问题。
最开始的解决方案:
用redis缓存货物和原料对应的配置信息,这样在查询货物和原料对应的配置信息时,可以先从redis中查询,如果有直接返回,如果没有则再去数据库查询,这样可以减少数据库的开销,提高查询速度,在一定程度上看减少前端超时的问题,但是随之而来又会有新的问题,那就是货物和原料对应的配置信息更新不及时的问题,意思就是说会存在脏数据问题,所以想到这些后续还需要更改更多代码,于是过段暂时放弃这种方式。
第二种解决方案:
在查询明细信息的时候,在代码中用HashMap的方式暂存数据,形式和redis相同,以key和value的形式在内存中保存数据,因为货物和原料中都是保存的配置信息的code,根据code拿到name,返回给前端,所以查询的时候,先会去map中找,如果存在,则直接返回name,如果不存在,再去数据库中查询,然后add进map中,这样在后续的查询中,效率会更高,当然这带来不利的因素就是内存会被增加,所以这个只是暂时的解决方案。
我写这篇文章的目的在于想告诉大家,内存的性能大于Redis缓存,Redis缓存性能大于数据库直接查询。
相关文章推荐
- Android 网络数据的缓存HttpResponseCache <18>
- 根据从redis缓存的数据查询出来,在从数据库中取出所有的数据,俩个数据进行比较,去掉重复,剩下库中新插入的数据,取出新数据,然后把redis中的缓存数据清空把从数据库中查出来的所有数据放到redis缓存中
- Android 使用RxJava+Retrofit +Realm 组合加载数据 <读取缓存 显示 请求网络数据 缓存最新数据 更新界面>(一)
- 无网络状态下显示 缓存数据 <缓存到SD卡中>
- DISCUZ X2.5数据表内存级缓存
- Android 使用RxJava+Retrofit +Realm 组合加载数据 <读取缓存 显示 请求网络数据 缓存最新数据 更新界面>(二)
- 基于Java使用HashMap<String,List<String>>实现数据的缓存
- 使用Redis缓存同步,从缓存中存取数据的一些使用
- WebStorage(1)__<本地数据,离线缓存>
- 数据结构之查找<一>
- 大数据之Hive<四>
- Memcached和Redis数据缓存系统
- 网络数据解析及加载本地 缓存封装
- SQL轮询数据依赖缓存
- Android清除本地数据缓存代码案例 sqlite sharedpref 等等
- 关于List<xxxBean>的比较相同数据
- 大数据学习笔记<一>
- 大数据 --> 分布式文件系统HDFS的工作原理
- APP缓存数据线程安全问题