Reids缓存更新的问题

有一个A接口的查询数据是做redis缓存,比如缓存时间为10分钟。
但是B、C、D等操作接口(可能是其他很多接口)都有可能影响A接口的数据。
现在想实现在操作B、C、D接口后,A接口的redis缓存失效或者得到更新,保证A接口数据的实时更新。
大家有比较好的通用实现方案吗?
(考虑B、C、D等操作接口可能很多比如四五个,或者这些操作接口也影响了除A接口外的其他缓存接口A2、A3等)

阅读 4k
4 个回答

这个问题,先要知道**什么是缓存?

    缓存就是在内存中存储的数据备份,当数据没有发生本质改变的时候,我们就不让数据的查询去
    
数据库进行操作,而去内存中取数据,这样就大大降低了数据库的读写次数,而且从内存中读数据

的速度比去数据库查询要快一些,这样同时又提高了效率。

而为什么使用缓存呢

    在开发网站的时候如果有一些数据在短时间之内不会发生变化,而它们还要被频繁访问,为了
    
提高用户的请求速度和降低网站的负载,就把这些数据放到一个读取速度更快的介质上(或者
    
是通过较少的计算量就可以获得该数据),该行为就称作对该数据的缓存。


如题:如果操作很频繁,建议放到不要放缓存里

  如果操作不频繁,那么只需要在接口使用完后,如果更改了数据,那么必须要刷新redis的数据。不要把     

redis太当回事,正常操作就可以了



如果是修改比较频繁的数据,还是不要放到redis里的好,如果修改不是很频繁的话,可以在数据更新成功之后刷新redis里的数据;

楼上说得对 热点数据不适合做缓存

《满汉全席》里满汉楼老板欧兆丰说:厨房里有两样克星,一样就是炒牛河,一样是沽老肉。

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拆成组合,来做更精确的控制.

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题