Redis 缓存数据库的使用场景

# 一、痛点即需求  

一次新需求中,我需要在页面上动态展示一些统计性的数据,并且定时刷新实时数据。起初,在开发过程中直接使用Sql查询数据库,返回数据给页面进行渲染。

但是,实际生产环境中,查询的数据量非常大,导致每次查询数据库都要耗时很久,并且页面久久未响应,容易卡死。后来想到了,将第一次查询的数据放入redis缓存,后面的数据直接去redis中拿到最终结果,就连中间的逻辑过程都省了。这样子,重新查看一次请求的耗时,发现,能够减少几十倍。

关于,如何刷新缓存嘛?  我写了一个定时器去间隔性的查询数据库,然后放入缓存,以供页面请求直接到缓存中读取数据。 


# 二、落地方案

Redis支持5种数据类型的存储,且都是以key-value 形式存储在数据库中的。其中Hash以存储对象为主,其他4中类型都存储的是String类型的数据。

但是Hash存储的数据无法可视化(即不能直接看到内存中存储的是什么,数据以二进制格式存储)。并且,使用起来不是很方便。

所以,我选择了将,List结合转换成(使用FastJson.toJsonString)Json字符串,然后使用Spring 提供的StringRedisTemplate ,将我要的数据存储在Redis缓存中。

需要读取数据的时候,将读取出的Json ,通过JsonArray.parse ,重新转换成List对象。注意: 经过序列化和反序列化。list的元素的顺序可能发生变化。

所以如果需要排序,那么此时,可以使用Java8 的Stream API ,进行重新排序。 还可以使用List.subList ,进行元素的截取。

喜欢出发、喜欢离开、喜欢不一样的事物。——May
原文地址:https://www.cnblogs.com/I-Say/p/13896738.html