当前所在位置: 首页>>百科全书

在 WordPress 中使用 Memcached CAS 乐观锁

发布时间:2025-10-19 15:23:43 本站作者 【 字体: 】 浏览:85 次

什么是 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 技巧:强制设置二级分类

最新发布
Office2019激活密钥,office2019专业版产品激活码,2026.5最新分享

Office2019激活密钥,office2019专业版产品激活码,2026.5最新分享

Office2019激活密钥,office2019专业版产品激活码,2026.5最新分享
以下是 Office2019 Pro Plus 激活 KEY:G4GBV-4N9VP-JYG8G-H7W8M-HVB9BH38JK-NC6WH-7PFFF-P2FVR-QGQ2TX2XNB-G4XQY-QXBDK-DR8B3-9D9GMKX83N-WJ68W-VBQW8-MC9TG-HFVPT3FPNR-B68HC-QCXCH-M87GY-CWHPTF8HGP-3NGYV-BFYW7-GKWH3-JT26GKRCNX-TPWG9-KJ22P-HMX7K-C7MCT2YNHC-YPKJW-3BVGC-3DPP7-9BWJ6QBGTN-TGKK8-RCGBB-DTJBH-8HXGMVN...
Office2021密钥激活码,Office2021专业版产品激活密钥最新2026

Office2021密钥激活码,Office2021专业版产品激活密钥最新2026

Office2021密钥激活码,Office2021专业版产品激活密钥最新2026
以下是 Office2021 Pro Plus 免费激活 KEY:83C28-2NYWG-W96CX-76HMW-W47RXA4XV7-QP9JN-E7FCB-VQFRD-4NLKC648VN-VYYC7-2PXHJ-J8CXK-FRKJKBJPC4-D2N6M-KBQR6-6YWY7-CYXJKWQ2N8-G3RGM-C3B78-KX6MP-RVYFXBVP7M-NYJ7D-443Q4-PJ7V3-FM8M98VHYN-BP36X-P6VY7-HK8DT-GMXJKAD3XE-7FZDV-VMMB9-6M5SD-VODYFFMWMQ-H8N8X-98W...
office2010 产品密钥,office2010永久激活密钥最新分享包括图文教程

office2010 产品密钥,office2010永久激活密钥最新分享包括图文教程

office2010 产品密钥,office2010永久激活密钥最新分享包括图文教程
说明:office2010 零售版密钥和 kms 密钥激活方法不一样,下面都有提供对应的激活流程。零售版密钥有很大可能性失效,毕竟零售版密钥不是免费的,建议大家使用永久免费的 kms 密钥激活或者使用激活工具一键激活。office 激活工具 kms|office 破解工具 v11.2(office2010/2013/2016)office 激活软件是针对 office vl 版的激活...
office 2021正式版激活密钥,office2021专业正式版产品激活码免费分享

office 2021正式版激活密钥,office2021专业正式版产品激活码免费分享

office 2021正式版激活密钥,office2021专业正式版产品激活码免费分享
office2021 激话密钥如下所示:GRBR4-J4N3M-KTX9C-JM4PJ-J8HPT (暴风侠应用的是此激话密钥)NJHVR-FK6XR-M97MB-P8CXD-FM4PJNXVJY-X9T8G-Y6RWG-8VQ7V-PWHPTW8W6K-3N7KK-PXB9H-8TD8W-BWTH9N9J9Q-Q7MMP-XDDM6-63KKP-76FPM9DP6T-9AGWG-KWV33-9MPC8-JDCVF7G2HE-JR8KL-ABB9D-Y7789-GLNFLU2PWU-H7D9H-69T3B-JEYC2-3R2NGR8R8...