在 WordPress 中使用 Memcached CAS 乐观锁-WordPress开发教程
什么是 Memcached CAS 协议 Memcached 于 1.2.4 版本新增 CAS(Check and Set)协议类同于 Java 并发的 CAS(Compare and Swap)原子操作,处理同一 item 被多个线程更改过程
什么是 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);
原创文章,作者:DavidWu,如若转载,请注明出处:https://www.davidwu.net/archives/121650

服务项目 | 服务内容 | 收费标准(元) |
---|---|---|
开发定制 | WordPress主题/插件开发定制 | (以最终需求为准) |
主题/插件汉化 | 汉化团队WordPress主题/插件,翻译率95% | (以标的主题/插件的句子数量为准) |
服务器环境配置 | 基于您现有服务器,搭建配置网站运行环境,结合我们多年来实战经验,可完美支持WordPress等PHP程序运行,并配置伪静态规则、优化目录权限等问题。服务器我们强烈推荐使用Linux系统。 | 100元/次 |
网站托管 | 若贵站目前尚无技术人员,无法完成服务器环境配置,可选择我们的网站托管服务,直接交付正常运行的WordPress站点,并且无需担心服务器的后续维护工作,一切都由我们来帮您完成。 | 标配套餐:1000元/年/站点 高配套餐:联系客服获取 |
网站加速优化 | 从服务器后端配置优化到WordPress数据库缓存、前端页面缓存、JS和CSS压缩合并,全方位优化网站加载速度,实现秒开。(此服务仅针对(云)服务器/VPS) | 500元/次(仅站内优化200元/次) |
主题配置 | 本站所有主题均支持,可快速实现,若有任何问题可以咨询客服解决,若您希望我们提供配置服务,可选购此服务。 | 英文主题安装 60元/次 汉化主题安装 30元/次 |
HTTPS配置 | HTTPS已经不断普及,并且有着更高的安全性以及SEO上的优待。该服务收取的为服务费,SSL证书产生的费用请自行承担。 | 100元/次 |
网站搬家 | 迁移网站所有文件和数据库信息、网站相关配置的调整、以及迁移中的疑难问题故障排除。 | 标准收费:500元/次 若网站数据量大,需协商 |
网站运维 | 提供整站的运维服务,保证网站正常运行。包含:网站故障定位及排除、网站数据备份和恢复、网站攻击及木马等问题的处理等 | 标准收费:2000元/年 IP 5000以上需协商 |