我只是想知道是否有办法使用通配符清除memcache的键值.
所以说我有一个带有"1234~foo"键和另一个"1234~foo~bar"的缓存.
有什么方法我可以通过使用像clear("1234*")这样的东西来清除缓存并从上面清除它们吗?
我希望这是有道理的.
谢谢.
不,没有直接简单的方法来做到这一点.在常见问题解决了这一点,并提供了一种变通方法:
按名称空间删除
虽然memcached不支持通过命名空间删除或删除任何类型的通配符(因为没有命名空间),但有一些技巧可用于模拟它.但它们确实需要额外访问memcached服务器.
PHP中的示例,用于使用名为foo的命名空间:
$ns_key = $memcache->get("foo_namespace_key"); // if not set, initialize it if($ns_key===false) { $ns_key=rand(1, 10000); $memcache->set("foo_namespace_key", $ns_key); } // cleverly use the ns_key $my_key = "foo_".$ns_key."_12345"; $my_val = $memcache->get($my_key); //To clear the namespace do: $memcache->increment("foo_namespace_key");
Eric Petroelje关于名称空间解决方案的说明:
请记住,您不知道memcached何时会驱逐您的命名空间密钥.Memcache可能会驱逐你的命名空间密钥,然后在尝试设置一个新密钥时,它的概率为1到10000,它将选择相同的索引密钥 - 这意味着你将获得"脏"结果.这不太可能,但最重要的是,它并不安全.
同样的问题是Poul Vernon的解决方案.
一个安全的解决方案是使用可靠的存储(例如磁盘)作为"指针键"/"命名空间键".