【发布时间】:2016-01-03 14:42:01
【问题描述】:
我想用redis缓存在redis中存储mysql查询,第一次按预期工作(因为redis中没有key)并执行查询,但后来$rs = @unserialize( $redis->get($key)什么也没返回;我尝试了很多解决方案,但没有运气,我的代码如下:
require __DIR__ . '/vendor/autoload.php';
Predis\Autoloader::register();
$redis = new Predis\Client(array(
"scheme" => "tcp",
"host" => "127.0.0.1",
"port" => 6379,
"password" => "testRedis"));
$sql="SELECT * FROM news where status=1 and (title like \"%$sword%\" or body like \"%$sword%\" or name like \"%$sword%\" or rss like \"%$sword%\")";
$key = "sql_cache:" . md5($sql);
if ($rs = @unserialize( $redis->get($key) ) === false){
$rs = mysql_query($sql)or die(mysql_error());
// Put data into cache for 1 hour
$redis->set($key, serialize($rs));
$redis->expire($key, 3600);
}
echo 'rs= '.$rs;
$nr = @mysql_num_rows($rs);
echo "Number of rows: " . $nr;
【问题讨论】:
-
您应该删除所有被抑制的函数调用,即。
@前面的unserialize、mysql_num_rows等只是为了排除这些调用可能存在的错误。