PHP使用Memcache时模拟命名空间及缓存失效问题的解决
缓存命名空间memcache本身不支持命名空间,但是我们可以利用 memcache本身的机制,来模拟命名空间。比如:你要清除一组数据,就需要用到命名空间,来看这样一个例子,说明写在了注释里: public function index()
{ global $mc_wr; // 获取命名空间 $otherParms = 'select * from user LIMIT 1'; // 获取当前key下的缓存 echo $val; public function clear_ns() memcache缓存失效问题在大并发的场合,当cache失效时,大量并发同时取不到cache,会同一瞬间去访问db并回设cache,可能会给系统带来潜在的超负荷风险。 解决方法:方法一在load db之前先add一个mutex key,mutex key add成功之后再去做加载db,如果add失败则sleep之后重试读取原cache数据。为了防止死锁,mutex key也需要设置过期时间。伪代码如下方法二在value内部设置1个超时值(timeout1),timeout1比实际的memcache timeout(timeout2)小。当从cache读取到timeout1发现它已经过期时候,马上延长timeout1并重新设置到cache。然 后再从数据库加载数据并设置到cache中。伪代码如下// load the latest value from db v = db.get(key); v.timeout = KEY_TIMEOUT; memcache.set(key,value,KEY_TIMEOUT * 2); memcache.delete(key_mutex); } else { sleep(50); retry(); } } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |