0

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

我可以想象做类似下面的事情,但是每个“集合”都需要一个额外的“get”

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;
   }
}
4

2 回答 2

1

Memcached 不允许您锁定键。不过,您可能会研究 Couchbase,因为它确实有一个“获取和锁定”命令,并且使用与 memcached 相同的协议。Couchbase 是一个数据库,但它在顶部包含一个 memcached 缓存层。如果您想尝试此解决方案,我可以提供更多详细信息。可能还有其他实现锁定命令的缓存解决方案,但我想不出任何一个。

于 2013-08-02T17:30:52.020 回答
0

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

Redis 通过 SETNX 肯定具有锁定功能。Redis 在性能方面与 Memcache 具有竞争力。

http://redis.io/commands/setnx

SETNX 键值

如果键不存在,则将键设置为保存字符串值。在这种情况下,它等于 SET。当 key 已经持有值时,不进行任何操作。SETNX 是“SET if Not e X isists”的缩写。

于 2015-01-19T05:50:59.010 回答