一、缓存商品
本项目中在商品缓存用到了二级缓存、本地缓存使用guava、服务器缓存用redis缓存。
使用guava缓存要先导入guava的依赖。
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>27.0.1-jre</version>
</dependency>
商品详情接口使用了缓存优化。
商品详情接口处理器
由代码可以看出、以前是通过直接查数据库的findItemById方法改成了findItemInCache从缓存里数据的方法。
商品详情的service
先在service初始化时先初始化本地cache
由service代码可知、分为了三步。
- 先去guava本地缓存中去看是否有数据,有直接从缓存中取数据,然后直接返回。没有就下一步
- 假如guava本地缓存中没有数据就去redis中找看有没有,有就直接取到存带guava中然后再返回,没有就下一步
- 假如本地和redis一二级缓存都没有数据、才去数据库中查查到了就放到本地guava缓存和redis缓存中方便下次取,提高效率。最后返回
二、缓存用户
缓存用户使用的一级缓存、直接用redis缓存、原因是本地缓存一般存的是热度很高的数据的、而用户数据会有很多并且登录了会有一大半用户已经离开了,所以再使用本地缓存是没有必要的。直接使用redis就可以了。
service代码
由代码可知会先去redis中找有没有数据、有直接从redis中拿、没有就直接查数据库然后存到redis再返回。
三、总结
使用redis做缓存对经常访问并且不经常变的数据的查询可以大大提高网页的访问效率。
这一节面试常问的问题有redis的持久化有哪些种类,在面试是重点一定要掌握,理解并用自己的话能说出来。
还有分布式缓存的八股文也要理解并熟记。