当前位置 : 主页 > 网络编程 > PHP >

Dynamic cache

来源:互联网 收集:自由互联 发布时间:2021-06-28
Dynamic cache get($cacheKey);// 是否需要更新缓存$update = true;$nowTime = time();if( !empty($result) ) {$result = @ unserialize($result);$update = $result['_expires'] $nowTime;}if($update) {$lockKey = 'lock_'.$cacheKey;// 锁,防雪
Dynamic cache
 get($cacheKey);

		// 是否需要更新缓存
		$update = true;
		$nowTime = time();
		
		if( !empty($result) ) {
			$result = @ unserialize($result);
			$update = $result['_expires'] < $nowTime;
		}
		
		if($update) {
			$lockKey = 'lock_'.$cacheKey;
			
			// 锁,防雪崩
			if( $redis->setnx($lockKey, 1) ) {
				// 获取需要缓存的数据
				$result = SomeClass::getData();
				
				// 数据过期时间, 需要根据这个时间, 判断是否更新缓存
				$result['_expires'] = $nowTime + max(1, (int)$expires);
				
				// 长时间缓存数据, 在这个期间遇到争锁的情况, 也能正常返回数据
				$redis->setex($cacheKey, 12*3600, serialize($result));
				
				// 释放锁
				$redis->del($lockKey);
			} else {
				// 防止死锁, -1 表示永不过期
				if($redis->ttl($lockKey) == -1) {
					$redis->expire($lockKey, 10);
				}
			}
		}
		
		return $result;
	}
}
网友评论