Memcached-K/V缓存如何做到即时更新?

发布于 2016-11-08 03:53:38 字数 541 浏览 1319 评论 2

系统为了提高性能,使用缓存是最简单粗暴的方法!
拿memcache举例,
如果用户请求一个userID=7的注册用户信息,memcache缓存的key很可能设定为:userID_7,
而value就是json或者序列化后的数据。
当管理员后台删除userID=7的用户信息时,去删除memcache中的userID_7的对应值!

这是简单的场景!

整个复杂的,如果用户请求的是userID=7的用户是否是userID=8的好友呢?我们假设这个关系没存在一张关系表里,而是需要通过一系列条件获得的(请别在意细节!),那么我们为了高效,决定把这次检查的结果也存到缓存里,key设定为userID_7_and_8,value就保存0或1,表示否或是!

那么如果这时候管理员删除掉了userID=7的用户,如何即时删掉这个key=userID_7_and_8的缓存?

如果memcache的key支持like查询,可能这就不是什么问题了!可是现实残酷!

我想听听大家的办法,不要局限于我举的例子,实际项目可能更复杂,我只想知道有什么办法可以很好的管理缓存?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

归属感 2017-03-11 15:25:37

我能想到的方法就有:
1.
做一个映射表,2个字段:key,values;
例如:
key=userID_7
values=userID_7_and_8,userID_7_and_9,...

这样当userID=7的数据被update或delete时,去这张对应表中取得values逐一删除缓存(不考虑更新缓存造成的性能问题)

2.
userID_7缓存,userID_8缓存,关系不缓存,拿到2个子缓存后在程序里做处理得到结果。
但我不确定复杂的场景下,这还是否想看起来那么可行!?

晚风撩人 2016-12-15 13:49:41

kv设计就是为1对1的关系,如果是多对多的关系的话,都要拆分成多个1对多的关系,1做key,而多的内容作为vlaue(从而变成1对1的关系);

优化的第一准则空间换时间!

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文