• PHP 使用 Redis


    PHPRedis 项目地址
    安装步骤参考链接

    安装 Redis 扩展

    PHPRedis 已经封装为 PHP 的官方扩展了,只要安装了这个扩展,重启 PHP-FPM 后即可使用 PHPRedis。

    从 pecl 安装

    下面命令会安装最新的稳定版本的 PHP 扩展:

    pecl install redis

    源码编译安装(仅限 Linux)

    可以从源码构建这个 PHP 扩展:

    phpize
    ./configure [--enable-redis-igbinary] [--enable-redis-lzf [--with-liblzf[=DIR]]]
    make && make install

    对 Windows 下的编译安装如果有兴趣,可以参考 这里

    从二进制包安装

    大多数发行版都会提供这个扩展的预编译的二进制包。安装完成后记得重启 php-fpm 或 apache。

    Windows

    https://pecl.php.net/package/redis 这个页面下载 DLL 文件,放入指定位置,并修改 php.ini 文件指定扩展位置。

    extension_dir = "/path/to/php/extensions" //扩展所在路径
    
    extension=redis.so // 扩展名称

    Fedora

    Fedora 用户可以从官方仓库安装。注意区分版本。

    Fedora ≤ 28, Version 3 ,安装 php-pecl-redis 包:

    dnf install php-pecl-redis

    Fedora ≥ 27, Version 4 ,安装 php-pecl-redis4 包:

    dnf install php-pecl-redis4

    RHEL / CentOS

    从 EPEL 仓库安装 php-pecl-redis 包:

    yum install php-pecl-redis

    PHPRedis 基本用法

    PHPRedis 提供了通过 PHP 使用 Redis 的 API,详细的文档可以 参考项目文档
    示例代码可以 参考这里

    PHPRedis 中的方法,基本上都返回 TRUE 或FALSE。

    Redis 的代码结构

    Redis 提供了两个类和几个预定义常量:

    • Class Redis:用于创建 Redis 客户端,用法:$redis = new Redis();
    • Class RedisException:如果无法连接 Redis 服务器(服务器宕机、过载等连接问题),会抛出这个异常。只要服务器可以连接,就不会抛出这个异常(例如命令有无、Key 不存在等问题,只会返回 FALSE)
    • 预定义常量:Redis 的数据类型
      Redis::REDIS_STRING - String
      Redis::REDIS_SET - Set
      Redis::REDIS_LIST - List
      Redis::REDIS_ZSET - Sorted set
      Redis::REDIS_HASH - Hash
      Redis::REDIS_NOT_FOUND - Not found / other

    连接 Redis

    • connect, open:连接到一台服务器
    • pconnect, popen:持久连接到一台服务器,参数类似 connect 和 open
    • auth:向服务器认证,注意,密码会以明文传输
    • select:切换当前连接使用的数据库
    • swapdb:切换两个 Redis,原子地将一个 Redis 数据库与另一个 Redis 数据库交换,版本受限:>= 4.0.0
    • close:关闭连接
    • setOption:设置客户端选项
    • getOption:获取客户端选项
    • ping:向服务器发送 Ping 请求
    • echo:回显指定的字符串

    connect, open

    参数如下:

    • host:字符串,可以是 host 或 Linux 下的 socket 套接字
    • port:端口,可选
    • timeout:超时时间。浮点数,单位秒,可选,默认值 0 表示无限制
    • reserved:如果指定了 retry_interval ,就应该设置为 NULL
    • retry_interval:整型,单位毫秒,可选
    • read_timeout:浮点数,单位秒,可选,默认值 0 表示无限制

    返回值:

    • BOOL:成功建立连接返回 TRUE,失败则返回 FALSE

    示例:

    $redis->connect('127.0.0.1', 6379);
    $redis->connect('127.0.0.1'); // 默认使用的端口号是 6379
    $redis->connect('127.0.0.1', 6379, 2.5); // 超时时间是 2.5 秒
    $redis->connect('/tmp/redis.sock'); // unix domain socket
    $redis->connect('127.0.0.1', 6379, 1, NULL, 100); // 超时时间是 1 秒,发起重新连接之前有 100ms 的延迟

    auth

    参数:密码,字符串
    返回值:

    • BOOL:认证成功则返回 TRUE,失败则返回 FALSE
    $redis->auth('myPass');

    select

    参数:整型,要使用的数据库的编号
    返回值:

    • BOOL:成功则返回 TRUE,失败则返回 FALSE

    setOption

    参数:参数名和参数值

    返回值:

    • BOOL:成功则返回 TRUE,失败则返回 FALSE
    $redis->setOption(Redis::OPT_SERIALIZER, Redis::SERIALIZER_NONE);  // 不序列化数据
    $redis->setOption(Redis::OPT_SERIALIZER, Redis::SERIALIZER_PHP);   // 使用内建的 serialize/unserialize
    $redis->setOption(Redis::OPT_SERIALIZER, Redis::SERIALIZER_IGBINARY);  // 使用 igBinary serialize/unserialize
    
    $redis->setOption(Redis::OPT_PREFIX, 'myAppName:');    // 对所有的 key 使用自定义的前缀
    
    /* 
       SCAN 命令族的选项,指示是否抽象来自用户的空结果。如果设置为SCAN_NORETRY(默认值),
       phpredis 将一次发出一个SCAN命令,有时返回空数组。如果设置为SCAN_RETRY,phpredis
       将重试scan命令直到返回 key 或 Redis 返回零的迭代器
    */
    $redis->setOption(Redis::OPT_SCAN, Redis::SCAN_NORETRY);
    $redis->setOption(Redis::OPT_SCAN, Redis::SCAN_RETRY);

    getOption

    返回设置的选项。

    示例:

    // 返回 Redis::SERIALIZER_NONE, Redis::SERIALIZER_PHP, 或 Redis::SERIALIZER_IGBINARY
    $redis->getOption(Redis::OPT_SERIALIZER);

    ping

    返回值:
    成功时返回字符串 +PONG。连接错误时抛出 RedisException。

    Server 服务器指令

    • bgRewriteAOF:向只支持追加的文件(Append-Only File)异步重写
    • bgSave:异步将数据集保存到磁盘(在后台运行)
    • config:设置或获取 Redis 服务器配置参数
    • dbSize:返回选中的数据库中 key 的个数
    • flushAll:删除所有数据库中所有的 key
    • flushDb:删除当前数据库中所有的 key
    • info:获取服务器的状态和统计信息
    • lastSave:获取上次保存数据到磁盘时的时间戳
    • resetStat:重置 info 方法返回的统计信息
    • save:异步将数据集保存到磁盘(前台,需等待)
    • slaveOf:使服务器成为另一个实例的从属服务器,或将其提升为主服务器
    • time:返回当前的服务器时间
    • slowLog:访问 Redis 的 slowLog 条目

    bgRewriteAOF 和 bgSave

    示例:

    $redis->bgRewriteAOF();
    $redis->bgSave();

    config

    参数:

    • 操作:GET 或 SET
    • 对于 SET 操作,需要 key。对于 GET 操作需要 glob-pattern,参考:http://redis.io/commands/config-get
    • 对于 SET 操作,还需要 value。

    返回值:

    • GET 操作会返回关联数组:key -> value
    • SET 操作返回布尔值

    示例:

    $redis->config("GET", "*max-*-entries*");
    $redis->config("SET", "dir", "/var/run/redis/dumps/");

    info

    返回关联数组形式的服务器信息。不指定参数时会返回所有的信息(类似 Redis 的 info 命令):

    127.0.0.1:6379> info
    # Server
    redis_version:3.2.12
    redis_git_sha1:00000000
    redis_git_dirty:0
    redis_build_id:3dc3425a3049d2ef
    redis_mode:standalone
    os:Linux 4.15.6-1.el7.elrepo.x86_64 x86_64
    arch_bits:64
    multiplexing_api:epoll
    gcc_version:4.8.5
    process_id:1251
    run_id:64c7b0402e7a1b327854c02265ee04523a63c8b0
    tcp_port:6379
    uptime_in_seconds:491886
    uptime_in_days:5
    hz:10
    lru_clock:8793321
    executable:/root/redis-server
    config_file:
    
    # Clients
    connected_clients:1
    client_longest_output_list:0
    client_biggest_input_buf:0
    blocked_clients:0
    
    # Memory
    used_memory:813480
    used_memory_human:794.41K
    used_memory_rss:6680576
    used_memory_rss_human:6.37M
    used_memory_peak:833424
    used_memory_peak_human:813.89K
    total_system_memory:4137517056
    total_system_memory_human:3.85G
    used_memory_lua:37888
    used_memory_lua_human:37.00K
    maxmemory:0
    maxmemory_human:0B
    maxmemory_policy:noeviction
    mem_fragmentation_ratio:8.21
    mem_allocator:jemalloc-3.6.0
    
    # Persistence
    loading:0
    rdb_changes_since_last_save:0
    rdb_bgsave_in_progress:0
    rdb_last_save_time:1535423155
    rdb_last_bgsave_status:ok
    rdb_last_bgsave_time_sec:0
    rdb_current_bgsave_time_sec:-1
    aof_enabled:0
    aof_rewrite_in_progress:0
    aof_rewrite_scheduled:0
    aof_last_rewrite_time_sec:-1
    aof_current_rewrite_time_sec:-1
    aof_last_bgrewrite_status:ok
    aof_last_write_status:ok
    
    # Stats
    total_connections_received:14
    total_commands_processed:209
    instantaneous_ops_per_sec:0
    total_net_input_bytes:6977
    total_net_output_bytes:82521
    instantaneous_input_kbps:0.01
    instantaneous_output_kbps:6.06
    rejected_connections:133
    sync_full:0
    sync_partial_ok:0
    sync_partial_err:0
    expired_keys:9
    evicted_keys:0
    keyspace_hits:77
    keyspace_misses:27
    pubsub_channels:0
    pubsub_patterns:0
    latest_fork_usec:807
    migrate_cached_sockets:0
    
    # Replication
    role:master
    connected_slaves:0
    master_repl_offset:0
    repl_backlog_active:0
    repl_backlog_size:1048576
    repl_backlog_first_byte_offset:0
    repl_backlog_histlen:0
    
    # CPU
    used_cpu_sys:344.30
    used_cpu_user:150.14
    used_cpu_sys_children:0.02
    used_cpu_user_children:0.00
    
    # Cluster
    cluster_enabled:0
    
    # Keyspace
    db0:keys=10,expires=0,avg_ttl=0

    可以将各种选项传递给 INFO(根据 Redis 文档),只返回感兴趣的内容。

    127.0.0.1:6379> info cpu
    # CPU
    used_cpu_sys:344.43
    used_cpu_user:150.19
    used_cpu_sys_children:0.02
    used_cpu_user_children:0.00

    参数:可选,例如 COMMANDSTATSCPU

    示例:

    $redis->info(); /* standard redis INFO command */
    $redis->info("COMMANDSTATS"); /* Information on the commands that have been run (>=2.6 only)
    $redis->info("CPU"); /* just CPU information from Redis INFO */

    slaveOf

    参数:
    主机加端口号,不指定参数时表示不再做 slave 。

    示例:

    $redis->slaveOf('10.0.1.7', 6379);
    /* ... */
    $redis->slaveOf();

    slowLog

    参数:

    • 操作(字符串):GET、LEN 或 RESET
    • 长度(integer)可选:GET 命令需要这个选项

    不同操作的返回值不同:

    • SLOWLOG GET:慢日志条目的关联数组
    • SLOGLOG LEN:整型,slowLog 的个数
    • SLOWLOG RESET:布尔值,取决于操作是否成功

    示例:

    // Get ten slowLog entries
    $redis->slowLog('get', 10);
    // Get the default number of slowLog entries
    
    $redis->slowLog('get');
    // Reset our slowLog
    $redis->slowLog('reset');
    
    // Retrieve slowLog length
    $redis->slowLog('len');

    KEY 和 STRING 字符串操作

    key 针对键的操作

    • del, delete, unlink:删除一个 key
    • dump:返回存储在指定键处的值的序列化版本
    • exists:判断 key 是否存在
    • expire, setTimeout, pexpire:设置 key 的过期时间
    • expireAt, pexpireAt:设置 key 在那一刻过期,UNIX 时间戳
    • keys, getKeys:找出所有匹配指定模式的 key
    • scan:扫描键空间中的键,Redis >= 2.8.0
    • migrate:以原子方式将 key 从一个 Redis 实例转移到另一个实例
    • move:将 key 移动到另一个数据库
    • object:检查 Redis 对象的内部
    • persist:删除 key 的过期时间
    • randomKey:从键空间中返回一个随机的 key
    • rename, renameKey:重命名 key
    • renameNx:仅在 key 不存在(not exist)的时候才重命名这个 key
    • type:判断存储在 key 中的数据的类型
    • sort:排序 LIST、SET 或 Sorted SET 中的元素
    • ttl, pttl:获取 key 的有效期
    • restore:使用先前通过 dump 获得的序列化值创建 key
    <?php
    
        //连接 Redis 服务
        ...
        // 获取数据
        $arr = $redis->keys("*");
        print_r($arr);

    STRING 针对字符串的操作

    • append:向一个 key 追加值
    • bitCount:计算字符串中的设置位数(Count set bits in a string)
    • bitOp:在字符串之间执行按位运算(Perform bitwise operations between strings)
    • decr, decrBy:减少 key 对应的字符串值
    • get:获取值
    • getBit:返回 key 对应的字符串值中 offset 处的位值
    • getRange:返回 key 对应的字符串值中的子字符串
    • getSet:设置 key 对应的字符串值,并返回旧值
    • incr, incrBy:增加 key 对应的字符串值
    • incrByFloat:按指定的数量增加 key 对应的浮点值
    • mGet, getMultiple:获取多个指定的 key 对应的值
    • mSet, mSetNX:为多个 key 设置指定的值
    • set:为一个 key 设置值
    • setBit:设置或清除 key 处存储的字符串值中的指定偏移处的位
    • setEx, pSetEx:同时设置 key 的值和过期时间
    • setNx:只有在 key 不存在时,才为其设置值
    • setRange:覆盖指定的 key 对应的字符串的一部分
    • strLen:获取指定的 key 对应的值的长度

    get

    返回值:字符串或 BOOL。如果 key 不存在则返回 FALSE。否则,返回 key 对应的值。

    示例:

    $redis->get('key');

    set

    对于 >= 2.6.12 的版本,可以使用额外的参数。

    参数:

    • Key
    • Value
    • 超时时间或选项数组(可选)。如果传的是整型,则 phpredis 会将其转为 SETEX,如果传的是数组,会尝试使用 >= 2.6.12 的版本所支持的扩展选项。

    返回值:如果命令执行成功,返回 TRUE。

    示例:

    $redis->set('key', 'value');
    
    // 会自动转为调用 SETEX
    $redis->set('key','value', 10);
    
    // 10 秒有效期,仅在 key 不存在时设置值
    $redis->set('key', 'value', Array('nx', 'ex'=>10));
    
    // 1000 毫秒有效期,仅在 key 存在时设置值
    $redis->set('key', 'value', Array('xx', 'px'=>1000));

    setex 和 psetex

    参数:Key TTL Value

    示例:

    $redis->setEx('key', 3600, 'value'); // 1 小时有效期
    $redis->pSetEx('key', 100, 'value'); // 0.1 秒有效期

    参数:key 的数组,或直接用不限数量的 key。

    注意:unlink 方法与使用 del 完全相同,unlink 命令是非阻塞的,并且将异步执行实际删除。需要 > = 4.0.0 的版本才支持。

    返回值:已删除的 key 的个数。

    示例:

    $redis->delete('key1', 'key2'); /* 返回 2 */
    $redis->delete(array('key3', 'key4')); /* 返回 2 */
    
    /* 如果版本 >= 4.0.0 可以使用 unlink */
    $redis->unlink('key1', 'key2');
    $redis->unlink(Array('key1', 'key2'));

    mGet 和 getMultiple

    如果有不存在的 key,返回的数组中对应的位置会被设置为 FALSE。

    参数:数组,包含与参数中的 key 相关的值的数组

    示例:

    $redis->set('key1', 'value1');
    $redis->set('key2', 'value2');
    $redis->set('key3', 'value3');
    $redis->mGet(array('key1', 'key2', 'key3')); /* array('value1', 'value2', 'value3');
    $redis->mGet(array('key0', 'key1', 'key5')); /* array(`FALSE`, 'value1', `FALSE`);

    mSet 和 mSetNx

    在一个原子命令中设置多个键值对。mSetNx 在所有键值对设置成功时,只会返回 TRUE。

    参数:键值对数组 array(key => value, …)

    返回值:TRUE 或 FALSE。

    示例:

    $redis->mSet(array('key0' => 'value0', 'key1' => 'value1'));
    var_dump($redis->get('key0'));
    var_dump($redis->get('key1'));

    输出:

    string(6) "value0"
    string(6) "value1"

    getSet

    参数:key value

    返回值:字符串,key 之前对应的值

    示例:

    $redis->set('x', '42');
    $exValue = $redis->getSet('x', 'lol'); // 返回 '42',并将 x 设置为 'lol'
    $newValue = $redis->get('x')'       // 返回 'lol'

    move

    将 key 移动到另一个数据库。Redis 中的数据库编号从 0 开始。

    参数:

    • key
    • dbindex,整型,要移动到的数据库的编号

    返回值:BOOL 值,成功返回 TRUE,失败返回 FALSE。e.

    示例:

    $redis->select(0); // 使用数据库 0
    $redis->set('x', '42');
    $redis->move('x', 1);  // 将 x 移动到数据库 1
    $redis->select(1); // 切换为数据库 1
    $redis->get('x');  // 返回 42

    expire、setTimeout 和 pexpire

    参数:

    • Key
    • ttl,整型值

    示例:

    $redis->set('x', '42');
    $redis->setTimeout('x', 3);    // 设置 3 秒钟的有效期
    sleep(5);
    $redis->get('x');      // 因为已经过期了,所以这里返回 `FALSE`

    expireAt 和 pexpireAt

    参数:

    • Key
    • UNIX 时间戳,整型值。

    示例:

    $redis->set('x', '42');
    $now = time(); // 当前时间戳, Unix 纪元(格林威治时间 1970 年 1 月 1 日 00:00:00)到当前时间的秒数
    $redis->expireAt('x', $now + 3);  // x 在 3 秒钟后失效
    sleep(5);
    $redis->get('x');      // 因为已经过期了,所以这里返回 `FALSE`

    keys 和 getKeys

    参数:pattern 模式,字符串类型,通配符是“*”。

    返回值:STRING 类型组成的数组。

    示例:

    $allKeys = $redis->keys('*');  // 查询所有的 key
    $keyWithUserPrefix = $redis->keys('user*');  // 查询 user 开头的 key

    type

    返回值:取决于 key 指向的数据的类型,返回值可能是:

    • string: Redis::REDIS_STRING
    • set: Redis::REDIS_SET
    • list: Redis::REDIS_LIST
    • zset: Redis::REDIS_ZSET
    • hash: Redis::REDIS_HASH
    • other: Redis::REDIS_NOT_FOUND

    示例:

    $redis->type('key');

    append

    参数:Key Value

    返回值:追加后的值的大小,整型值。

    示例:

    $redis->set('key', 'value1');
    $redis->append('key', 'value2'); /* 返回 12 */
    $redis->get('key'); /* 'value1value2' */

    getRange

    获取子字符串。注意:substr 已经废弃。

    参数:key start end

    示例:

    $redis->set('key', 'string value');
    $redis->getRange('key', 0, 5); /* 'string' */
    $redis->getRange('key', -5, -1); /* 'value' */

    setRange

    用指定的字符串替换 key 对应字符串的一部分。

    参数:key offset value

    返回值:修改后的字符串的长度。

    示例:

    $redis->set('key', 'Hello world');
    $redis->setRange('key', 6, "redis"); /* 返回 11 */
    $redis->get('key'); /* "Hello redis" */

    strLen

    示例:

    $redis->set('key', 'value');
    $redis->strlen('key'); /* 5 */

    getBit

    返回字符串中的一个位。

    参数:key offset

    返回值:位值,0 或 1,LONG 类型

    示例:

    $redis->set('key', "x7f"); // 0111 1111
    $redis->getBit('key', 0); /* 0 */
    $redis->getBit('key', 1); /* 1 */

    setBit

    改变字符串的一个位。

    参数:key offset value: bool or int (1 or 0)

    返回值:要替换的位在替换前的值,0 或 1,LONG 类型

    示例:

    $redis->set('key', "*");   // ord("*") = 42 = 0x2f = "0010 1010"
    $redis->setBit('key', 5, 1); /* returns 0 */
    $redis->setBit('key', 7, 1); /* returns 0 */
    $redis->get('key'); /* chr(0x2f) = "/" = b("0010 1111") */

    bitOp

    在多个 key 上指向位操作。

    参数:

    • operation:操作,”AND”, “OR”, “NOT”, “XOR”
    • ret_key:返回的 key
    • key1
    • key2…

    返回值:存储在目标 key 中的字符串的大小,LONG 类型

    sort

    对 list、set 或 sorted set 中的元素进行排序。

    参数:

    • Key
    • array(key => value, …):可选,示例如下:

      ‘by’ => ‘some_pattern_*’,
      ‘limit’ => array(0, 1),
      ‘get’ => ‘some_other_pattern_*’ or an array of patterns,
      ‘sort’ => ‘asc’ or ‘desc’,
      ‘alpha’ => TRUE,
      ‘store’ => ‘external-key’

    返回值:值组成的数组,或存储的元素个数(如果指定的话)。

    示例:

    $redis->delete('s');
    $redis->sAdd('s', 5);
    $redis->sAdd('s', 4);
    $redis->sAdd('s', 2);
    $redis->sAdd('s', 1);
    $redis->sAdd('s', 3);
    
    var_dump($redis->sort('s')); // 1,2,3,4,5
    var_dump($redis->sort('s', array('sort' => 'desc'))); // 5,4,3,2,1
    var_dump($redis->sort('s', array('sort' => 'desc', 'store' => 'out'))); // (int)5

    dump

    打印 Redis 数据库中的值,之后可以通过 RESTORE 命令将其传回 Redis。DUMP 返回的数据是 Redis 中存储的二进制。

    返回值:Redis 编码过的 key,如果 key 不存在则返回 FALSE。

    示例:

    $redis->set('foo', 'bar');
    $val = $redis->dump('foo');

    编码参考这个例子:

    127.0.0.1:6379> type hello
    string
    127.0.0.1:6379> dump hello
    "x00xc0x05ax00x9cx1dx8ax95x8bxe5fK"

    restore

    使用先前通过 dump 获得的序列化值创建 key。

    参数:

    • key
    • ttl:整型。设置 0 时表示一直有效
    • value:字符串(二进制)。Redis 编码的值(来自 DUMP 命令)。

    示例:

    $redis->set('foo', 'bar');
    $val = $redis->dump('foo');
    $redis->restore('bar', 0, $val); // The key 'bar', will now be equal to the key 'foo'

    migrate

    将 key 迁移到另一个 Redis 实例。Redis 在 3.0.6 版本之后支持一次迁移多个 key。

    参数:

    • host:字符串,目标主机
    • port:整型,TCP 端口号
    • key(s):字符串或数组
    • destination-db integer.:目标数据库的编号
    • timeout:这次迁移允许的最大时间
    • copy:boolean,可选。是否向 Redis 发送 COPY 标志
    • replace:boolean,可选。是否向 Redis 发送 REPLACE 标志

    示例:

    $redis->migrate('backup', 6379, 'foo', 0, 3600);
    $redis->migrate('backup', 6379, 'foo', 0, 3600, true, true); /* copy and replace */
    $redis->migrate('backup', 6379, 'foo', 0, 3600, false, true); /* just REPLACE flag */
    
    /* Migrate multiple keys (requires Redis >= 3.0.6)
    $redis->migrate('backup', 6379, ['key1', 'key2', 'key3'], 0, 3600);

    LIST 列表操作

    • blPop, brPop:删除并获取列表中的第一个/最后一个元素
    • bRPopLPush:从列表中弹出一个值,将其推送到另一个列表并返回它
    • lIndex, lGet:通过索引从列表中获取元素
    • lInsert:通过索引从列表中获取元素
    • lLen, lSize:获取列表的长度/大小
    • lPop:删除并获取列表中的第一个元素
    • lPush:将一个或多个值添加到列表中
    • lPushx:仅当列表存在时,才将值添加到列表中
    • lRange, lGetRange:从列表中获取一系列元素
    • lRem, lRemove:从列表中删除元素
    • lSet:通过索引设置列表中元素的值
    • lTrim, listTrim:将列表修剪到指定范围
    • rPop:删除并返回列表的最后一个元素
    • rPopLPush:删除并返回列表的最后一个元素,并将其追加到另一个列表(>= 1.1)
    • rPush:向列表追加一个或多个值
    • rPushX:仅在列表存在的情况下,向列表追加一个或多个值

    blPop 和 brPop

    描述:是一个阻塞的 lPop(rPop)原语,开头的字母 b 表示 blocking。如果至少有一个列表包含至少一个元素,则该元素将从列表的头部弹出并返回给调用者。如果由参数传递的键所标识的所有列表都为空,则 blPop 将在指定的超时期间阻塞,直到元素被推送到其中一个列表,然后才弹出此元素并继续。

    参数:

    • ARRAY,包含多个 key 的数组
    • INTEGER Timeout,超时时间

    • STRING Key1
    • STRING Key2
    • STRING Key3
    • STRING Keyn
    • INTEGER Timeout,超时时间

    返回值:ARRAY array(‘listName’, ‘element’)

    示例:

    /* Non blocking feature */
    $redis->lPush('key1', 'A');
    $redis->delete('key2');
    
    $redis->blPop('key1', 'key2', 10); /* array('key1', 'A') */
    /* OR */
    $redis->blPop(array('key1', 'key2'), 10); /* array('key1', 'A') */
    
    $redis->brPop('key1', 'key2', 10); /* array('key1', 'A') */
    /* OR */
    $redis->brPop(array('key1', 'key2'), 10); /* array('key1', 'A') */
    
    /* Blocking feature */
    
    /* process 1 */
    $redis->delete('key1');
    $redis->blPop('key1', 10);
    /* blocking for 10 seconds */
    
    /* process 2 */
    $redis->lPush('key1', 'A');
    
    /* process 1 */
    /* array('key1', 'A') is returned*/

    bRPopLPush

    rPopLPush 的阻塞版本,第三个参数是整型超时时间。

    参数:

    • Key:源 key
    • Key:目标 key
    • Long timeout:超时时间

    返回值:成功则返回 STRING 类型的元素,失败则返回 FALSE。

    lIndex 和 lGet

    返回列表中指定 key 对应的元素。

    • 0 表示第一个元素,1 表示第二个。。。
    • -1 表示最后一个元素,-2 表示倒数第二个。。。

    Return FALSE in case of a bad index or a key that doesn’t point to a list.

    参数:key index

    返回值:成功则返回 STRING 类型的元素,失败返回 FALSE。

    示例:

    $redis->rPush('key1', 'A');
    $redis->rPush('key1', 'B');
    $redis->rPush('key1', 'C'); /* key1 => [ 'A', 'B', 'C' ] */
    $redis->lGet('key1', 0); /* 'A' */
    $redis->lGet('key1', -1); /* 'C' */
    $redis->lGet('key1', 10); /* `FALSE` */

    lInsert

    在列表中指定的值之前或之后插入值。

    参数选项指定插入的位置(之前或之后)。如果列表不存在,或者指定的值不存在,则不插入该值。

    参数:

    • key
    • position Redis::BEFORE | Redis::AFTER
    • pivot,指定的值
    • value

    返回值:成功则返回列表中的元素个数,如果 pivot 不存在则返回 -1.

    示例:

    $redis->delete('key1');
    $redis->lInsert('key1', Redis::AFTER, 'A', 'X'); /* 0 */
    
    $redis->lPush('key1', 'A');
    $redis->lPush('key1', 'B');
    $redis->lPush('key1', 'C');
    
    $redis->lInsert('key1', Redis::BEFORE, 'C', 'X'); /* 4 */
    $redis->lRange('key1', 0, -1); /* array('A', 'B', 'X', 'C') */
    
    $redis->lInsert('key1', Redis::AFTER, 'C', 'Y'); /* 5 */
    $redis->lRange('key1', 0, -1); /* array('A', 'B', 'X', 'C', 'Y') */
    
    $redis->lInsert('key1', Redis::AFTER, 'W', 'value'); /* -1 */

    lPop 和 rPop

    返回并删除列表的第一个(最后一个)元素。

    返回值:成功则返回 STRING 类型的元素,失败(空列表)则返回 FALSE。

    示例:

    $redis->rPush('key1', 'A');
    $redis->rPush('key1', 'B');
    $redis->rPush('key1', 'C'); /* key1 => [ 'A', 'B', 'C' ] */
    $redis->lPop('key1'); /* key1 => [ 'B', 'C' ] */
    $redis->rPop('key1'); /* key1 => [ 'B' ] */

    lPush 和 rPush

    向列表左侧(右侧)添加字符串。如果 key 不存在则创建。如果 key 已经存在但不是列表,返回 FALSE。

    参数:key value

    返回值:成功则返回列表的新长度,失败则返回 FALSE。

    示例:

    $redis->delete('key1');
    $redis->lPush('key1', 'C'); // returns 1
    $redis->lPush('key1', 'B'); // returns 2
    $redis->lPush('key1', 'A'); // returns 3
    $redis->rPush('key1', 'X'); // returns 3
    /* key1 now points to the following list: [ 'A', 'B', 'C', 'X' ] */

    lRange 和 lGetRange

    返回列表中指定的范围 [start, end] 对应的部分元素。start 和 end 的用法如下:

    • 0 表示第一个元素,1 表示第二个。。。
    • -1 表示最后一个元素,-2 表示倒数第二个。。。

    参数:key start end

    示例:

    $redis->rPush('key1', 'A');
    $redis->rPush('key1', 'B');
    $redis->rPush('key1', 'C');
    $redis->lRange('key1', 0, -1); /* array('A', 'B', 'C') */

    lRem 和 lRemove

    从列表中删除 value 元素的 count 次。如果 count 为零,则删除所有匹配元素。如果 count 为负数,则从尾部到头部移除元素。

    注意:这里的参数顺序跟 Redis 文档不同(兼容性)。

    参数:key value count

    返回值:LONG 类型的要删除的元素个数,如果 key 对应的不是列表则返回 FALSE。

    示例:

    $redis->lPush('key1', 'A');
    $redis->lPush('key1', 'B');
    $redis->lPush('key1', 'C');
    $redis->lPush('key1', 'A');
    $redis->lPush('key1', 'A');
    
    $redis->lRange('key1', 0, -1); /* array('A', 'A', 'C', 'B', 'A') */
    $redis->lRem('key1', 'A', 2); /* 2 */
    $redis->lRange('key1', 0, -1); /* array('C', 'B', 'A') */

    lSet

    设置指定索引处的值。

    参数:key index value

    返回值:成功则返回 TRUE。失败返回 FALSE。

    示例:

    $redis->rPush('key1', 'A');
    $redis->rPush('key1', 'B');
    $redis->rPush('key1', 'C'); /* key1 => [ 'A', 'B', 'C' ] */
    $redis->lGet('key1', 0); /* 'A' */
    $redis->lSet('key1', 0, 'X');
    $redis->lGet('key1', 0); /* 'X' */

    rPopLPush

    从一个列表最后弹出一个元素,并放入另一个列表的头部。返回值是这个元素。

    参数: srckey dstkey

    返回值:STRING 类型,移动位置的元素。失败则返回 FALSE。

    示例:

    $redis->delete('x', 'y');
    
    $redis->lPush('x', 'abc');
    $redis->lPush('x', 'def');
    $redis->lPush('y', '123');
    $redis->lPush('y', '456');
    
    // move the last of x to the front of y.
    var_dump($redis->rPopLPush('x', 'y'));
    var_dump($redis->lRange('x', 0, -1));
    var_dump($redis->lRange('y', 0, -1));

    输出:

    string(3) "abc"
    array(1) {
      [0]=>
      string(3) "def"
    }
    array(3) {
      [0]=>
      string(3) "abc"
      [1]=>
      string(3) "456"
      [2]=>
      string(3) "123"
    }

    lLen 和 lSize

    返回指定列表的大小。

    列表不存在或列表为空时,返回 0。如果数据不是列表类型,返回 FALSE。

    示例:

    $redis->rPush('key1', 'A');
    $redis->rPush('key1', 'B');
    $redis->rPush('key1', 'C'); /* key1 => [ 'A', 'B', 'C' ] */
    $redis->lSize('key1');/* 3 */
    $redis->rPop('key1');
    $redis->lSize('key1');/* 2 */

    SET 集合操作

    • sAdd:向集合中添加一个或多个元素
    • sCard, sSize:获取集合的元素个数(cardinality )
    • sDiff:求集合的差集
    • sDiffStore:求集合的差集并将结果集存储在一个 key 中
    • sInter:求集合的交集
    • sInterStore:求集合的交集并将结果集存储在一个 key 中
    • sIsMember, sContains:判断某个元素是否在集合中
    • sMembers, sGetMembers:获取集合中的所有元素
    • sMove:将元素从一个集合移动到另一个集合
    • sPop:随机删除并返回一个或多个集合的元素
    • sRandMember:从集合中随机获取一个或多个成员
    • sRem, sRemove:从集合中删除一个或多个元素
    • sUnion:求集合的并集
    • sUnionStore:求集合的并集并将结果集存储在一个 key 中
    • sScan:扫描成员的集合

    sAdd

    参数:key value

    返回值:添加到集合中的元素个数,LONG 类型。如果值已经存在则返回 FALSE。

    示例:

    $redis->sAdd('key1' , 'member1'); /* 1, 'key1' => {'member1'} */
    $redis->sAdd('key1' , 'member2', 'member3'); /* 2, 'key1' => {'member1', 'member2', 'member3'}*/
    $redis->sAdd('key1' , 'member2'); /* 0, 'key1' => {'member1', 'member2', 'member3'}*/

    sCard, sSize

    返回值:key 对应的集合的基数,LONG 类型,如果该集合不存在,则为 0。

    示例:

    $redis->sAdd('key1' , 'member1');
    $redis->sAdd('key1' , 'member2');
    $redis->sAdd('key1' , 'member3'); /* 'key1' => {'member1', 'member2', 'member3'}*/
    $redis->sCard('key1'); /* 3 */
    $redis->sCard('keyX'); /* 0 */

    sDiff

    参数:

    • Keys: key1, key2, … , keyN:任意数量的集合

    返回值:字符串数组,第一个集合相对于所有其他集合的差集。

    示例:

    $redis->delete('s0', 's1', 's2');
    
    $redis->sAdd('s0', '1');
    $redis->sAdd('s0', '2');
    $redis->sAdd('s0', '3');
    $redis->sAdd('s0', '4');
    
    $redis->sAdd('s1', '1');
    $redis->sAdd('s2', '3');
    
    var_dump($redis->sDiff('s0', 's1', 's2'));

    返回值:所有在 s0 中且不在 s1 和 s2 中的元素。

    array(2) {
      [0]=>
      string(1) "4"
      [1]=>
      string(1) "2"
    }

    sDiffStore

    类似 sDiff,但是将结果存储在第一个 key 对应的集合中。

    参数:

    • Key: dstkey,用于存储结果的集合对应的 key
    • Keys: key1, key2, … , keyN:任意数量的集合

    返回值:整型 INTEGER,结果集合的数量,如果 key 不存在则返回 FALSE。

    示例:

    $redis->delete('s0', 's1', 's2');
    
    $redis->sAdd('s0', '1');
    $redis->sAdd('s0', '2');
    $redis->sAdd('s0', '3');
    $redis->sAdd('s0', '4');
    
    $redis->sAdd('s1', '1');
    $redis->sAdd('s2', '3');
    
    var_dump($redis->sDiffStore('dst', 's0', 's1', 's2'));
    var_dump($redis->sMembers('dst'));

    返回值:所有在 s0 中且不在 s1 和 s2 中的元素的个数。

    int(2)
    array(2) {
      [0]=>
      string(1) "4"
      [1]=>
      string(1) "2"
    }

    sIsMember, sContains

    参数:key value

    返回值:如果元素存在则返回 TRUE,否则返回 FALSE。

    示例:

    $redis->sAdd('key1' , 'member1');
    $redis->sAdd('key1' , 'member2');
    $redis->sAdd('key1' , 'member3'); /* 'key1' => {'member1', 'member2', 'member3'}*/
    
    $redis->sIsMember('key1', 'member1'); /* TRUE */
    $redis->sIsMember('key1', 'memberX'); /* FALSE */

    sMembers, sGetMembers

    返回值:元素数组,集合的元素。

    示例:

    $redis->delete('s');
    $redis->sAdd('s', 'a');
    $redis->sAdd('s', 'b');
    $redis->sAdd('s', 'a');
    $redis->sAdd('s', 'c');
    var_dump($redis->sMembers('s'));

    输出:

    array(3) {
      [0]=>
      string(1) "c"
      [1]=>
      string(1) "a"
      [2]=>
      string(1) "b"
    }

    ZSET 有序集合操作

    • zAdd:向 sorted set 添加一个或多个元素,如果已经存在则更新其分数 score
    • zCard, zSize:获取 sorted set 中元素的个数
    • zCount:返回分值在给定范围内的成员个数
    • zIncrBy:增加 sorted set 中某个成员的分值 score
    • zInter:求有序集的交集并将生成的有序集存储在新的 key 中
    • zRange:返回一个 index 索引范围内的成员
    • zRangeByScore, zRevRangeByScore:返回一个 score 范围内的成员
    • zRangeByLex:返回具有相同分数的成员的词典范围(lexicographical range)
    • zRank, zRevRank:确定 sorted set 中成员的索引
    • zRem, zDelete:从 sorted set 中删除一个或多个成员
    • zRemRangeByRank, zDeleteRangeByRank:删除 sorted set 中在指定的索引中的所有成员
    • zRemRangeByScore, zDeleteRangeByScore:删除 sorted set 中在指定的分数中的所有成员
    • zRevRange:返回一个 index 索引范围内的成员,分数从高到低排序
    • zScore:获取指定成员的分值
    • zUnion:求有序集的交集并将生成的有序集存储在新的 key 中
    • zScan:扫描有序集的成员

    zAdd

    参数:

    • key score: double
    • value: string

    返回值:成功添加元素时返回 1,否则返回 0。

    示例:

    $redis->zAdd('key', 1, 'val1');
    $redis->zAdd('key', 0, 'val0');
    $redis->zAdd('key', 5, 'val5');
    $redis->zRange('key', 0, -1); // array(val0, val1, val5)

    zCard 和 zSize

    示例:

    $redis->zAdd('key', 0, 'val0');
    $redis->zAdd('key', 2, 'val2');
    $redis->zAdd('key', 10, 'val10');
    $redis->zSize('key'); /* 3 */

    zCount

    返回分值在给定范围 [start,end] 内的成员个数。在开始或结束之前添加括号将其从范围中排除。 +inf-inf 也是有效的。

    参数:

    • key
    • start: string
    • end: string

    返回值:元素个数,LONG 类型。

    示例:

    $redis->zAdd('key', 0, 'val0');
    $redis->zAdd('key', 2, 'val2');
    $redis->zAdd('key', 10, 'val10');
    $redis->zCount('key', 0, 3); /* 2, corresponding to array('val0', 'val2') */

    zIncrBy

    参数:

    • key
    • value: (double) 要设置的分值
    • member

    返回值:新的分值,DOUBLE 类型。

    示例:

    $redis->delete('key');
    $redis->zIncrBy('key', 2.5, 'member1'); /* key 或 member1 不存在,所以 member1 的分值默认是 0,现在是 2.5 */
    $redis->zIncrBy('key', 1, 'member1'); /* 3.5 */

    zRangeByScore 和 zRevRangeByScore

    返回存储在指定键中的分数范围为 [start,end] 的元素。在开始或结束之前添加括号将其从范围中排除。

    参数:

    • key
    • start: string
    • end: string
    • options: array
      两个可选参数:withscores => TRUElimit => array($offset, $count)

    示例:

    $redis->zAdd('key', 0, 'val0');
    $redis->zAdd('key', 2, 'val2');
    $redis->zAdd('key', 10, 'val10');
    $redis->zRangeByScore('key', 0, 3); /* array('val0', 'val2') */
    $redis->zRangeByScore('key', 0, 3, array('withscores' => TRUE); /* array('val0' => 0, 'val2' => 2) */
    $redis->zRangeByScore('key', 0, 3, array('limit' => array(1, 1)); /* array('val2') */
    $redis->zRangeByScore('key', 0, 3, array('withscores' => TRUE, 'limit' => array(1, 1)); /* array('val2' => 2) */

    zRangeByLex

    假设成员具有相同的分数,则返回有序集合中的词典范围的成员。最小值和最大值需要以’(’(不包括),’[‘(包括)开头,或者恰好是值’ - ‘(负inf)或’+’(正inf)。调用该命令时必须使用三个或五个参数,否则将返回 FALSE

    参数:

    • key:ZSET 集合对应的键
    • min:希望获得的最小字母数字值
    • max:希望获得的最大字母数字值
    • offset:可选参数,用于从第一个元素以外的其他位置开始
    • limit:可选参数,用于限制返回元素个数

    返回值:数组,由在指定范围内的值组成

    示例:

    foreach(Array('a','b','c','d','e','f','g') as $c)
        $redis->zAdd('key',0,$c);
    
    $redis->zRangeByLex('key','-','[c') /* Array('a','b','c'); */
    $redis->zRangeByLex('key','-','(c') /* Array('a','b') */
    $redis->zRangeByLex('key','-','[c',1,2) /* Array('b','c') */

    zRank 和 zRevRank

    返回指定有序集合中给定成员的等级 rank,从 0 开始,分值最小的项目是 0。zRevRank 命令对于分值最高的项目是 0。

    参数:key member

    返回值:分值

    示例:

    $redis->delete('z');
    $redis->zAdd('key', 1, 'one');
    $redis->zAdd('key', 2, 'two');
    $redis->zRank('key', 'one'); /* 0 */
    $redis->zRank('key', 'two'); /* 1 */
    $redis->zRevRank('key', 'one'); /* 1 */
    $redis->zRevRank('key', 'two'); /* 0 */

    zRem 和 zDelete

    参数:key member

    返回值:成功则返回 1,失败则返回 0。

    示例:

    $redis->zAdd('key', 0, 'val0');
    $redis->zAdd('key', 2, 'val2');
    $redis->zAdd('key', 10, 'val10');
    $redis->zDelete('key', 'val2');
    $redis->zRange('key', 0, -1); /* array('val0', 'val10') */

    zRemRangeByRank 和 zDeleteRangeByRank

    删除有序集合中,rank 范围在 [start,end] 的元素。

    参数:key start end

    返回值:删除的元素的个数,LONG 类型

    示例:

    $redis->zAdd('key', 1, 'one');
    $redis->zAdd('key', 2, 'two');
    $redis->zAdd('key', 3, 'three');
    $redis->zRemRangeByRank('key', 0, 1); /* 2 */
    $redis->zRange('key', 0, -1, array('withscores' => TRUE)); /* array('three' => 3) */

    zRemRangeByScore 和 zDeleteRangeByScore

    参数:

    • key
    • start: double or “+inf” or “-inf” string
    • end: double or “+inf” or “-inf” string

    示例:

    $redis->zAdd('key', 0, 'val0');
    $redis->zAdd('key', 2, 'val2');
    $redis->zAdd('key', 10, 'val10');
    $redis->zRemRangeByScore('key', 0, 3); /* 2 */

    HASH 哈希表操作

    • hDel:删除一个或多个 hash 字段
    • hExists:判断 hash 字段是否存在
    • hGet:获取一个 hash 字段的值
    • hGetAll:获取一个 hash 中所有字段的值
    • hIncrBy:为整型的 hash 字段值增加指定的大小
    • hIncrByFloat:为浮点型的 hash 字段值增加指定的大小
    • hKeys:获取 hash 中的所有字段
    • hLen:获取 hash 中的字段个数
    • hMGet:获取所有指定的 hash 字段的值
    • hMSet:设置多个 hash 字段的值
    • hSet:设置一个 hash 字段的值
    • hSetNx:仅在字段不存在时,才设置一个 hash 字段的值
    • hVals:获取 hash 中的所有值
    • hScan:扫描 hash key,查找成员
    • hStrLen:获取与 hash 中的字段关联的值的字符串长度

    hSet

    向指定的 key 对应的 hash 中添加键值对。

    参数:key hashKey value

    返回值:如果值不存在且添加成功,则返回 LONG 1。如果值已经存在且替换,则返回 0。出错则返回 FALSE。

    示例:

    $redis->delete('h')
    $redis->hSet('h', 'key1', 'hello'); /* 返回 1,在 hash 表"h"中有键值对 'key1' => 'hello' */
    $redis->hGet('h', 'key1'); /* 返回 "hello" */
    
    $redis->hSet('h', 'key1', 'plop'); /* 返回 0, 值被替换 */
    $redis->hGet('h', 'key1'); /* 返回 "plop" */

    hGet

    获取 hash 中在指定的 key 中存储的值。如果 hash 表不存在,或 key 不存在,则返回 FALSE。

    参数:key hashKey

    返回值:如果命令成功执行则返回 STRING 类型的值,否则返回 BOOL 类型的 FALSE。

    hLen

    返回值:如果 key 不存在或不是 hash 表,则返回 FALSE。否则返回 LONG 类型的元素个数。

    示例:

    $redis->delete('h')
    $redis->hSet('h', 'key1', 'hello');
    $redis->hSet('h', 'key2', 'plop');
    $redis->hLen('h'); /* 返回 2 */

    hDel

    参数:key hashKey1 hashKey2 …

    返回值:删除的元素的个数,LONG 类型。如果 key 不存在则返回 0.如果 key 对应的不是 hash 表,则返回 FALSE。

    hKeys

    返回 hash 表中的 key 对应的字符串组成的数组,顺序是随机的,对应于 redis 自己的集合结构的内部表示。

    返回值:由 key 对应的字符串组成的数组。类似于 PHP 中的 array_keys() 函数。

    示例:

    $redis->delete('h');
    $redis->hSet('h', 'a', 'x');
    $redis->hSet('h', 'b', 'y');
    $redis->hSet('h', 'c', 'z');
    $redis->hSet('h', 'd', 't');
    var_dump($redis->hKeys('h'));

    输出:

    array(4) {
      [0]=>
      string(1) "a"
      [1]=>
      string(1) "b"
      [2]=>
      string(1) "c"
      [3]=>
      string(1) "d"
    }

    hVals

    返回 hash 表中的值对应的字符串组成的数组,顺序是随机的,对应于 redis 自己的集合结构的内部表示。

    返回值:由值对应的字符串组成的数组。类似于 PHP 中的 array_keys() 函数。

    示例:

    $redis->delete('h');
    $redis->hSet('h', 'a', 'x');
    $redis->hSet('h', 'b', 'y');
    $redis->hSet('h', 'c', 'z');
    $redis->hSet('h', 'd', 't');
    var_dump($redis->hVals('h'));

    输出:

    array(4) {
      [0]=>
      string(1) "x"
      [1]=>
      string(1) "y"
      [2]=>
      string(1) "z"
      [3]=>
      string(1) "t"
    }

    hGetAll

    获取 hash 中所有的键值对。

    示例:

    $redis->delete('h');
    $redis->hSet('h', 'a', 'x');
    $redis->hSet('h', 'b', 'y');
    $redis->hSet('h', 'c', 'z');
    $redis->hSet('h', 'd', 't');
    var_dump($redis->hGetAll('h'));

    输出:

    array(4) {
      ["a"]=>
      string(1) "x"
      ["b"]=>
      string(1) "y"
      ["c"]=>
      string(1) "z"
      ["d"]=>
      string(1) "t"
    }

    hExists

    参数:key memberKey

    示例:

    $redis->hSet('h', 'a', 'x');
    $redis->hExists('h', 'a'); /*  TRUE */
    $redis->hExists('h', 'NonExistingKey'); /* FALSE */

    hIncrBy

    参数:key member value(integer 类型)

    返回值:增加后的新值。

    示例:

    $redis->delete('h');
    $redis->hIncrBy('h', 'x', 2); /* returns 2: h[x] = 2 now. */
    $redis->hIncrBy('h', 'x', 1); /* h[x] ← 2 + 1. Returns 3 */

    hMSet

    非字符串类型会被自动用 (string) 转为字符串。NULL 会被转为空字符串。

    参数:key members(数组类型的键值对)

    返回值:BOOL

    示例:

    $redis->delete('user:1');
    $redis->hMSet('user:1', array('name' => 'Joe', 'salary' => 2000));
    $redis->hIncrBy('user:1', 'salary', 100);

    hMGet

    参数:key memberKeys(数组)

    示例:

    $redis->delete('h');
    $redis->hSet('h', 'field1', 'value1');
    $redis->hSet('h', 'field2', 'value2');
    $redis->hMGet('h', array('field1', 'field2')); /* 返回 array('field1' => 'value1', 'field2' => 'value2') */

    hScan

    扫描 HASH 表,查找成员,支持两个额外参数:模式 pattern,数量 count

    参数:

    • key:String 类型
    • iterator:Long(参考)
    • pattern:可选,要匹配的模式
    • count:一次性返回多少键

    返回值:匹配的数组

    示例:

    $it = NULL;
    /* Don't ever return an empty array until we're done iterating */
    $redis->setOption(Redis::OPT_SCAN, Redis::SCAN_RETRY);
    while($arr_keys = $redis->hScan('hash', $it)) {
        foreach($arr_keys as $str_field => $str_value) {
            echo "$str_field => $str_value
    "; /* Print the hash member and value */
        }
    }

    hStrLen

    获取 hash 中指定的 key 对应的字符串长度。

    参数:key field

    返回值:字符串长度,LONG 类型。如果 key 不存在则返回 0。

    PUB/SUB 发布订阅操作

    • pSubscribe:按模式订阅频道 channel
    • publish:向 channel 发送消息
    • subscribe:订阅 channel
    • pubSub:对 pub/sub 子系统的内省 Introspection,获取 Redis 的发布订阅子系统的信息

    publish

    参数:

    • channel:消息要发送到的频道 channel
    • message:string

    示例:

    $redis->publish('chan-1', 'hello, world!');

    subscribe

    参数:

    • channels:数组,由订阅的多个 channel 组成
    • callback:字符串或数组 ($instance, 'method_name')。回调函数接收 3 个参数:redis 实例,channel 名字,消息
    • return value:多种类型。回调函数中的非空返回值将被返回给调用者

    示例:

    function f($redis, $chan, $msg) {
        switch($chan) {
            case 'chan-1':
                ...
                break;
    
            case 'chan-2':
                ...
                break;
    
            case 'chan-2':
                ...
                break;
        }
    }
    
    $redis->subscribe(array('chan-1', 'chan-2', 'chan-3'), 'f'); // 订阅 3 个频道

    pSubscribe 按模式订阅频道

    参数:

    • patterns:要匹配的模式数组
    • callback:字符串,或一个包含对象和方法的数组。会传入 4 个参数:($redis, $pattern, $channel, $message)
    • return value:多种类型。回调函数中的非空返回值将被返回给调用者

    示例:

    function pSubscribe($redis, $pattern, $chan, $msg) {
        echo "Pattern: $pattern
    ";
        echo "Channel: $chan
    ";
        echo "Payload: $msg
    ";
    }

    pubSub

    参数:

    • keyword:String 类型,可能的值有:”channels”, “numsub” 或 “numpat”
    • argument:参数,可选,对不同的 keyword 不同。对于 “channels” 子命令,可以用模式字符串。对于 “numsub” 可以用 channel 数组

    返回值:

    • CHANNELS:返回一个数组,其成员是匹配的 channel
    • NUMSUB返回一个 key/value 数组,其中 keys 是 channel 名字,values 是他们的值
    • NUMPAT:整数返回,包含活动的模式订阅的数量

    示例:

    $redis->pubSub("channels"); /*所有的 channel */
    $redis->pubSub("channels", "*pattern*"); /* 匹配指定模式的 channel */
    $redis->pubSub("numsub", Array("chan1", "chan2")); /* 获取 'chan1' 和 'chan2' 的订阅数*/
    $redis->pubSub("numpat"); /* 模式订阅的数量 */
  • 相关阅读:
    xyplorer设置备忘
    如何在CentOS 8上安装Python2 Python3
    为CentOS 8操作系统安装MySQL的方法,以安装MySQL 8为例
    SSH登录服务器报ECDSA host key "ip地址" for has changed and you have requested strict checking
    Linux常用命令大全
    转载:php的几种常用的数据交换格式
    转:GBK编码 VS UTF8编码
    转载:中文在UTF8和GBK编码中的范围
    转:SDL Specification and Description Language 简介
    转:Java中Split函数的用法技巧
  • 原文地址:https://www.cnblogs.com/kika/p/10851552.html
Copyright © 2020-2023  润新知