有一个A接口的查询数据是做redis缓存,比如缓存时间为10分钟。
但是B、C、D等操作接口(可能是其他很多接口)都有可能影响A接口的数据。
现在想实现在操作B、C、D接口后,A接口的redis缓存失效或者得到更新,保证A接口数据的实时更新。
大家有比较好的通用实现方案吗?
(考虑B、C、D等操作接口可能很多比如四五个,或者这些操作接口也影响了除A接口外的其他缓存接口A2、A3等)
有一个A接口的查询数据是做redis缓存,比如缓存时间为10分钟。
但是B、C、D等操作接口(可能是其他很多接口)都有可能影响A接口的数据。
现在想实现在操作B、C、D接口后,A接口的redis缓存失效或者得到更新,保证A接口数据的实时更新。
大家有比较好的通用实现方案吗?
(考虑B、C、D等操作接口可能很多比如四五个,或者这些操作接口也影响了除A接口外的其他缓存接口A2、A3等)
《满汉全席》里满汉楼老板欧兆丰说:厨房里有两样克星,一样就是炒牛河,一样是沽老肉。
There are only two hard things in Computer Science: cache invalidation and naming things.-- Phil Karlton
计算科学里也有两样最难,一是让缓存失效,一是给东西命名 --菲尔.卡尔顿
关联接口更新可以采用公共部分键值的方式, 不考虑复杂分布式的情况:
公共部分可以用公供变量,如v=123(可用时间戳)
A: key=a+v
B: key=b+v
C: key=c+v
...
当A调用时, 修改V的值, B,C,D等接口按新的key找不到缓存,自然会更新缓存,旧有缓存等缓存服务自然过期就好 .
还可以把v拆成组合,来做更精确的控制.
15 回答8.4k 阅读
8 回答6.2k 阅读
1 回答4k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
2 回答3.1k 阅读
2 回答3.8k 阅读
3 回答1.7k 阅读✓ 已解决
这个问题,先要知道**什么是缓存?
而为什么使用缓存呢