给WordPress添加 Memcached CAS 协议方法
在WordPress的object-cache.php我们可以增加下面这两个函数:
function wp_cache_get_with_cas( $key, $group = '', &$cas_token = null ) { global $wp_object_cache; return $wp_object_cache->get_with_cas( $key, $group, $cas_token ); } function wp_cache_cas( $cas_token, $key, $data, $group = '', $expire = 0 ) { global $wp_object_cache; return $wp_object_cache->cas( $cas_token, $key, $data, $group, $expire ); }
然后在对应的 WP_Object_Cache 中添加相应的方法:
function get_with_cas( $id, $group = 'default', &$cas_token=null){ $key = $this->key( $id, $group ); if(defined('Memcached::GET_EXTENDED')) { $result = $this->mc->get($key, null, Memcached::GET_EXTENDED); if ($this->mc->getResultCode() == Memcached::RES_NOTFOUND) { $value = false; }else{ $value = $result['value']; $cas_token = $result['cas']; } }else{ $value = $this->mc->get($key, null, $cas_token); if ($this->mc->getResultCode() == Memcached::RES_NOTFOUND) { $value = false; } } return $value; } function cas( $cas_token, $id, $data, $group = 'default', $expire = 0 ) { $key = $this->key( $id, $group ); if ( is_object( $data ) ) { $data = clone $data; } $this->cache[ $key ] = $data; return $this->mc->cas( $cas_token, $key, $data, $expire ); }
用法:
$cas_token = ''; $item = wp_cache_get_with_cas($key, $cache_group, $cas_token); // 对 $item 进行一些处理 wp_cache_cas($cas_token, $key, $item, $cache_group, DAY_IN_SECONDS);
文章地址:https://www.ruzw.com/html/201805/523.html