使用本地缓存中的常见问题「缓存不一致解决方案」

互联网 2023-03-18 17:45:38

今天给大家普及一下使用本地缓存中的常见问题「缓存不一致解决方案」相关知识,最近很多在问使用本地缓存中的常见问题「缓存不一致解决方案」,希望能帮助到您。

我们在开发程序过程中经常会遇到缓存数据的情况,尤其是电商行业并发量很高,不用缓存是真心扛不住。这不快到双十一了吗?我们又开始提前准备了。

先跟大家说下我们使用本地缓存框架是EHCache,虽然EHCache已经很老了,但是还是非常强大的,每个元素都能设置过期时间,元素过期有很多策略可以选择,这里就不讲EHCache功能了,想必大家也是很了解的,

好了聊聊正题,我们使用本地缓存的时候需要注意什么。当我们查询底层数据需要缓存的时候,我们怎么保存?肯定有很多小伙伴说了保存Object呀,这还用问。是呀保存Object很方便,取出使用也很方便。这里就会有一个隐藏的坑,如果我们把Obj取出来的时候,我们只是读数据可以,万一我们要进行加工修改,下次再取出来那就是你上次修改过的内容,这个很重要。这就悲催了!那怎么办?我们的做法是把Object直接转成Json使用fastJson转换,然后使用的时候再次序列化成类。

但是这里面也有坑!有坑!就是你在用fastJson转来转去的过程中,可能你的类使用了fastJson的注解@JSONField(serialize = false) 这个注解的意思是在转Json忽略此字段。那么当你再次使用这个Object时这个字段就会没有值了。头疼!一个简单的问题怎么这么复杂!

好吧我们又自己定义了一个注解来取代@JSONField,这样算是把坑都填了。有小伙伴说怎么不用别的方法转呢,我们之前也使用过Kryo serialization进行转换。但是这个工具依赖的版本不一样就会报错。因为我们是要做成公共平台工具的,大家使用的时候排查依赖包特别麻烦,最后衡量还是我们自己麻烦点,让各个部门人用得爽一点。

最后给大家介绍下我们开发平台里的缓存工具有啥功能,我们提供两个方法一个是存数据的,一个取数据的,可以使用本地缓存也可以使用redis缓存,任选并且可以后台动态修改使用哪个缓存和缓存时间。而且还能查看缓存里的数据,是不是很强大啊!如果大家有兴趣可以给我留言,有时间我跟大家聊聊。