我这边需求是这样的,比如我一个系统 目前还很小,我这边日常缓存使用caffiene就行,所以cachetype就是local,随着业务增大,对服务进行了负载 这时候我就想缓存使用堆外缓存比如redis, 这时候我要需要把所有的cachetype改为remote 这样会比较麻烦,有没有一个type 根据我配置的缓存是redis还是caffiene 然后注解不用改变就可以切换缓存实现, BOTH模式也不是我需要的 因为BOTH会使用一二级缓存, 对于负载下的应用 数据库更改了配置 可能带来不同服务缓存不一致问题
5条答案
按热度按时间mefy6pfw1#
local和remote有行为上的不一样,比如remote保存的value必须要能序列化,不是你光改一下type就可以的。
你这个需求可以用MockRemoteCache,yml里面remote的type填mock就可以,没有别的配置。它就放在内存里面,但是真的会执行一遍序列化,这样你将来换成redis也不会有问题。
BOTH的cache数据不一致的问题有两个办法。第一是把local的超时时间设置短一点(可以分别设置);第二是2.7以后通过jetcache更新的redis缓存数据支持通知到其它进程,失效local cache。
t2a7ltrp2#
local和remote有行为上的不一样,比如remote保存的value必须要能序列化,不是你光改一下type就可以的。
你这个需求可以用MockRemoteCache,yml里面remote的type填mock就可以,没有别的配置。它就放在内存里面,但是真的会执行一遍序列化,这样你将来换成redis也不会有问题。
BOTH的cache数据不一致的问题有两个办法。第一是把local的超时时间设置短一点(可以分别设置);第二是2.7以后通过jetcache更新的redis缓存数据支持通知到其它进程,失效local cache。
如果我value都是可以序列化的场景, 可以根据自定义配置 任意切换使用local,remote,both吗, 如果注解不好实现, 是不是用api也可以 。我在api应该可以配置所有缓存使用remote 还是 local 还是 both吧。
nnt7mjpx3#
不能,Cache实例创建的时候,它的类型就是固定的。
dluptydi4#
不能,Cache实例创建的时候,它的类型就是固定的。
好的 我还有一个问题 如果我不想使用remote 只想使用local 或者 只想使用remote 不想使用local 这种非springboot如何配置》? 我local用的caffeine
nnt7mjpx5#
remote你填个mock就可以了,将来不是可以统一换成redis么。mock remote或者local,你不用配置一下也没有什么损失