相关疑难解决方法(0)

什么是管理密钥(在memcache中)以防止陈旧缓存值的最佳方法?

我最近在我的网站上实现了memcache,它已经在重负载mysql(mysql已尽可能优化).它解决了我所有的负载问题,并且网站运行良好.

我现在面临的问题是过时的缓存值.我在大多数页面上有1小时的自动过期时间,而且当数据库中的值为时,我也删除了密钥,但是我很难跟踪并有效地清除所有密钥.

在某些页面上,它是微不足道的.我可以将密钥设为item_id(例如item_4653),当更新数据或删除项目时,密钥将被清除.

但是在大多数页面上,我使用脚本filename + querystring,md5,并将其用作memcache中的密钥.这对于复杂的URL(非常常见)特别有用.

例如,我加载了以下页面.

index.php?search_keywords = good&search_section = 1&sort = release&page = 2

它将包含一个项目列表,这些项目将从memcache中获取.然后另一个用户提交一个项目,其标题中包含" ",它恰好在值的范围内,它将出现在第2页,除非它不会出现在那里,直到刷新缓存.更复杂的是,新添加的项目也将出现在index.php?sort = newest,以及index.php?category = some_category?page = 1等等.每个项目都有一个独特的key(脚本名称的md5 +查询字符串).

因此,新添加的项目可能会显示在几十个页面上,如果它们是从实时数据库中提取的,但在更新陈旧缓存之前,它们中的任何一个都不可见.唯一的选择是等待项目自动过期.

对于所有可能的缓存页面组合,我的论坛(自定义编码)上的这个问题变得更加明显,其中值必须按需更新.假设我有4页线程,我注意到第2页上有3个垃圾邮件帖子.删除它们后,第2页重建,但是它还必须重建第3页和第4页,否则新重建页面上会有重复的帖子2和旧页面3.这只是一个例子.....有几十个这样的场景.

有任何想法吗?

php memcached caching

16
推荐指数
1
解决办法
6571
查看次数

PHP memcache设计模式

我们使用memcache基本上只是考虑缓存查询结果.

失效是一种噩梦,因为它的实施方式.我们通过阅读邮件列表学习了一些memcache技术,例如允许组密钥失效的技巧.对于那些知道它的人,跳过下一段..

对于那些不知道并且感兴趣的人,诀窍是为您的密钥添加序列号并将该序列号存储在memcache中.然后每次在你"获取"之前,你都会抓住当前的序列号并围绕它建立你的密钥.然后,要使整个组无效,只需增加该序列号即可.

所以无论如何,我正在修改我们的模型来实现它.

我的问题是......

我们不知道这种模式,我相信还有其他我们不知道的模式.我已经搜索过,并且无法在网上找到任何设计模式来实现内存缓存,最佳实践等.

有人能指出我这样的事情,甚至只是写一个例子吗?我想确保我们在新的重构中不会让初学者犯错误.

php memcached design-patterns

12
推荐指数
2
解决办法
7522
查看次数

组织memcache密钥

我试图找到一种处理memcache密钥的好方法,用于以更文明的方式存储,检索和更新缓存层中的数据.

找到这个看起来很棒的模式,但是如何将它变成PHP应用程序的功能部分呢?

身份地图模式:http://martinfowler.com/eaaCatalog/identityMap.html

谢谢!

更新:我被告知修改后的memcache(memcache-tag)显然确实做了很多,但我无法在我的Windows开发盒上安装linux软件......

memcached caching key-value-observing

3
推荐指数
1
解决办法
2177
查看次数