我正在研究一个新的基于Spring的项目,我想知道,如果我要使用Spring 3.1或ehcache-spring-annotation项目中的@Cacheable注释,你将如何实现绕过缓存机制的机制"on demand",例如,用于 生产环境 调试 .
假设我的应用程序仅提供REST请求,有时候,我想,一次调用(我手动制作)直接从"DB"(或者有后端)获取数据并避免和任何缓存(任何缓存) . 当调用正在运行时,我真的不介意它是否重新填充缓存与它刚从db获得的内容...
我想听听你对如何实现这一点的想法 .
提前感谢任何指导,
肯 .
3 回答
除了现有的检查之外,您可以扩展缓存管理器并提供布尔表达式 .
您可以在控制器的
ThreadLocal
中设置该布尔值,这样无论何时调用服务,布尔值都会到位 .您可以创建一个方法来刷新缓存,并在需要数据库中的值时仅使用调试器运行它 .
到达@Bozho建议的类似结果如果传递了请求参数 refresh-cache=true ,则会绕过缓存
我扩展了DefaultRedisCacheWriter并将其用作CacheWriter
覆盖此writer中的get()方法
ApiRequestContext是一个自定义请求对象,存储在本地线程中 . 请注意,当此方法返回null时,将从db中获取值并将其放回缓存中,从而有效地刷新缓存 .