前面给出的哪些解决Redis缓存问题的方法里面,在一个业务系统里面有可能会在多出地方使用到相同或者类似的操作,就需要反复去创建这些方法。既然业务内容操作差不多,那么我们是否可以把这些类给封装成一个适合多种场景的工具类呢?显然,这里就是想要探讨这个问题。可以把一些重复出现的方法封装起来,定义好需要传入哪些参数,等到需要使用的时候,就按要求传入这些方法需要的参数就可以实现这个功能。
下面是对缓存穿透、缓存击穿以及一些基础方法的封装。
首先先创建一个工具类,加上@Component
的注释,并且定义好基础方法:
1 | @Slf4j |
获取锁的方法可以使用Redisson的方式来获取,详细可以参考上一篇“Redis解决缓存击穿的文章”。
1、封装存储Redis缓存的方法:
1 | /** |
封装的方法里面,需要注意的是,value
指的是从数据库查询到的数据,需要使用的时候,需要传入业务的key、数据和自定义的时间及时间的单位,就可以使用了。
2、封装解决缓存穿透方法:
1 | /** |
这里的“R“是泛型,因为不知道使用的业务类型,就使用泛型来替代,Class<R> type
来定义需要传入的类,使用的时候再传入相应的类,使用type
来表示XX.class
。”ID”这个泛型定义是因为id
这个属性不固定参数类型,所以也由调用者自己传入。FunctiondbFallBack.apply(args)
返回查询后的数据。
后面的方法也是基于这一思想来实现。
3、封装基于逻辑过期解决缓存击穿方法:
1 | /** |
思想与前面的相同,设置好需要传入的参数就好。
4、封装基于互斥锁解决缓存击穿问题:
1 | /** |
封装好这些方法后,就可以直接调用这些方法了,而在实现类中,就不需要写那么多繁琐的代码了。
1 | /** |
封装好缓存工具类后,直接使用方法调用的方式来调用,会有一种极致简洁的效果,没有那么多冗余的代码了。
本文链接: https://longzas.github.io/2023/08/25/Redis%E7%BC%93%E5%AD%98%E5%B7%A5%E5%85%B7%E7%B1%BB%E5%B0%81%E8%A3%85/
版权声明: 本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。转载请注明出处!