如何在PHP中执行Redis事务?

如何在PHP中执行Redis事务?,php,redis,Php,Redis,如果不使用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

如果不使用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
    (error)ERR EXEC without MULTI

    exec('redis-cli MULTI');
    exec('redis-cli INCR FOO');
    exec('redis-cli INCR BAR');
    exec('redis-cli EXEC');
    

  • 有两种方法可以连接到Redis并在PHP中使用此库

    1) 从以下位置使用客户端Redis库:- PHP有5个可用选项,您可以根据自己的判断和意愿使用其中任何一个(权衡每一个选项的利弊)。一旦您有了一个客户端库,它就变得简单了。例如

    查看链接的github页面,了解有关
    获取
    设置
    增量
    功能的更多详细信息

    2) 如果您选择继续使用shell中的
    Predis
    ,然后在服务器上创建一个shell(.sh)脚本,将上述4个命令(以及您希望在事务中执行的任何命令)放置在此脚本中,如下所示

    #!/bin/bash
    #<Your transaction commands go below here>
    

    有了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();
    
    美元数据可能如下所示,具体取决于这些计数器的起始位置…:

    [
      1, // foo 
      2, // bar   
      ['fish', 'beans', 'bar', 'baz'], // whatever was in 'mylist'    
    ]
    

    Predis听起来不错,但是您知道有什么方法可以不用客户端库在php中进行事务处理吗?
    $redis = new \Predis\Client('tcp://ip.address:port');
    $redis->multi();
    $redis->incr('foo');
    $redis->incr('bar');
    $redis->lrange('mylist', 0, -1);
    $data = $redis->exec();
    
    [
      1, // foo 
      2, // bar   
      ['fish', 'beans', 'bar', 'baz'], // whatever was in 'mylist'    
    ]