Php 使用predis在redis中存储mysql查询
我想使用redis缓存在redis中存储mysql查询,第一次它按预期工作(因为redis中没有键)并执行查询,但后来Php 使用predis在redis中存储mysql查询,php,mysql,redis,predis,Php,Mysql,Redis,Predis,我想使用redis缓存在redis中存储mysql查询,第一次它按预期工作(因为redis中没有键)并执行查询,但后来$rs=@unserialize($redis->get($key)没有返回任何结果;我尝试了许多解决方案,但没有成功,我的代码如下: require __DIR__ . '/vendor/autoload.php'; Predis\Autoloader::register(); $redis = new Predis\Client(array( "scheme" =&
$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;
您需要迭代查询结果,
mysql\u query
返回的资源无法序列化
您可以尝试以下方法:
$key = "sql_cache:" . md5($sql);
// If $key exists get and unserialize it, otherwise set $data to empty array
$data = $redis->exists($key)
? unserialize($redis->get($key))
: array();
if (empty($data)) {
$rs = mysql_query($sql);
if ($rs === false) {
die(mysql_error());
}
// Iterate through results...
while ($row = mysql_fetch_assoc($rs)) {
$data[] = $row;
}
// Put data into cache for 1 hour
$redis->set($key, serialize($data));
$redis->expire($key, 3600);
}
echo 'data= '.$data;
$nr = count($data);
echo "Number of rows: " . $nr;
您需要迭代查询结果,
mysql\u query
返回的资源无法序列化
您可以尝试以下方法:
$key = "sql_cache:" . md5($sql);
// If $key exists get and unserialize it, otherwise set $data to empty array
$data = $redis->exists($key)
? unserialize($redis->get($key))
: array();
if (empty($data)) {
$rs = mysql_query($sql);
if ($rs === false) {
die(mysql_error());
}
// Iterate through results...
while ($row = mysql_fetch_assoc($rs)) {
$data[] = $row;
}
// Put data into cache for 1 hour
$redis->set($key, serialize($data));
$redis->expire($key, 3600);
}
echo 'data= '.$data;
$nr = count($data);
echo "Number of rows: " . $nr;
您应该删除所有被抑制的函数调用,即
@
之前的
,mysql\u num\u行
等,以排除这些调用中可能出现的错误。您应该删除所有被抑制的函数调用,即@
之前的未序列化
,mysql\u num\u行代码>,等等。只是为了排除这些调用中可能出现的错误。您需要在$data[]=$row
之后添加分号,否则它将生成PHP解析错误。Thanx供您帮助。因此,这基本上是一种不写通的更新方法,非常好。关于如何修改代码并使用它“清除”的任何建议任何受update、insert、delete(直写方法)影响的查询@OAH理论上,您将对现在已删除/更新的行执行类似的“SELECT”语句查找一旦您执行删除/更新操作。最好您知道应用程序使用的确切查找查询,因为这会降低清除/刷新的复杂性。该过程将根据您正在执行的操作对缓存结果执行删除/更新。如果您需要帮助,请在您完成att后发布新问题清空了一些东西,如果你有任何问题!@segFault我会尝试一下,并会让你知道。Thx一吨提示:)你需要在$data[]=$row
之后添加分号,否则它将生成PHP解析错误。Thanx非常感谢您的帮助,所以基本上这是一种不写通的更新方法,非常好。关于如何修改代码并使用它“清除”受更新、插入、删除(直写方法)影响的任何查询的任何建议@OAH理论上,您将在执行删除/更新操作后立即对现在已删除/更新的行执行类似的“SELECT”语句查找。您最好知道应用程序使用的确切查找查询,因为这样可以减少清除/刷新的复杂性。该进程将根据您正在执行的操作对缓存的结果执行删除/更新。如果你在这方面需要帮助,请在你尝试了类似的事情之后,如果你有任何问题,请发布一个新的问题@我会试试看,一定会让你知道的。小费一吨泰铢:)