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即可; } }