-
在不使用任何像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');
有了Predis,你会有这样的东西。。。
$redis = new PredisClient('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'
]
有两种方法可以连接Redis
并在PHP中使用此库。
1( 从使用客户端Redis库http://redis.io/clients:-PHP有5种,你可以随意使用其中的任何一种(权衡每种的利弊(。一旦你有了一个客户端库,它的平面jane很简单。例如,使用Predis Library
require "predis/autoload.php";
PredisAutoloader::register();
try {
$redis = new PredisClient(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();
}
有关getting
、setting
和increment
函数的更多详细信息,请查看链接的github页面。
2( 如果您选择继续从shell中使用Predis
,然后在服务器上创建一个shell(.sh(脚本,将上面的4个命令(以及您想在事务中执行的任何命令(放置在此脚本中,如下所示。
#!/bin/bash
#<Your transaction commands go below here>
将该文件重命名为<filename>.sh
,并使用PHP
代码中的exec
函数将其作为shell命令执行。
exec('sh <filename>.sh');