不使用像predis这样的库,从PHP进行Redis调用的最佳方法是什么?
我目前使用exec
命令,但想知道是否有更好的方法。
exec('redis-cli SET foo bar');
其次,您如何进行交易?我可以从命令行中这样做......
$ redis-cli
redis 127.0.0.1:6379> MULTI
OK
redis 127.0.0.1:6379> INCR FOO
QUEUED
redis 127.0.0.1:6379> INCR BAR
QUEUED
redis 127.0.0.1:6379> EXEC
1) (integer) 1
2) (integer) 1
但是,如果我尝试这样做,每个单独的命令都会单独执行,而不是在同一个事务中,我最终得到错误(error) ERR EXEC without MULTI
exec('redis-cli MULTI');
exec('redis-cli INCR FOO');
exec('redis-cli INCR BAR');
exec('redis-cli EXEC');
答案 0 :(得分:2)
有两种方法可以与Redis
连接,并在PHP中使用此库。
1)使用http://redis.io/clients中的客户端Redis库: - 有5个可用于PHP,您可以自行决定使用其中任何一个(将权衡各自的优缺点)。一旦你有一个客户端库,它的平面简单。例如,使用Predis Library
require "predis/autoload.php";
Predis\Autoloader::register();
try {
$redis = new Predis\Client(array(
"scheme" => "tcp",
"host" => "127.0.0.1",
"port" => 6379));
echo "Successfully connected to Redis";
}
catch (Exception $e) {
echo "Couldn't connected to Redis";
echo $e->getMessage();
}
检查链接的github页面,详细了解getting
,setting
和increment
函数。
2)如果你选择继续在shell中使用Predis
,那么在你的服务器上创建一个shell(.sh)脚本,放置上面的4个命令(以及你想在一个命令中执行的任何命令)在这个脚本中的事务)如下。
#!/bin/bash
#<Your transaction commands go below here>
将此文件重命名为<filename>.sh
,并使用exec
代码中的PHP
函数将其作为shell命令执行。
exec('sh <filename>.sh');
答案 1 :(得分:1)
使用Predis,您可以拥有类似......
$redis = new \Predis\Client('tcp://ip.address:port');
$redis->multi();
$redis->incr('foo');
$redis->incr('bar');
$redis->lrange('mylist', 0, -1);
$data = $redis->exec();
并且$ data可能如下所示,具体取决于那些计数器的开头......:
[
1, // foo
2, // bar
['fish', 'beans', 'bar', 'baz'], // whatever was in 'mylist'
]