Memcached-K/V缓存如何做到即时更新?
系统为了提高性能,使用缓存是最简单粗暴的方法!
拿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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
我能想到的方法就有:
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个子缓存后在程序里做处理得到结果。
但我不确定复杂的场景下,这还是否想看起来那么可行!?
kv设计就是为1对1的关系,如果是多对多的关系的话,都要拆分成多个1对多的关系,1做key,而多的内容作为vlaue(从而变成1对1的关系);
优化的第一准则空间换时间!