redis服务器缓存数据库查询出来的数据

  利用redis做缓存服务器来缓解数据库查询压力是非常有效也是非常有必要的, 当用户第一次点击页面的时候查询数据库, 然后将查询结果缓存在redis服务器中,缓存时间随你的数据改变时间而定,这样可大大降低数据库压力;下面是具体函数方法;

  查询数据库操作这里就不多说了, 这里主要说关于redis缓存方面的技术操作;

  

public function getSqlVal(){
    //获取参数列表,这个参数随你需求而定,一般可能需要传入dbname,查询方式如fetchAll,查询语句等
    $argv = func_get_args();
   //假设这里现在只传入dbName和sql语句
    $dbName = $argv[0];
    $sql = $argv[1];
    //现在把这个参数列表转成md5之后作为存redis的key值
    $md5SqlKey = MD5(serialize($argv));
    
    //下面通过一个redis函数来进行存取数据
    $res = getRedisData($md5SqlKey);
    //如果取到数据,说明已经缓存在redis服务器中, 直接取数据就好, 如果没有数据, 则再去数据库查询数据,再讲查询的数据存在redis服务器中
    if(!empty($res))  {
         return $res;  
    }
    //后面是查询数据库操作,查询结果返回在$res中
    getRedisData($md5SqlKey,$res);  //讲返回结果存在redis中
    return $res;
      
}
getRedisData这个函数的封装:
//这里$key就是传入的md5处理过的键,$value是要存的数据, 如果为空代表取数据,不为空折是存数据,time是缓存时间,不设置默认系统设置时间
function getRedisData($key,$value=null,$time=null){
    //首先这里需要实例化redis对象,redis的封装我这里就不写了,到这里肯定会有自己的封装
    $redis = new Redis();
    if($value == null){
        return $redis->get($key)  ;
    }else{
         if($time==null){
             $timeOut = 2*60;//过期时间默认,可自行设置
        }else{
             $timeOut = $time;
        }
        $redis->set($key,serialize($value),$timeOut) //这里用serialize函数是序列化这个结果集,取的时候直接unserialize即可;
    }
}    

 

posted @ 2016-07-05 14:47  蓝色的露珠  阅读(12293)  评论(0编辑  收藏  举报