我们使用memcache基本上只是考虑缓存查询结果.
失效是一种噩梦,因为它的实施方式.我们通过阅读邮件列表学习了一些memcache技术,例如允许组密钥失效的技巧.对于那些知道它的人,跳过下一段..
对于那些不知道并且感兴趣的人,诀窍是为您的密钥添加序列号并将该序列号存储在memcache中.然后每次在你"获取"之前,你都会抓住当前的序列号并围绕它建立你的密钥.然后,要使整个组无效,只需增加该序列号即可.
所以无论如何,我正在修改我们的模型来实现它.
我的问题是......
我们不知道这种模式,我相信还有其他我们不知道的模式.我已经搜索过,并且无法在网上找到任何设计模式来实现内存缓存,最佳实践等.
有人能指出我这样的事情,甚至只是写一个例子吗?我想确保我们在新的重构中不会让初学者犯错误.
使用对象缓存记住的一点是它只是 - 对象/复杂结构的缓存.很多人犯了错误,就是为了直接,高效的查询而点击他们的缓存,这会导致缓存检查/未命中的开销,此时数据库可以更快地获得结果.
这条建议是我向他们传授的一个忠告; 知道什么时候不缓存,也就是说,当开销取消了感知的好处时.我知道它没有回答这里的具体问题,但我认为值得指出这是一个普遍的暗示.
抢劫说的是好建议.根据我的经验,识别和使标签无效的方法有两种:唯一标识和基于标签的标识.这些通常组合在一起形成一个完整的解决方案,其中:
为缓存记录分配唯一标识符(通常以某种方式取决于它缓存的数据)以及可选的任意数量的标记.
缓存记录由其唯一标识符调用.
缓存记录可以通过其唯一标识符(一次一个)或通过标记它们的任何标记(可能同时使多个记录无效)来使其无效.
这实现起来相对简单,通常效果很好.我还没有遇到需要更多的系统,尽管可能有一些边缘情况需要特定的解决方案.