Redis 缓存的应用

问题

最近刚完成一个需求,这个需求是有关于数据分析.设计到数据分析肯定避免不了计算,对于有些数据的计算规则可能会比较非常复杂,,如果用户去多次请求必然会影响用户的体验,用户可能会觉得这是什么垃圾玩意怎么这么慢.为了提升速度就不的不添加缓存了,这样可以很大的提高接口的响应速度.从而使用户觉得不是那么卡.但是要牺牲一些东西那就是数据的准确性.但是有些数据它是对准确性要求较高的.那么你这一套缓存就要去监听这个数据的任何增删改查.

在做数据分析总难免会遇到这些问题一下,当然采用硬编码的话可以做但是那样做的话工作量会非常庞大.所以我为了减轻了自己的工作量自己设计了一套缓存.目前这套缓存已经上线了感觉还是不错的,就将这一次设计做一个记录.

更据第一段的问题,我的问题主有以下几点

1.如何减少硬编码优雅的去添加缓存和更新缓存呢

2.对于不同的数据有不同的方式去更新缓存

3.如何去监听数据源的改变从而更新数据呢

这些是我在设计缓存的时候主要遇到的问题,这里并没有考虑缓存击穿的问题,对于缓存雪崩的问题只是进行了回源操做,没有设计什么策略,应为目前来说这套缓存完全可应付了这个场景.

使用

添加缓存 这一行代码就完事了包括设置过期时间 缓存策略支持Redis的和Guava缓存 

@AtomCache(cacheType = ATOM_CACHE_LEVEL.REDIS, cacheMethod = ATOM_CACHE_TYPE.FIND, expire = 300)

更新缓存可以指定更新时间策略是否立即更新不立即更新的话会调用Spring中的定时任务去更新缓存

@SmartReportCacheUpdate(modelType = XZ_MODEL_TYPE.SET, timely = "YES")

实现

这次的缓存是基于Redis加Guava的SpringBoot的实现的.

泳道图如下


看完面的流程图相信你对整体的思路有了个大体的了解在过程做你可能会有写疑问,它是如何获取指定的key的.我一开始最初的方案有两种,

方案一:让请求参数继承一个接口,接口里有生成ID的方法,这样的话就可以利用反射获得key

方案二:在注解上直接key利用AOP获取key

我觉的这两种方案都可以,

还有一个问题是对列是如何来的,我使用的是redis的数据结构中List作为一个对列的,redis是有一个指令可以弹出首个或最后一个的数据的指令的

以上就是我的大体思路,写完之后整体的代码也没有1000行看一下对问题的解决

1.如何减少硬编码优雅的去添加缓存和更新缓存呢(注解)

2.对于不同的数据有不同的方式去更新缓存(注解上的策略)

3.如何去监听数据源的改变从而更新数据呢(对列)




猜你喜欢

转载自blog.csdn.net/MyPersonalSong/article/details/80053304