检查Memcache中是否存在密钥

Mat*_*tic 18 php memcached

如何在没有提取的情况下将值存储在Memcache中,如何检入PHP?我不喜欢抓取它,因为我设置的值都是1MB大小,在我获取它之后,我没有用它,所以我浪费资源.我在脚本中使用它来检查某些键是否缓存在memcache中,如果没有,它会从慢速数据源读取它们并将它们设置在memcache中.

编辑:如果我使用Memcached::append附加NULL到我正在检查的密钥怎么办?TRUE成功或FALSE失败时的退货.如果密钥不存在,Memcached::getResultCode则返回Memcached::RES_NOTSTORED.这样我检查密钥是否存在,它应该把密钥放在LRU列表的顶部吗?

谢谢.

use*_*772 7

我想知道为什么Memcached没有特殊的方法.以下是我在考虑之后得出的结论:

function has($key)
{
    $m->get($key)

    return \Memcached::RES_NOTFOUND !== $m->getResultCode();
}
Run Code Online (Sandbox Code Playgroud)

  • OP问题的全部要点是*避免*对 $m->get() 的调用,而这一切所做的就是包装它。 (2认同)

Tha*_*ama 6

我不确定这对你有什么帮助,但你可以使用

Memcache::add  (  string $key  ,  mixed $var)
Run Code Online (Sandbox Code Playgroud)

如果密钥已存在,它将返回false.

如果返回true,您可以使用

Memcache::delete  (  string $key)
Run Code Online (Sandbox Code Playgroud)

删除刚刚设置的密钥.这样您就不需要获取数据了.

  • 还有一些额外的注释:根据我的经验,这种方法(出于容易辨别的原因)比检查GET()的结果要快得多.确保ADD()为var的实际值而不是null,因为尝试添加null返回false. (2认同)

pak*_*ore 3

基本上你想要做的就是用你的数据填充memcached,对吧?

问题是,在不检索值的情况下询问键是否存在并不是很有用。看这个案例场景:

你询问钥匙是否存在,它确实存在。就在您询问之后,该密钥的数据就会从缓存中删除。虽然您的回复说日期在那里,但实际情况是数据不在那里。所以你浪费了时间去问,因为答案与现实不同。

我想你想要做的是询问一个密钥是否存在,然后如果不存在,则用你的数据填充它。为什么不直接填写所有数据呢?顺便说一句,您是否考虑过,当您用数据填充 memcached 时,您可能会驱逐之前插入的键?