Dynamic cache get($cacheKey);// 是否需要更新缓存$update = true;$nowTime = time();if( !empty($result) ) {$result = @ unserialize($result);$update = $result['_expires'] $nowTime;}if($update) {$lockKey = 'lock_'.$cacheKey;// 锁,防雪
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; } }