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

在 WordPress 中使用 Memcached CAS 乐观锁

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

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

广告位-300PX*250PX
最新发布
盐水花生的制作方法(让你在家也能享受美味的盐水花生)

盐水花生的制作方法(让你在家也能享受美味的盐水花生)

盐水花生的制作方法(让你在家也能享受美味的盐水花生)
盐水花生是一种非常受欢迎的小吃,不仅在路边摊上可以买到,而且在家也能轻松制作。下面将为大家介绍盐水花生的制作方法。准备食材——花生、盐、水在开始做盐水花生之前,我们需要准备好所需的食材。这些食材包括花生、盐和水。花生要用新鲜的,最好不要用已经发霉或变质的。清洗花生清洗花生是制作盐水花生的重要步骤。将...
芝士章鱼小丸子,手把手教你做(传承日式美食,美味满满的小丸子,营养又健康)

芝士章鱼小丸子,手把手教你做(传承日式美食,美味满满的小丸子,营养又健康)

芝士章鱼小丸子,手把手教你做(传承日式美食,美味满满的小丸子,营养又健康)
日式美食一直以来深受大家的喜爱,而其中的小丸子更是备受推崇。除了其独特的口感外,小丸子的制作方法也因其简单易学而广受欢迎。本文将以芝士章鱼小丸子为主题,为大家详细介绍其做法。准备原材料在制作芝士章鱼小丸子前,我们需要准备好以下原材料:章鱼片、鲜虾、芝士、寿司米、水、味噌汤、葱花、柠檬片等。将寿司米用...
教你做香酥烤鸡腿(美食制作的艺术,轻松做出口感香脆的鸡腿)

教你做香酥烤鸡腿(美食制作的艺术,轻松做出口感香脆的鸡腿)

教你做香酥烤鸡腿(美食制作的艺术,轻松做出口感香脆的鸡腿)
鸡腿是很多人喜欢的食物之一,不仅营养丰富,口感也非常好。而香酥烤鸡腿更是让人回味无穷。今天,我要和大家分享一下如何做出香酥可口的烤鸡腿,让你在家就能享受到美味的享受。一:选购优质食材为了做出美味的烤鸡腿,首先要选购优质的食材。新鲜的鸡腿肉质细嫩,没有异味,而且能保证肉质的弹性和口感。此外,在选择调料...
手工番薯泥的做法(用心制作,健康美味)

手工番薯泥的做法(用心制作,健康美味)

手工番薯泥的做法(用心制作,健康美味)
健康饮食已成为当今人们追求的生活方式,而自己动手制作美味健康的食品更是一种享受。番薯泥作为一道经典美食,在日常生活中备受青睐。下面我们就来分享一下自制番薯泥的做法,让大家可以在家轻松制作出美味健康的番薯泥。1.选购新鲜番薯选购时以颜色均匀,表皮光滑无伤痕为宜,大小适中的番薯为佳。2.去皮切块将番薯去皮后...