Guava本地缓存实际使用上碰到的疑问

来源:11-3 缓存-redis的使用讲解-1

寒暄丶

2018-12-24

图片描述
视频中您提到了guava cache在使用缓存时,在调用cache.get()方法时,如果缓存中没有此key对应的值,则默认调用截图中的重写方法来查询数据库中的内容,这里有一个疑问,因为他属于匿名内部类重写方法,除了key之外无法传递其他的参数了 所以我再这里使用了自定义类来实现CacheLoader类的方式来完成 如图
图片描述
但是这样的话 代表每个需要缓存的操作都需要自定义一个类来对应进行操作(使用的dao层类不一、参数不一)
这样的操作个人觉得很复杂 必要性也不大 所以想咨询老师 这里如何进行操作和您在股票实战时是如何处理的

2.麻烦您看一下这样图片描述
如果调用getIfPresent方法得到缓存中没有所需要的数据(返回null),判断如果为null的时候就说明没有数据,则调用get方法来通过数据库获取,再put进缓存 这样两次调用get的相关方法 是否多余 有何改进的地方呢

谢谢老师~

写回答

1回答

Jimin

2018-12-24

你好,股票项目里其实我都只使用的getIfPresent,判断为null时去数据库加载,并更新到缓存里供使用。这样做是基于很多前提的:首先大部分数据都会命中缓存,查询db很少(由于在各个环节引入大量缓存),我这边核心数据存储其实都是先放入redis的,所有查询也基于redis,基本上不用担心db并发查询带来的流量上涨。而对db操作流量最大的时间是放在闭市后的凌晨大部分都在睡觉。
我个人感觉这些东西没固定要求该如何写,懂得了api,根据自己的场景去分析使用就可以了。

0
6
Jimin
泛型是可以的,但建议不要强制类型转换,而是统一转换为json字符串存储,使用时再反转回去使用
2019-01-09
共6条回复

Java高并发编程,构建并发知识体系,提升面试成功率

构建完整并发与高并发知识体系,倍增高薪面试成功率!

3923 学习 · 832 问题

查看课程