我们在Cakemail我们使用 memcached. 缓存我们申请所需的许多数据量。我们经常需要在其到期前从Memcached刷新数据。处理一个密钥时,这很容易,但是当您想用给定的前缀开始刷新所有键时,它会有点棘手。
由于Memcached不支持通配符删除,我们决定在我们的缓存对象中实现足球竞彩推荐法,这使我们能够做到这一点。虽然这是 不是一个新的想法,我仍然觉得它值得与你分享。
问题
假设您的应用程序是多语言,字符串存储在数据库中。您可能希望缓存这些字符串,因为它们不会经常更改。
Strings could be stored in Memcached with the given key: string_<LOCALE>_<STRING_NAME>
.
更新语言意味着等待键过期或删除它们。后者是棘手的,因为您必须遍历每个字符串并逐个删除它们。
解决方案
足球竞彩推荐方式背后的想法是有一个单键,您可以使其使所有子项失效不再使用。
例如,这里是我们如何缓存我们的本地化字符串:
ns_string_en_US => 1
string_en_US_1_welcome => Welcome
string_en_US_1_logout => Logout
All strings are stored using the following format: string_<LOCALE>_<NS>_<STRING_NAME>
.
Whenever we want to flush an entire language all we need to do is increment the ns_string_<LOCALE>
key. Doing so causes the namespace to change to 2
, thus all strings are loaded from keys string_en_US_2_<STRING_NAME>
.
更新: 作为 FlyingFirefox指出,上述问题可以在不使用足球竞彩推荐方式的情况下解决,但我想保持例子简单。
为了使这项任务更轻松,我们构建了一个简单的缓存对象,使用依赖项注入初始化。此时它只支持单个MEMCACHED实例,但它支持多个MEMCACHED实例,但它是非常简单的。
样本使用
代码
cache.php.
cache_service.php.
cache_memcache.php.
缺点
虽然这种技术适用于某些情况,但它可能不适用于所有情况。
- 刷新足球竞彩推荐空间导致MEMCACHED中的内存使用情况浪费,直到旧的足球竞彩推荐空间到期,因为您仍然是aren’t实际上删除了旧密钥。这是一个’如果Memcached将删除最少的最近使用的钥匙,则虽然如果它已满,但是如果它已满,则虽然巨大的问题。
- 获取足球竞彩推荐方式值要求您首先获取足球竞彩推荐空间值,然后是您想要的键的值。
你对Memcached足球竞彩推荐法的看法是什么?
PSST ..我们是 招聘 !! ðÿ〜‰
由Christian Joudrey,Cakemail’S铅编程序员。你可以在Twitter上追随基督徒 @cjoudrey. .
[…这篇文章在Chityian Joudrey的Cukemail上提到了Twitter上。 Christian Joudrey说:在Memcached中足球竞彩推荐– http://bit.ly/filAFP […]
聪明的想法。感谢您的共享ðÿ™,
令人敬畏的解决方案。我肯定会在我的网站和我的PHP框架ðÿ™中实现它,