在 WordPress 中使用 Memcached CAS 乐观锁
什么是 Memcached CAS 协议
Memcached 于 1.2.4 版本新增 CAS(Check and Set)协议类同于 Java 并发的 CAS(Compare and Swap)原子操作,处理同一 item 被多个线程更改过程的并发问题。
在 Memcached 中,每个 key 关联有一个 64-bit 长度的 long 型惟一数值,表示该 key 对应 value 的版本号。这个数值由 Memcached server 产生,从1开始,且同一 Memcached server 不会重复。在两种情况下这个版本数值会加1:
新增一个key-value对;
对某已有key对应的value值更新成功。删除item版本值不会减小。
如何在 PHP 使用 Memcached CAS
Memcached::cas() 执行一个“检查并设置”的操作,因此,它仅在当前客户端最后一次取值后,该 key 对应的值没有被其他客户端修改的情况下, 才能够将值写入。检查是通过 cas_token 参数进行的, 这个参数是 Memcache 指定给已经存在的元素的一个唯一的64位值, 怎样获取这个值请查看 Memcached::get*() 系列方法的文档。注意:这个值作为 double 类型是因为PHP的整型空间限制。
这是 Memcached 扩展比 Memcache 扩展一个非常重要的优势, 在这样一个系统级(Memcache自身提供)的冲突检测机制(乐观锁)下, 我们才能保证高并发下的数据安全。
给 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);
栏 目:WordPress
本文标题:在 WordPress 中使用 Memcached CAS 乐观锁
本文地址:https://zz.feitang.co/CMSjiaocheng/25159.html
您可能感兴趣的文章
- 11-11wordpress导航菜单新窗口打开的设置方法
- 11-11WP-PostViews插件如何修改文章阅读数
- 11-11wordpress附件保存目录改为年月日和上传文件重命名为时间戳
- 11-11WordPress 上传媒体库文件重命名 全格式支持
- 11-11解决wordpress安装后更新或者上传文件权限不足的问题
- 11-11wordpress实现主动推送+熊掌号推送同步进行
- 11-11WordPress 添加友情链接设置 nofollow 属性
- 11-11WordPress 实现 wp_list_bookmarks 自定义友情链接排除调用
- 11-11WordPress首页指定或排除某分类文章显示
- 11-11WordPress不同分类调用不同的文章模板


阅读排行
推荐教程
- 09-22wordpress如何添加描述
- 11-11wordpress附件保存目录改为年月日和上传文件重命名为时间戳
- 10-19纯代码给WordPress网站添加独立下载页面功能
- 11-11WordPress之给文章内容中间插入广告的实现方法
- 10-18wordpress无插件调用随机文章的方法
- 10-18WordPress 技巧:WordPress 后台也使用七牛云存储
- 10-24Win10无法调节声音怎么办?Win10无法调节声音的解决方法
- 10-19WordPress上传图片HTTP错误的解决方法
- 10-18让注册用户可以上传自己的头像的WordPress插件-WP User Avatar v2.
- 11-11国外WordPress精美主题如何DIY汉化成中文版呢?





