避免緩存雪崩的一種想法

將緩存時間隨機變化,若是系統的緩存數據(key)比較多,隨機區間能夠放大些。php

一個php的隨機緩存時間示例緩存

/**
 * 隨機緩存時間 避免緩存雪崩效應
 * @param $time
 * @return mixed
 */
public static function randomCacheTime($time){
    $time = intval($time);
    $plus = rand(0 , 1);
    if($plus){
        return $time + rand(0, 60);
    }else{
        return $time - rand(0, 60);
    }
}

使用示例dom

/**
 * 獲取名稱
 * 緩存1小時
 * @param $id
 * @return string
 */
public static function queryName($id){
    if(!$id){
        return '';
    }
    $key = 'name_'.$id;
    $name= S($key);
    if(!$name){
        $name= M('names')->where(array('id' => $id))->getField('name');
        S($key, $name, self::randomCacheTime(3600));
    }
    return $name;
}
相關文章
相關標籤/搜索