alibaba / jetcache

JetCache is a Java cache framework.
Apache License 2.0
5.03k stars 1.05k forks source link

如何在不改动注解的情况下,实现使用堆内缓存和堆外缓存的切换 #824

Open ivanmissu opened 11 months ago

ivanmissu commented 11 months ago

我这边需求是这样的,比如我一个系统 目前还很小,我这边日常缓存使用caffiene就行,所以cachetype就是local,随着业务增大,对服务进行了负载 这时候我就想缓存使用堆外缓存比如redis, 这时候我要需要把所有的cachetype改为remote 这样会比较麻烦,有没有一个type 根据我配置的缓存是redis还是caffiene 然后注解不用改变就可以切换缓存实现, BOTH模式也不是我需要的 因为BOTH会使用一二级缓存, 对于负载下的应用 数据库更改了配置 可能带来不同服务缓存不一致问题

areyouok commented 11 months ago

local和remote有行为上的不一样,比如remote保存的value必须要能序列化,不是你光改一下type就可以的。

你这个需求可以用MockRemoteCache,yml里面remote的type填mock就可以,没有别的配置。它就放在内存里面,但是真的会执行一遍序列化,这样你将来换成redis也不会有问题。

BOTH的cache数据不一致的问题有两个办法。第一是把local的超时时间设置短一点(可以分别设置);第二是2.7以后通过jetcache更新的redis缓存数据支持通知到其它进程,失效local cache。

ivanmissu commented 11 months ago

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吧。

areyouok commented 11 months ago

不能,Cache实例创建的时候,它的类型就是固定的。

ivanmissu commented 11 months ago

不能,Cache实例创建的时候,它的类型就是固定的。

好的 我还有一个问题 如果我不想使用remote 只想使用local 或者 只想使用remote 不想使用local 这种非springboot如何配置》? 我local用的caffeine

areyouok commented 11 months ago

remote你填个mock就可以了,将来不是可以统一换成redis么。mock remote或者local,你不用配置一下也没有什么损失