前言:承接上文 redis的详解和项目应用之数据类型
目录
三、PHP 操作 Redis 的总结
3.1 phpredis 扩展的安装
windows和linux下的pecl安装
可下载安装包进行安装 PECL :: Package :: redis
linux环境也可通过GitHub安装 GitHub - phpredis/phpredis: A PHP extension for Redis
Ubuntu下的pecl安装
apt install php-redis
3.2 PHP 操作 Redis
3.2.1 连接
初始化redis
$redis = new Redis([
'host' => '127.0.0.1',
'port' => 6379,
'connectTimeout' => 2.5,
'auth' => ['phpredis', 'phpredis'],
'ssl' => ['verify_peer' => false],
'backoff' => [
'algorithm' => Redis::BACKOFF_ALGORITHM_DECORRELATED_JITTER,
'base' => 500,
'cap' => 750,
],
]);
# host:string,可以是主机,也可以是 unix 域套接字的路径。
# port : int,(默认为 6379,对于 unix 域套接字应为 -1)
# connectTimeout : float,以秒为单位的值(默认为 0 表示无限制)
# retryInterval:int,以毫秒为单位的值(可选)
# readTimeout:float,以秒为单位的值(默认为 0 表示无限制)
# persistent:mixed,如果值为字符串,则将其用作持久 id,否则将值强制转换为布尔
# auth:mixed,身份验证信息
# ssl:array,SSL 上下文选项
redis连接
$redis->connect('127.0.0.1', 6379, 1, NULL, 100); //短连接1秒超时,重新连接尝试之间延迟100ms
$redis->open('127.0.0.1', 6379, 1); //短连接1秒超时
$redis->pconnect('127.0.0.1', 6379, 100); //长连接100秒超时
$redis->popen('127.0.0.1', 6379, 100); //长连接100秒超时
授权验证
$redis->auth('YOURPASSPHRASE'); //服务器设置的授权密码 YOURPASSPHRASE
选择数据库
$redis->select(0); //选择redis库,0~15 共16个库
$redis->swapdb(0, 1); //以原子方式将库0与库1交换
关闭连接、ping服务器、echo回显
$redis->close(); //成功返回TRUE
$redis->ping(); //当在没有参数的情况下调用时,PING返回TRUE
$redis->echo("221"); //返回输入的字符
设置选项
$redis->setOption(redis::OPT_SERIALIZER, redis::serialize_NONE); //不序列化数据
$redis->setOption(redis::OPT_SERIALIZER, redis::serialize_PHP); //使用内置序列化/取消序列化
$redis->setOption(redis::OPT_SERIALIZER, redis::serialize_IGBINARY); //使用igBinary串行化/非串行化
$redis->setOption(redis::OPT_SERIALIZER, redis::serialize_MSGPACK); //使用msgpack序列化/取消序列化
$redis->setOption(redis::OPT_SERIALIZER, redis::serialize_JSON); //使用JSON序列化/取消序列化
$redis->setOption(Redis::OPT_PREFIX, 'myAppName:'); //在所有键上使用自定义前缀
# 扫描命令系列的选项,指示是否从用户提取空结果。如果设置为SCAN_NORETRY(默认值),phpredis一次只发出一个扫描命令,有时会返回一个空的结果数组。如果设置为SCAN_RETRY,phpredis将重试SCAN命令,直到键返回或Redis返回零迭代器
$redis->setOption(Redis::OPT_SCAN, Redis::SCAN_NORETRY);
$redis->setOption(Redis::OPT_SCAN, Redis::SCAN_RETRY);
# 扫描还可以被配置为自动将当前设置的PhpRedis前缀前置到任何匹配模式
$redis->setOption(Redis::OPT_SCAN, Redis::SCAN_PREFIX);
$redis->setOption(Redis::OPT_SCAN, Redis::SCAN_NOPREFIX);
$redis->getOption(Redis::OPT_SERIALIZER); # 获取客户端选项
3.2.2 操作服务器
$redis->acl('USERS'); # 获取用户列表
$redis->acl('LOG'); # 查看Redis的ACL子系统日志
$redis->bgRewriteAOF(); # 启动AOF(Append-Only File)的后台重写,成功返回TRUE
$redis->bgSave(); # 将数据集异步保存到磁盘(在后台),成功返回TRUE
# 获取或设置 Redis 服务器配置参数
$redis->config("GET", "*max-*-entries*");
$redis->config("SET", "dir", "/var/run/redis/dumps/");
$redis->dbSize(); # 返回所选数据库中的键数
$redis->flushAll(); # 从所有数据库中删除所有键
$redis->flushDb(); # 从当前数据库中删除所有键
$redis->info(); # 标准redis INFO命令
$redis->info("COMMANDSTATS"); # 有关已运行命令的信息(仅限>=2.6)
$redis->info("CPU"); # 只是Redis信息中的CPU信息
$redis->lastSave(); # 返回上次磁盘保存的时间戳
$redis->resetStat(); # 重置info方法返回的统计,成功返回TRUE
$redis->save(); # 将数据集同步保存到磁盘(等待完成),成功返回TRUE
$redis->slaveOf('10.0.1.7', 6379); # 改变从属状态
$redis->time(); # 返回当前服务器时间
$redis->slowLog('get', 10); # 获取十个slowLog条目
$redis->slowLog('get'); # 获取slowLog条目的默认数量
$redis->slowLog('reset'); # 重置我们的慢行日志
$redis->slowLog('len'); # 检索slowLog长度
3.2.3 字符串
字符串设置
$redis->set('key', 'value1'); # 设置键对应的值
$redis->mset(['foo' => 'foo', 'bar' => 'bar', 'baz' => 'baz']); # 设置多个键对值
$redis->append('key', 'value2'); # 在键对应的值后面追加内容
$redis->get('key'); # 获取与指定键相关的值
$redis->getSet('x', 'lol'); # 返回当前键x对应的值,并设置为新值
$redis->getRange('key', 0, 5); # 截取并返回对应字符串中第 0到5 位置的字符内容
$redis->setRange('key', 6, "redis"); # 将对应字符串的第6个字符开始替换为指定的内容
$redis->strlen('key'); # 获取字符串值的长度
$redis->getBit('key', 0); # 从对应的字符串中返回二进制的一个位
$redis->sAdd('s', 2); # 设置字符串集合
$redis->sort('s')); // 返回字符串集合的正序排序
$redis->sort('s', ['sort' => 'desc'])); // 返回字符串集合的倒序排序
$redis->sort('s', ['sort' => 'desc', 'store' => 'out'])); // 返回字符串集合数量
$it = NULL;
$arr_keys = $redis->scan($it, '*pattern*', 10); # 以浮标形式获取一组key
键的操作
$redis->keys('*'); # 获取当前库的所有键
$redis->type('key'); # 获取键的类型
$redis->exists('key'); # 验证该键是否存在,可设置多个或者以数组表示
$redis->exists(['foo', 'bar', 'baz']);
$redis->exists('foo', 'bar', 'baz');
$redis->randomKey(); # 返回一个随机密钥
$redis->move('x', 1); # 将键x移动到不同的数据库
$redis->rename('x', 'y'); # 重命名一个键
$redis->object("encoding", "l"); # 描述键指定的对象
$redis->dump('foo'); # 返回Redis编码的键值
$redis->restore('bar', 0, $val); # 将一个Redis编码的键值赋值给另一个键
$redis->expire('x', 3); # 设置键的到期日期(超时),pexpire 需要以毫秒为单位的 TTL
$now = time(NULL); // current timestamp
$redis->expireAt('x', $now + 3); #设置项目的到期日期(时间戳),pexpireAt 需要以毫秒为单位的时间戳
$redis->del('key1', 'key2'); # 删除指定键
$redis->del(['key3', 'key4']);
$redis->unlink('key1', 'key2');
$redis->unlink(['key1', 'key2']);
$redis->incr('key1'); # 将 key1 中存储的数字加1
$redis->incr('key1', 10); # 将 key1 中存储的数字加10
$redis->incrBy('key1', 10); # 将 key1 中存储的数字加10
$redis->incrByFloat('key1', 1.5); #以浮点精度递增密钥
$redis->decr('key1'); # 将 key1 中存储的数字减1
$redis->decr('key1', 10); # 将 key1 中存储的数字减10
$redis->decrBy('key1', 10); # 将 key1 中存储的数字减10
$redis->ttl('key'); # 返回给定键的剩余时间,以秒 (ttl) 或毫秒 (pttl) 为单位
$redis->persist('key'); # 从密钥中删除过期计时器
$redis->setEx('key', 3600, 'value'); # 设置键对值的生存时间,以秒为单位(TTL代表生存时间)
$redis->pSetEx('key', 100, 'value'); # 设置键对值的生存时间,以毫秒为单位
$redis->setNx('key', 'value'); # 如果数据库中不存在键,则将参数中的字符串值设置为键的值
# 将密钥迁移到不同的 Redis 实例 - 对应参数如下:
# 主机字符串。目标主机
# 端口整数。要连接的 TCP 端口。
# key(s)字符串或数组。
# 目标数据库整数。目标数据库。
# 超时整数。给予此转移的最长时间。
# 复制布尔值,可选。我们是否应该将 COPY 标志发送到 redis。
# 替换布尔值,可选。我们是否应该将 REPLACE 标志发送到 redis
$redis->migrate('backup', 6379, 'foo', 0, 3600, true, true);
3.2.4 哈希
$redis->hSet('h', 'key1', 'hello'); # 将值添加到存储在键中的哈希值
$redis->hGet('h', 'key1'); # 获取存储在键中的哈希值
$redis->hLen('h'); # 返回哈希的长度,以项目数为单位
$redis->hSetNx('h', 'key1', 'hello'); # 仅当此字段尚未在哈希中时,才向存储在 key 的哈希添加一个值
$redis->hKeys('h'); # 以字符串数组的形式返回散列中的键
$redis->hVals('h'); # 以字符串数组的形式返回哈希值,类似于 PHP 的 array_values()
$redis->hGetAll('h'); # 返回整个哈希,作为由字符串索引的字符串数组
$redis->hExists('h', 'a'); # 验证指定的成员是否存在于键中
$redis->hIncrBy('h', 'x', 2); # 将哈希中成员的值增加给定的数量
$redis->hIncrByFloat('h','x', 1.5); # 通过提供的浮点值增加哈希成员的值
$redis->hMSet('user:1', ['name' => 'Joe', 'salary' => 2000]); # 填充整个哈希,使用标准(字符串)转换将非字符串值转换为字符串,空值存储为空字符串。
$redis->hStrLen('h', 'a'); # 获取存储在键处的哈希中与字段关联的值的字符串长度
3.2.5 列表
$redis->lPush('key1', 'A'); # 将所有指定的值插入存储在的列表的头部key1
$redis->rPush('key1', 'A'); # 将所有指定的值插入存储在的列表的尾部key1
$redis->lPop('key1'); # 从列表key1的头部弹出一个元素
$redis->rPop('key1'); # 从列表key1的尾部弹出一个元素
$redis->blPop('key1', 10); # LPOP因为当没有任何元素可以从任何给定列表中弹出时,它会阻塞连接10秒。从第一个非空列表的头部弹出一个元素,并按照给定的顺序检查给定的键
$redis->blPop('key1', 'key2', 10);
$redis->blPop(['key1', 'key2'], 10);
$redis->brPop('key1', 10); RPOP因为当没有任何元素可以从任何给定列表中弹出时,它会阻塞连接10秒。从第一个非空列表的尾部弹出一个元素,并按照给定的顺序检查给定的键
$redis->brPop('key1', 'key2', 10);
$redis->brPop(['key1', 'key2'], 10);
$redis->bRPopLPush('key1', 'key2', 10); # 从列表中弹出一个值,它推到另一个列表并返回它,或阻塞直到有可用
$redis->lindex('key1', 1); # 回存储在指定键的列表的指定元素,index 相当于数组中的下标
$redis->lRange('key1', 0, -1); # 返回存储在范围 [start, end] 中指定键处的列表的指定元素
$redis->lInsert('key1', Redis::BEFORE, 'C', 'X'); # 在列表中插入值之前或之后的数据透视值
$redis->lInsert('key1', Redis::AFTER, 'C', 'X');
$redis->lPushx('key1', 'B'); # 如果列表存在,则将字符串值添加到列表的头部(左侧)
$redis->rPushx('key1', 'B'); # 如果列表存在,则将字符串值添加到列表的头部(右侧)
$redis->lRem('key1', 'A', 2); # 从列表中删除第一次count出现的值元素。如果 count 为零,则删除所有匹配的元素。如果 count 为负数,则从尾部到头部删除元素
$redis->lSet('key1', 0, 'X'); # 使用新值设置索引处的列表
$redis->lTrim('key1', 0, 1); # 修剪现有列表,使其仅包含指定范围的元素
$redis->lLen('key1'); # 回由 Key 标识的列表的大小
3.2.6 字符集
$redis->sAdd('key1' , 'member1'); # 将值添加到存储在键中的设置值
$redis->sAdd('key1' , 'member2', 'member3');
$redis->sCard('key1'); # 返回由键标识的集合的基数
$redis->sDiff('s0', 's1', 's2'); # 执行 N 个集合之间的差异并返回它
$redis->sDiffStore('dst', 's0', 's1', 's2'); # 执行与 sDiff 相同的操作,但将结果存储在第一个键中
$redis->sInter('key1', 'key2', 'key3'); # 返回由在指定键处保存的所有集合的交集产生的集合的成员
$redis->sInterStore('output', 'key1', 'key2', 'key3'); # 执行 sInter 命令并将结果存储在新集合中
$redis->sIsMember('key1', 'member1'); # 检查是否value是存储在键上的集合的成员key
$redis->sMembers('s'); # 返回集合的内容
$redis->sMove('key1', 'key2', 'member13'); # 将指定成员从 key1 的集合移动到 key2 的集合
$redis->sPop('key1'); # 从 Key 的设置值中移除并返回一个随机元素
$redis->sPop('key2', 3);
$redis->sRandMember('key1'); # 从 Key 的设置值中返回一个随机元素,而不删除它
$redis->sRandMember('key1', 3);
$redis->sRem('key1', 'member2', 'member3'); # 从存储在键的设置值中删除指定的成员
$redis->sUnion('s0', 's1', 's2'); # 执行 N 个集合之间的并集并返回它
$redis->sUnion(['s0', 's1', 's2']);
$redis->sUnionStore('dst', 's0', 's1', 's2'); # 执行与 sUnion 相同的操作,但将结果存储在第一个键中
$it = NULL;
$redis->sScan('key1', $it, "*pattern*", 10); # 从字符集key1中以浮标形式获取一组数据
3.2.7 排序集
$redis->zAdd($key, [ $options ,] $score, $value [, $score1, $value1, ...]); # 将一个或多个成员添加到排序集或更新其分数(如果已存在)
$redis->zAdd('key', 5, 'val5');
$redis->zAdd('key', ['CH'], 5, 'val5', 10, 'val10', 15, 'val15');
$redis->bzPopMin(['zs1', 'zs2'], 5); # 阻塞直到 Redis 可以从一个或多个 ZSET 中弹出得分最高或最低的成员,有两个命令(BZPOPMIN和BZPOPMAX分别用于弹出得分最低和最高的元素
$redis->bzPopMin('zs1', 'zs2', 5);
$redis->zCard('key'); # 返回有序集的基数
$redis->zCount('key', 0, 3); # 返回存储在指定键处的有序集合的元素数,其分数在 [start,end] 范围内。在范围之前添加括号start或end将其排除在范围之外。+inf 和 -inf 也是有效的限制
$redis->zIncrBy('key', 2.5, 'member1'); # 按给定数量增加排序集中成员的分数
$redis->zinterstore('ko1', ['k1', 'k2']); # 两个排序集的交集之和存储在第一个参数定义的排序集中
$redis->zinterstore('ko2', ['k1', 'k2'], [1, 2]); # 两个排序集的交集的每个值乘以第三个参数对应的乘积因子之和存储在第一个参数定义的排序集中,实现过程是 k1*1+k2*2
$redis->zinterstore('ko3', ['k1', 'k2'], [1, 5], 'min'); # 取两个排序集的交集最小的一组数据乘以第三个参数中的最小值,实现过程是 假设k1<k2,结果是 k1*1
$redis->zinterstore('ko4', ['k1', 'k2'], [1, 5], 'max'); # 取两个排序集的交集最大的一组数据乘以第三个参数中的最大值,实现过程是 假设k1<k2,结果是 k2*5
$redis->zPopMin('zs1', 5); # 可以从一个ZSET中弹出得分最高或最低的成员,有两个命令(ZPOPMIN和ZPOPMAX分别用于弹出得分最低和最高的元素
$redis->zPopMax('zs1', 5);
$redis->zRange('key1', 0, 3); # 从存储在指定键的有序集合中返回一系列元素,其值在 [start, end] 范围内
$redis->zRange('key1', 0, -1, true); # 加true是带分数
$redis->zRevRange('key1', 0, 3); # 倒序
$redis->zScore('key', 'val2'); # 返回指定排序集中给定成员的分数
$redis->zRangeByScore('key', 0, 3, ['withscores' => TRUE]); # 返回存储在指定键处的排序集的元素,其分数在 [start,end] 范围内。在范围之前添加括号start或end将其排除在范围之外。+inf和 -inf也是有效的限制,start当和end参数交换时,zRevRangeByScore 以相反的顺序返回相同的项目
$redis->zRangeByLex('key', '-', '[c', 1, 2); # 返回排序集中的成员的字典范围,假设成员具有相同的分数。最小值和最大值必须以 '('(不包括)、'['(包括)开头,或者正好是值 '-'(负 inf)或 '+'(正 inf)。必须调用该命令带有三个或五个参数或将返回 FALSE。同时1是开始下标,2是返回元素数量
$redis->zRank('key', 'two'); # 返回给定成员在指定排序集中的排名,从 0 开始,对于得分最小的项目。对于得分最高的项目,zRevRank 从 0 开始
$redis->zRevRank('key', 'two');
$redis->zRem('key', 'val0', 'val1', 'val2'); # 从排序集中删除一个或多个成员
$redis->zRemRangeByRank('key', 0, 1); # 删除存储在指定键处的排序集中的元素,这些元素的排名在 [start,end] 范围内
$redis->zRemRangeByScore('key', 0, 3); # 删除存储在指定键处的排序集中的元素,这些元素的分数在 [start,end] 范围内
$redis->zunionstore('ko2', ['k1', 'k2'], [1, 1]);
$redis->zunionstore('ko1', ['k1', 'k2']); # 两个排序集的并集存储在第一个参数定义的排序集中,两个排序集有相同的元素相加
$redis->zunionstore('ko3', ['k1', 'k2'], [5, 1]); # 两个排序集乘以第三个参数对应的乘积因子的并集存储在第一个参数定义的排序集中,两个排序集有相同元素的相加,过程是 k1*5并k2*1,相同的相加
$redis->zScan('zset', $it, '*pattern*', 10); # 以浮标形式从排序集中返回一组匹配的键
3.2.8 HyperLogLog
$redis->pfAdd('hll', ['a', 'b']); # 将多个 HyperLogLog 值合并为一个唯一值,该值将近似于观察到的源 HyperLogLog 结构集的并集的基数。
$redis->pfCount('hll1'); # 返回由存储在指定变量中的 HyperLogLog 数据结构计算的近似基数
$redis->pfCount(['hll1', 'hll2']); # 通过内部将存储在提供的键处的 HyperLogLogs 合并到临时 HyperLogLog 中,返回传递的 HyperLogLogs 联合的近似基数
$redis->pfMerge('hll3', ['hll1', 'hll2']); # 将 N 个不同的 HyperLogLog 合并为一个
3.2.8 地理编码
# 将一个或多个地理空间项目添加到指定的键,此函数必须至少使用一个经度、纬度、成员三元组来调用
$redis->geoAdd(
"myplaces",
-122.431, 37.773, "San Francisco",
-157.858, 21.315, "Honolulu"
);
$redis->geoHash("hawaii", "Honolulu", "Maui"); # 检索地理空间索引的一个或多个元素的 Geohash 字符串
$redis->geoPos("hawaii", "Honolulu", "Maui"); # 返回每个请求成员的经度、纬度位置
$redis->geoDist("hawaii", "Honolulu", "Maui"); # 返回地理空间集中两个成员之间的距离,默认单位为米
$redis->geoDist("hawaii", "Honolulu", "Maui", 'km'); # km公里 mi英里 ft英尺
# 返回具有在调用者指定的半径内的地理空间信息的集合的成员
$options = [];
$option[] = 'WITHDIST'; # 加上相差距离
$option[] = 'DESC'; # 距离按降序排列
$option['count'] = 1; # 返回结果数量
$redis->geoRadius("hawaii", -157.858, 21.306, 300, 'mi', $options);
$redis->geoRadiusByMember("hawaii", "Honolulu", 300, 'mi', ['count' => 1]); # 在给定距离和半径的情况下,与成员足够接近的零个或多个条目
3.2.9 Stream
$obj_redis->xAck('stream', 'group1', ['1530063064286-0', '1530063064286-1']); # 代表消费者组确认一条或多条消息
# 向流中添加消息
$obj_redis->xAdd('mystream', "*", ['field' => 'value']);
$obj_redis->xAdd('mystream', "*", ['field' => 'value'], 1000); # 设置数据流的最大长度
$obj_redis->xAdd('mystream', "*", ['field' => 'value'], 1000, true);
# 声明对一条或多条待处理消息的所有权
$ids = ['1530113681011-0', '1530113681011-1', '1530113681011-2'];
$obj_redis->xClaim(
'mystream', 'group1', 'myconsumer2', 0, $ids,
[
'IDLE' => time() * 1000,
'RETRYCOUNT' => 5,
'FORCE',
'JUSTID'
]
);
$obj_redis->xDel('mystream', ['1530115304877-0', '1530115305731-0']); # 从流中删除一条或多条消息
# 此命令用于创建、销毁或管理消费者组
$obj_redis->xGroup('HELP');
$obj_redis->xGroup('CREATE', 'mystream', 'mygroup', 0, true);
$obj_redis->xGroup('SETID', 'mystream', 'mygroup', 1);
$obj_redis->xGroup('DESTROY', 'mystream', 'mygroup');
$obj_redis->xGroup('DELCONSUMER', 'mystream', 'mygroup', 'consumer_name');
# 获取有关流或消费者组的信息
$obj_redis->xInfo('CONSUMERS', 'mystream', 'mygroup');
$obj_redis->xInfo('GROUPS', 'mystream');
$obj_redis->xInfo('STREAM', 'mystream' [, 'FULL' [, 10]]);
$obj_redis->xInfo('HELP');
$obj_redis->xLen('mystream'); # $obj_redis->xLen('mystream');
$obj_redis->xPending('mystream', 'mygroup'); # 获取有关给定流中未决消息的信息
$obj_redis->xPending('mystream', 'mygroup', '-', '+', 1, 'consumer-1');
$obj_redis->xRange('mystream', '-', '+'); # 从给定的流中获取一系列消息
$obj_redis->xRange('mystream', '-', '+', 2);
$obj_redis->xRevRange('mystream', '+', '-'); # 倒序
$obj_redis->xRead(['stream1' => '1535222584555-0', 'stream2' => '1535222584555-0']); # 从一个或多个流中读取数据,并且只返回大于命令中发送的 ID
# 此方法与 xRead 类似,只是它支持读取特定消费者组的消息
$obj_redis->xReadGroup('mygroup', 'consumer1', ['s1' => 0, 's2' => 0]); # 使用"mygroup"、"consumer1"的消息
$obj_redis->xReadGroup('mygroup', 'consumer1', ['s1' => '>', 's2' => '>']); # 使用"mygroup"、"consumer1"的消息,该组尚未使用这些消息
$obj_redis->xReadGroup('mygroup', 'consumer2', ['s1' => 0, 's2' => 0], 1, 1000); # 以"consumer2"的身份读取单个消息,等待一秒钟,直到消息到达
$obj_redis->xTrim('mystream', 100); # 将流长度修剪到给定的最大值,如果设置了“近似”标志,Redis 将使用您的大小作为提示,但只会修剪整个节点中的树(这样更有效)
$obj_redis->xTrim('mystream', 100, true);
3.2.9 发布/订阅
# 按模式订阅频道
# patterns:要匹配的模式数组
# callback:字符串或带有对象和方法的数组。回调将获得四个参数($redis、$pattern、$channel、$message)
function pSubscribe($redis, $pattern, $chan, $msg) {
echo "Pattern: $pattern\n";
echo "Channel: $chan\n";
echo "Payload: $msg\n";
}
$redis->publish('chan-1', 'hello, world!'); # 向频道发布消息。警告:此功能将来可能会更改
# 订阅频道。警告:此功能将来可能会更改
function f($redis, $chan, $msg) {
switch($chan) {
case 'chan-1':
...
break;
case 'chan-2':
...
break;
case 'chan-2':
...
break;
}
}
# 一个命令,允许您获取有关 Redis 发布/订阅系统的信息
$redis->pubSub("channels"); # 获取所有频道
$redis->pubSub("channels", "*pattern*"); # 获取匹配到的频道
$redis->pubSub("numsub", ["chan1", "chan2"]); # 获取"通道1"和"通道2"的订户计数
$redis->pubSub("numpat"); # 获取模式订阅者的数量
$redis->subscribe(['chan-1', 'chan-2', 'chan-3'], 'f');
3.2.10 其他
$redis->rawCommand("set", "foo", "bar"); # 执行任意命令
# 监视另一个客户端修改的key
$redis->watch('key');
$ret = $redis->multi()
->incr('key')
->exec();
$redis->eval("return 2213"); # LUA 脚本服务器端
# 从脚本的 SHA1 哈希值而不是脚本本身评估 LUA 脚本服务器端
$script = 'return 1';
$sha = $redis->script('load', $script);
$redis->evalSha($sha);
# 执行 Redis SCRIPT 命令对脚本子系统执行各种操作
$redis->script('load', $script);
$redis->script('flush');
$redis->script('kill');
$redis->script('exists', $script1, [$script2, $script3, ...]);
$redis->client('list'); # 获取客户列表
$redis->client('getname'); # 获取当前连接的名称
$redis->client('setname', 'somename'); # 设置当前连接的名称
$redis->client('kill', <ip:port>); # 在ip:端口终止进程
$redis->eval('this-is-not-lua');
$err = $redis->getLastError(); # 获取最后一条错误消息(如果有)
$redis->clearLastError(); # 清除上一条错误消息(如果有)
$redis->_prefix('my-value'); # 一种实用方法,用 phpredis 的前缀设置为值添加前缀
$redis->setOption(Redis::OPT_SERIALIZER, Redis::SERIALIZER_PHP); # 使用序列化函数前先设置使用PHP内置序列化,否则不生效
$redis->_serialize("foo"); # 一种手动序列化值的实用方法
$redis->_unserialize('a:3:{i:0;i:1;i:1;i:2;i:2;i:3;}'); # 一种使用设置的任何序列化程序来反序列化数据的实用方法