在Memcache中锁定一个键

时间:2013-08-01 20:11:12

标签: synchronization locking memcached

我正试图找到一种方法来阻止memcache中的特定键 写入一段特定的时间,例如5分钟。

我可以想象做下面的事情,但需要额外的 每个“集合”都“得到”

function lock($key,$expiration) {
  memcache::set($key,'DONTUSEME', $expiration);
}


function set_key($key,$val) {
  if(memcache::get($key) == 'DONETUSEME') {
     # no-op
  } else {
     memcache::set($key,$val);
  }
}

function get_key($key) {
   $val = memcache::get($key);
   if($val == 'DONTUSEME') {
      return '';
   } else {  
      return $val;
   }
}

2 个答案:

答案 0 :(得分:1)

Memcached不允许您锁定密钥。您可能会查看Couchbase,因为它确实有“get and lock”命令并使用与memcached相同的协议。 Couchbase是一个数据库,但它在顶部包含一个memcached缓存层。如果您想尝试此解决方案,我可以提供更多详细信息。可能还有其他缓存解决方案确实实现了锁定命令,但我无法想到任何问题。

答案 1 :(得分:0)

一年后 - memcache似乎无法做到这一点。

Redis通过SETNX肯定具有锁定功能。性能方面,Redis与Memcache竞争激烈。

http://redis.io/commands/setnx

SETNX键值

如果密钥不存在,则设置密钥以保存字符串值。在这种情况下,它等于SET。当键已经存在值时,不执行任何操作。 SETNX是“SET,如果没有X的话。”