标签:day unix套接字 字符串数组 标识 ace oat 参数调用 cte before
创建Redis
客户端
$redis = new Redis();
如果无法访问Redis
服务器,phpredis
抛出RedisException
异常,如Redis
服务关闭,Redis
主机过载等。除去服务器无法访问的情形(key
不存在,或无效命令等),phpredis
返回FALSE
可用的Redis
常量Redis
数据类型,同方法 type 返回值
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
服务器Redis
服务器(持久连接)连接到Redis
实例
host
: string
域名或unix
套接字port
: int
可选,端口号timeout
: float
连接超时时间,秒(可选,默认0,表示无限制)reverved
: 如果指定了retry_interval
,该值应为NULL
retry_interval
: int
重连延时时间,毫秒(可选)read_timeout
: float
读取key
的超时时间,秒(可选,默认0,表示无限制)
boolean
: 成功返回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.5s连接超时
$redis->connect('/tmp/redis.sock'); // unix套接字
$redis->connect('127.0.0.1', 6379, 1, NULL,100); // 1s连接超时,100ms延时重连
连接到Redis
实例,或重用pconnect
/popen
建立的连接
使用close
命令或结束请求都不会关闭连接,直到php
进程结束。因此,在连接到同一台redis
服务器的多台服务器上使用持久连接时,要对大量的FD
错误有所防备,尤其在redis
服务器端。
持久连接可以通过host + port + timeout
或host + persistent_id
或unix socket + timeout
建立。
该特性不适用于多线程版本。多线程版本中,pconnect
和popen
的工作方式和非持久连接的工作方式相同。
host
: string
域名或unix
套接字port
: int
端口号,可选timeout
: float
连接超时时间,秒(可选,默认0,表示无限制)persistent_id
: string
持久连接请求标识retry_interval
: int
重连时间间隔,秒read_timeout
: float
读取key
的超时时间,秒(可选,默认0,表示无限制)
boolean
: 成功返回TRUE
,失败返回FALSE
$redis->pconnect('127.0.0.1', 6379);
$redis->pconnect('127.0.0.1'); // 默认端口6379,和上述连接为同一连接
$redis->pconnect('127.0.0.1', 6379, 2.5); // 2.5s超时,新连接
$redis->pconnect('127.0.0.1', 6379, 2.5, 'x'); // x作为persistent_id,新连接
$redis->pconnect('/tmp/redis.sock'); // unix套接字,新连接
使用密码验证连接,密码以纯文本形式发送。
password
: string
boolean
: 验证通过返回TRUE
,否则返回FALSE
$redis->auth('foobared');
切换到指定数据库
dbindex
: int
数据库索引
boolean
: 成功返回TRUE
,失败返回FALSE
参考 move 方法
交换两数据库
db1
: int
db2
: int
boolean
: 成功返回TRUE
,失败返回FALSE
注意:要求Redis >= 4.0.0
$redis->swapdb(0, 1); // 交换数据库 0 和 1
断开与Redis
实例的连接,除非使用pconnect
设置客户端配置
parameter name
parameter value
boolean
: 成功返回TRUE
,失败返回FALSE
$redis->setOption(Redis::OPT_SERIALIZER, Redis::SERIALIZER_NONE); // 不序列化数据
$redis->setOption(Redis::OPT_SERIALIZER, Redis::SERIALIZER_PHP); // 使用内置的序列化/反序列化
$redis->setOption(Redis::OPT_SERIALIZER, Redis::SERIALIZER_IGBINARY); // 使用 igBinary 序列化/反序列化
$redis->setOption(Redis::OPT_PREFIX, 'myAppName'); // 在所有 key 上使用自定义前缀
/*
SCAN 系列命令配置,指示是否获取空的用户输入。如果设为 SCAN_NORETRY (默认),phpredis 一次发出一条 SCAN 命令,有时会返回空数组。如果设为 SCAN_RETRY ,phpredis 会重复发送 SCAN 指令,直到返回 keys 或者 Redis 返回零迭代器
*/
$redis->setOption(Redis::OPT_SCAN, Redis::SCAN_NORETRY);
$redis->setOption(Redis::OPT_SCAN, Redis::SCAN_RETRY);
获取客户端配置
parameter name
parameter value
$redis->getOption(Redis::OPT_SERIALIZER); // 返回 Redis::SERIALIZER_NONE, Redis::SERIALIZER_PHP 或 Redis::SERIALIZER_IGBINARY
检查连接状态
无
string
: 成功返回+PONG
,失败时抛出RedisException
异常
打印字符串
string
: string
要输出的字符串
string
: 输入的字符串
AOF(append-only file)
文件重写操作Redis
服务器配置key
的数量key
key
Redis
服务器的各种信息和统计数值Redis
成功将数据保存到磁盘上的时间,以UNIX
时间戳格式表示redis
的慢日志异步执行一个AOF(append-only file)
文件重写操作
无
boolean
: 成功返回TRUE
,失败返回FALSE
$redis->bgRewriteAOF();
在后台异步保存当前数据库的数据到磁盘
无
boolean
: 成功返回TRUE
,失败返回FALSE
。如果正在执行save
操作,返回FALSE
$redis->bgSave();
获取/设置Redis
服务器配置
operation
: string
GET
或SET
key
: string
value
: string
可选(仅针对SET
)
array
/boolean
: GET
返回关联数组,SET
返回布尔值
$redis->config('GET', '*max-*entries*');
$redis->config('SET', 'dir', '/var/run/redis/dumps/');
返回当前数据库的key
的数量
无
int
: 当前数据库的key
的数量
$count = $redis->dbSize();
echo "Redis has $count keys\n";
删除所有数据库的所有key
无
boolean
: 始终返回TRUE
$redis->flushAll();
删除当前数据库的所有key
无
boolean
: 始终返回TRUE
$redis->flushDb();
获取Redis
服务器的各种信息和统计数值
返回Redis
服务器信息组成的数组,不传递参数时,返回如下信息:
redis_version
arch_bits
uptime_in_seconds
uptime_in_days
connected_clients
connected_slaves
used_memory
changes_since_last_save
bgsave_in_progress
last_save_time
total_connections_received
total_commands_processed
role
通过传递一系列参数,可以让命令只返回某一部分信息。
option
: string
提供给redis
的选项(COMMANDSTSTS
,CPU
等)
$redis->info();
$redis->info('COMMANDSTATS'); // 已执行命令信息 (版本 >= 2.6)
$redis->info('CPU'); // CPU信息
返回最近一次Redis
成功将数据保存到磁盘上的时间,以UNIX
时间戳格式表示
无
int
: UNIX
时间戳
$redis->lastSave();
重置 info 命令中的某些统计数据
清空以下统计信息:
Keyspace hits
Keyspace missed
Number of commands processed
Number of connections received
Number of expired keys
无
boolean
: 成功返回TRUE
,失败返回FALSE
$redis->resetStat();
同步保存数据到硬盘
无
boolean
: 成功返回TRUE
,失败返回FALSE
。如果save
操作正在执行,返回FALSE
$redis->save();
将当前服务器转变为指定服务器的从属服务器
host
: string
port
: int
不传递参数表示终止从属关系
boolean
: 成功返回TRUE
,失败返回FALSE
$redis->slaveOf('10.0.1.7', 6379);
$redis->slaveOf();
返回当前服务器时间
无
array
: 成功时返回一个关联数组,数组的第一个元素是unix
时间戳秒数,第二个元素是微秒数
$redis->time();
管理redis
的慢日志
Operation
: string
GET
、LEN
或RESET
Length
: int
可选,如果执行SLOWLOG GET
命令,可以传递该参数
array
/int
/boolean
:SLOWLOG
返回值取决于执行的操作:SLOWLOG GET
返回关联数组SLOWLOG LEN
返回slowLog
长度 integer
SLOWLOG RESET
返回Boolean
// 获取10条slowlog记录
$redis->slowLog('get', 10);
// 获取默认条数的slowlog记录
$redis->slowLog('get');
// 重置slowlog
$redis->slowLog('reset');
// 获取slowlog长度
$redis->slowLog('len');
key
key
的值key
的值key
所储存的字符串值,获取指定偏移量上的位(bit
)key
中字符串值的子字符串key
的值设为value
,并返回key
的旧值(old value
)key
的值key
所储存的值加上给定的浮点增量值(increment
)key
的值key-value
对key
的值key
所储存的字符串值,设置或清除指定偏移量上的位(bit
)key
赋值,并设置过期时间key
不存在时设置key
的值key
所储存的字符串值key
所储存的字符串值的长度key
key
,并返回被序列化的值key
是否存在key
设置过期时间key
的过期时间设置为unix
时间戳pattern
)的key
key
key
从一个Redis
实例转移到另一个实例key
移动到给定的数据库当中key
对象信息key
的过期时间,key
将持久保持key
key
的名称key
不存在时,将key
改名为新的key
名key
所储存的值的类型key
的剩余的过期时间key
获取key
的值
key
: string
string
/boolean
: key
不存在时返回FALSE
,否则返回key
的值
$redis->get('key');
设置指定key
的值
Key
: string
Value
: string
int
/array
: 可选,若传递int
,将调用SETEX
命令。如果Redis >= 2.6.12
,则可以传递扩展选项
boolean
: 成功时返回TRUE
$redis->set('key', 'value');
// 将调用SETEX方法
$redis->set('key', 'value', 10);
// 设置key值,如果key不存在,设置10s过期
$redis->set('key', 'value', array('nx', 'ex' => 10));
// 设置key值,如果key不存在,设置1000ms过期
$redis->set('key', 'value', array('xx', 'px' => 1000));
为key
赋值,并设置过期时间(setEx
使用秒数,pSetEx
使用毫秒)
Key
: string
TTL
: int
Value
: string
boolean
: 成功返回TRUE
$redis->setEx('key', 3600, 'value'); // 设置key值,1h过期
$redis->pSetEx('key', 100, 'value'); // 设置key值,100ms过期
只有在key
不存在时设置key
的值
key
: string
value
: string
boolean
: 成功返回TRUE
,失败返回FALSE
$redis->setNx('key', 'value'); // 返回 TRUE
$redis->setNx('key', 'value'); // 返回 FALSE
删除key
array
/string
: keys
组成的数组,或多个key
: key1
key2
key3
... keyN
int
: 被删除的key
数量
$redis->set('key1', 'val1');
$redis->set('key2' ,'val2');
$redis->set('key3', 'val3');
$redis->set('key4', 'val4');
$redis->delete('key1' ,'key2'); // 返回 2
$redis->delete(array('key3', 'key4')); // 返回 2
// Redis >= 4.0.0 时可以调用unlink方法
$redis->unlink('key1', 'key2');
$redis->unlink(array('key1', 'key2'));
检查给定key
是否存在
key
: string
int
: 检测的keys
中,key
存在的数量
$redis->set('key', 'value');
$redis->exists('key'); // 1
$redis->exists('NonExistingKey'); // 0
$redis->mSet(['foo' => 'foo', 'bar' => 'bar', 'baz' => 'baz']);
$redis->exists(['foo', 'bar', 'barz']); // 3
$redis->exists('foo', 'bar', 'baz'); // 3
注意: Redis < 4.0.0
时,该方法仅接受一个参数,返回布尔值
key
的值自增 1, 如果传递第二个参数,则作为key
的增量
key
: string
value
: int
key
的增量(仅对incrBy
有效)
int
: 自增后的值
$redis->incr('key1'); // 若 key1 不存在,自增前默认为 0 ,然后自增 1
$redis->incr('key1'); // 2
$redis->incr('key1'); // 3
$redis->incr('key1'); // 4
// 将调用INCRBY
$redis->incr('key1', 10); // 14
$redis->incr('key1', 10); // 24
将key
所储存的值加上给定的浮点增量值
key
: string
value
: float
增量
float
: 自增后的值
$redis->incrByFloat('key1', 1.5); // 1.5
$redis->incrByFloat('key1', 1.5); // 3
$redis->incrByFloat('key1', -1.5); // 1.5
$redis->incrByFloat('key1', 2.5); // 4
key
的值自减 1,如果传递第二个参数,将该参数作为减量
key
: string
value
: int
key
的减量(仅对decrBy
有效)
int
: 自减后的值
$redis->decr('key1'); // key1不存在,初始化为0,然后自减
$redis->decr('key1'); // -2
$redis->decr('key1'); // -3
// 将调用DECRBY
$redis->decr('key1', 10); // -13
$redis->decr('key1', 10); // -23
获取所有(一个或多个)给定key
的值,如果有一个或多个key
不存在,对应的key
值为FALSE
keys
: array
key
列表
array
: keys
对应的值
$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');
将给定key
的值设为value
,并返回key
的旧值
Key
: string
string
: key
的旧值
$redis->set('x', '42');
$exValue = $redis->getSet('x', 'lol'); // 返回 '42', key 的值替换为 'lol'
$newValue = $redis->get('x'); // 返回 'lol'
从当前数据库中随机返回一个key
无
string
: 随机的一个key
值
$key = $redis->randomKey();
$surprise = $redis->get($key);
将当前数据库的key
移动到给定的数据库当中
Key
: string
待移动的key
dbindex
: int
数据库索引
boolean
: 成功返回TRUE
,失败返回FALSE
$redis->select(0); // 切换到数据库 0
$redis->set('x', '42'); // 设置 x 值为 '42'
$redis->move('x', 1); // 移动 x 到数据库 1
$redis->select(1); // 切换到数据库 1
$redis->get('x'); // 返回 '42'
修改key
的名称
srckey
: string
旧名称dstkey
: string
新名称
boolean
: 成功返回TRUE
,失败返回FALSE
$redis->set('x', '42');
$redis->rename('x', 'y');
$redis->get('y'); // 42
$redis->get('x'); // FALSE
仅当新key
不存在时,将key
改名为新的key
名
为给定key
设置过期时间,以秒计(pexpire
为毫秒)
Key
: string
ttl
: int
key
存活时长
boolean
: 成功返回TRUE
,失败返回FALSE
$redis->set('x', '42');
$redis->setTimeout('x', 3); // x 在 3s 后过期
sleep(5);
$redis->get('x'); // 返回 FALSE
将key
的过期时间设置为unix
时间戳
Key
: string
timestamp
: int
Unix
时间戳,key
的过期时间
boolean
: 成功返回TRUE
,失败返回FALSE
$redis->set('x', '42');
$now = time(NULL);
$redis->expireAt('x', $now + 3); // x 在 3s 后过期
sleep(5);
$redis->get('x'); // 返回 FALSE
查找所有符合给定模式(pattern
)的key
pattern
: string
使用*
作为通配符
array
: 与特定模式匹配的key
$allKeys = $redis->keys('*'); // 匹配所有 key
$keyWithUserPrefix = $redis->keys('user*');
扫描所有key
iterator
: int
迭代次数的引用,初始值为NULL
pattern
: string
可选,匹配模式count
: int
可选,每次迭代的key
的数量
array
/boolean
: 返回keys
数组,如果Redis
中key
数量为 0,返回FALSE
// 默认不启用 Redis::SCAN_RETRY
$it = NULL;
do {
// 扫描 keys
$arr_keys = $redis->scan($it);
// 返回值可能为空,预防这种情形
if ($arr_keys !== FALSE) {
foreach ($arr_keys as $str_key) {
echo "Here is a key: $str_key\n";
}
}
} while ($it > 0);
echo "No more keys to scan!\n";
// 启用 Redis::SCAN_RETRY
$redis->setOption(Redis::OPT_SCAN, Redis::SCAN_RETRY);
$it = NULL;
// 如果返回值为空,phpredis 会再次执行 SCAN,因此不需要检查结果是否为空
while ($arr_keys = $redis->scan($it)) {
foreach ($arr_keys as $str_key) {
echo "Here is a key: $str_key\n";
}
}
echo "No more keys to scan!\n";
获取key
对象信息
info
: string
需要获取的key
信息,可以为下列值:
encoding
refcount
idletime
string
/int
/boolean
: encoding
返回string
,refcount
返回int
,如果为idletime
,key
不存在时返回FALSE
$redis->object('encoding', 'l'); // ziplist
$redis->object('refcount', 'l'); // 1
$redis->object('idletime', '1'); // 400s,精度为10s
返回key
所储存的值的类型
Key
: string
string
根据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');
追加一个值到key
Key
: string
Value
: string
int
: 追加指定值之后,key
中字符串的长度
$redis->set('key', 'value1');
$redis->append('key', 'value2'); // 返回 12
$redis->get('key'); // 'value1value'
返回key
中字符串值的子字符串
key
: string
start
: int
end
: int
string
: 子字符串
$redis->set('key', 'string value');
$redis->getRange('key', 0, 5); // 'string'
$redis->getRange('key', -5, -1); // 'value'
从指定偏移量开始,覆写给定key
所储存的字符串值
key
: string
offset
: int
value
: string
int
: 修改后的字符串长度
$redis->set('key', 'Hello world');
$redis->setRange('key', 6, 'redis'); // 返回 11
$redis->get('key'); // 'Hello redis'
返回key
所储存的字符串值的长度
key
: string
int
$redis->set('key', 'value');
$redis->strLen('key'); // 5
对key
所储存的字符串值,获取指定偏移量上的位(bit
)
key
: string
offset
: int
int
: 指定位上的值(0 或 1)
$redis->set('key', "\x7f"); // 0111 1111
$redis->getBit('key', 0); // 0
$redis->getBit('key', 1); // 1
对key
所储存的字符串值,设置或清除指定偏移量上的位(bit
)
key
: string
offset
: int
value
: int
1 或 0
int
: 0 或 1,设置之前的位值
$redis->set('key', '*'); // ord('*') = 42 = 0x2a = '0010 1010'
$redis->setBit('key', 5, 1); // 返回 0
$redis->setBit('key', 7, 1); // 返回 0
$redis->get('key'); // chr(0x2f) = '/' = b('0010 1111')
在字符串之间执行按位运算
operation
: string
AND
, OR
, NOT
, XOR
ret_key
: string
目标key
key
: string
key2...
: string
int
: 存储在目标key
中的字符串长度
统计指定位区间上,值为 1 的位的个数
key
: string
int
: 返回key
值的所有位中,值为 1 的位的个数
对列表、集合或有序集中的元素进行排序
Key
: string
Options
: array
array(key => value, ...)
- 可选,使用以下键值对:
'by' => 'some_pattern_*',
'limit' => array(0, 1),
'get' => 'some_other_pattern_*' 或 patterns 数组
'sort' => 'asc'/'desc',
'alpha' => TRUE,
'store' => 'external-key'
array
: 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
获取key
的剩余的过期时间,秒数(ttl
),毫秒数(pptl
)
Key
: string
int
: key
的过期时间。如果key
没有过期时间,返回-1
;key
不存在,返回-2
$redis->ttl('key');
移除key
的过期时间,key
将持久保持
Key
: string
boolean
: 成功移除过期时间,返回TRUE
;key
不存在,或没有过期时间,返回FALSE
;
$redis->persist('key');
同时设置一个或多个 key-value
对
Pairs
: array
array(key => value, ...)
boolean
: 成功返回TRUE
,失败返回FALSE
$redis->mSet(array('key0' => 'value0', 'key1' => 'value1'));
var_dump($redis->get('key0')); // string(6) "value0"
var_dump($redis->get('key1')); // string(6) "value1"
序列化给定key
,并返回被序列化的值
key
string
string
/boolean
: 返回序列化之后的值,如果key
不存在,返回FALSE
$redis->set('foo', 'bar');
$val = $redis->dump('foo');
用通过 dump 获得的序列化值创建一个key
key
: string
ttl
: integer
key
的存活时间,为 0 时不设置过期时间value
: string
dump
获得的序列化值
$redis->set('foo', 'bar');
$val = $redis->dump('foo');
$redis->restore('bar', 0, $val); // 'bar'的值不等于'foo'的值
将key
从一个Redis
实例转移到另一个实例
host
:string
目标域名port
: int
要连接的TCP
端口key(s)
: string
/array
destination-db
: int
目标数据库timeout
: int
转移超时时间copy
: boolean
可选,是否复制replace
: boolean
是否替换
$redis->migrate('backup', 6379, 'foo', 0, 3600);
$redis->migrate('backup', 6379, 'foo', 0, 3600, true, true); // 复制和替换
$redis->migrate('backup', 6379, 'foo', 0, 3600, false, true); // 仅替换
// 转移多个 key,要求 Redis >= 3.0.6
$redis->migrate('backup', 6379, ['key1', 'key2', 'key3'], 0, 3600);
为哈希表中的一个字段赋值
key
: string
hashkey
: string
value
: string
int
/false
: 如果字段是哈希表中的一个新建字段,并且值设置成功,返回 1 。 如果哈希表中域字段已经存在且旧值已被新值覆盖,返回 0 。出错时返回FALSE
$redis->delete('h');
$redis->hSet('h', 'key1', 'hello'); // 返回 1,'key` => 'hello'
$redis->hGet('h', 'key1'); // 返回 'hello'
$redis->hSet('h', 'key1', 'plop'); // 替换字段值,返回 0
$redis->hGet('h', 'key1'); // 返回 'plop'
只有在字段不存在时,设置哈希表字段的值
boolean
: 成功返回TRUE
,字段已存在则返回FALSE
$redis->delete('h');
$redis->hSetNx('h', 'key1', 'hello'); // TRUE
$redis->hSetNx('h', 'key1', 'world'); // FALSE
获取存储在哈希表中指定字段的值,如果哈希表或key
不存在,返回FALSE
key
: string
hashKey
: string
string
/boolean
: 成功时返回字段的值,失败返回FALSE
获取哈希表中字段的数量
key
: string
int
: 哈希表中字段的数量,如果key
不存在或非哈希表,返回FALSE
$redis->delete('h');
$redis->hSet('h', 'key1', 'hello');
$redis->hSet('h', 'key2', 'plop');
$redis->hLen('h'); // 返回 2
删除一个或多个哈希表字段,如果哈希表或key
不存在,返回FALSE
key
: string
hashKey1
: string
hashKey2
: string
int
/boolean
: 被删除的字段数量,key
不存在时返回 0,key
非哈希则返回FALSE
获取哈希表中的所有字段名,返回字符串数组
Key
: string
array
: 哈希表中所有字段名称组成的数组,类似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"
}
*/
字段的顺序是随机的,对应于Redis
集合的内部排序
获取哈希表中所有值,返回字符串数组
Key
: string
array
: 哈希表中所有字段值组成的数组,类似PHP
中的array_values()
$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"
}
*/
字段的顺序是随机的,对应于Redis
集合的内部排序
获取在哈希表中的所有字段和值
Key
: string
array
: 关联数组,哈希表的字段名称为键名,字段值为键值
$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($reids->hGetAll('h'));
/*
输出
array(4) {
["a"]=>
string(1) "x"
["b"]=>
string(1) "y"
["c"]=>
string(1) "z"
["d"]=>
string(1) "t"
}
*/
查看哈希表中,指定的字段是否存在
key
: string
memberKey
: string
boolean
: 若哈希表中,指定字段存在,返回TRUE
,否则返回FALSE
$redis->hSet('h', 'a', 'x');
$redis->hExists('h', 'a'); // TRUE
$redis->hExists('h', 'NonExistingKey'); // FALSE
为哈希表中的指定字段的整数值加上增量
key
: string
member
: string
value
: int
字段的增量
int
: 自增后的字段值
$redis->delete('h');
$redis->hIncrBy('h', 'x', 2); // 返回 2,h[x] = 2
$redis->hIncrBy('h', 'x', 1); // h[x] = 2 + 1,返回 2
为哈希表中的指定字段的浮点数值加上增量
key
: string
member
: string
value
: float
字段的浮点值增量
float
: 自增后的字段值
$redis->delete('h');
$redis->hIncrByFloat('h', 'x', 1.5); // 返回 1.5,h[x] = 1.5
$redis->hIncrByFloat('h', 'x', 1.5); // 返回 3.0,h[x] = 3.0
$redis->hIncrByFloat('h', 'x', -3.0); // 返回 0.0,h[x] = 0.0
同时为哈希表中的多个字段赋值,非字符串值将被转换为字符串,NULL
值转化为空字符串
key
: string
members
: array
key => value
数组
boolean
$redis->delete('user:1');
$redis->hMSet('user:1', array('name' => 'Joe', 'salary' => 2000));
$redis->hIncrBy('user:1', 'salary', 100);
获取所有给定字段的值
key
: string
memberKeys
array
array
: 字段名称为键名,字段值为键值的数组
$redis->delete('h');
$redis->hSet('h', 'field1', 'value1');
$redis->hSet('h', 'field2', 'value2');
$redis->hMGet('h', ['field1', 'field2']); // 返回 array('field1' => 'value1', 'field2' => 'value2')
迭代哈希表中的键值对
key
: string
iterator
: int
迭代次数的引用pattern
: string
可选,匹配模式count
: int
每次返回的字段数
array
: 与给定模式匹配的元素组成的数组
$it = NULL;
// 在迭代完成之前,不返回空值
$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\n";
}
}
获取哈希表中,字段值的长度
key
: string
field
: string
int
: 字段值的长度,哈希表或字段不存在时,返回 0
trim
),就是说,让列表只保留指定区间内的元素,不在指定区间之内的元素都将被删除移出并获取列表的第一个/最后一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止
keys
: array
包含列表中key
的数组timeout
: int
超时时间
或key
: string
key2
: string
key3
: string
...keyn
: string
timeout
: int
超时时间
array
: array(‘listName‘, ‘element‘)
// 非阻塞
$redis->lPush('key1', 'A');
$redis->delete('key2');
$redis->blPop('key1', 'key2', 10); // array('key1', 'A')
// 或
$redis->blPop(['key1', 'key2'], 10); // array('key1', 'A')
$redis->brPop('key1', 'key2', 10); // array('key1', 'A');
// 或
$redis->brPop(['key1', 'key2'], 10); // array('key1', 'A')
// 阻塞
// 进程 1
$redis->delete('key1');
$redis->blPop('key1', 10); // 阻塞 10s
// 进程 2
$redis->lPush('key1', 'A')
// 进程 1
// 返回 array('key1', 'A')
rPopLPush
的阻塞版本,第三个参数为等待超时时间
srcKey
: string
dstKey
: string
timeout
: int
超时时间
string
/boolean
: 返回被移除的元素,等待超时则返回FALSE
返回列表中,指定位置的元素
0 指第一个元素,1 指第二个元素...
-1 指最后一个元素,-2 指倒数第二个元素
如果key
未指向列表,或索引值无效,返回FALSE
key
: string
index
: int
string
/boolean
: 返回指定索引处的元素。如果索引对应的元素不存在,或非字符串类型,返回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
在列表的元素前或者后插入元素
当列表不存在,或指定元素不存在与列表中时,不执行任何操作
key
: string
position
: string
Redis::BEFORE | Redis::AFTER
pivot
: string
value
: string
int
: 返回插入操作完成之后,列表的长度。如果没有找到指定元素,返回 -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
移出并获取列表的第一个元素
key
: string
string
/boolean
: 返回列表的第一个元素,失败时(空列表)返回FALSE
$redis->rPush('key1', 'A');
$redis->rPush('key1', 'B');
$redis->rPush('key1', 'C'); // key1 => ['A', 'B', 'C']
$redis->lPop('key1'); // key1 => ['B', 'C']
将一个或多个值插入到列表头部。如果key
不存在,一个空列表会被创建并执行lPush
操作。当key
存在但不是列表类型时,返回FALSE
key
: string
value
: string
要插入到列表中的字符串
int
: 返回执行插入操作后,列表的长度。失败时返回FALSE
$redis->delete('key1');
$redis->lPush('key1', 'C'); // 返回 1
$redis->lPush('key1', 'B'); // 返回 2
$redis->lPush('key1', 'A'); // 返回 3
// key1 现在指向列表: ['A', 'B', 'C']
将一个值插入到已存在的列表头部
key
: string
value
: string
要插入到列表中的字符串
int
: 返回执行插入操作后,列表的长度。失败时返回FALSE
$redis->delete('key1');
$redis->lPushX('key1', 'A'); // 返回 0
$redis->lPush('key1', 'A'); // 返回 1
$redis->lPushX('key1', 'B'); // 返回 2
$redis->lPushX('key1', 'C'); // 返回 3
// key1 现在指向列表: ['A', 'B', 'C']
返回列表中指定区间内的元素,区间以偏移量start
和end
指定。
其中 0 表示列表的第一个元素, 1 表示列表的第二个元素...
以 -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素...
key
: string
start
: int
end
: int
array
: 包含指定区间内元素的数组
$redis->rPush('key1', 'A');
$redis->rPush('key1', 'B');
$redis->rPush('key1', 'C');
$redis->lRange('key1', 0, -1); // array('A', 'B', 'C')
根据参数count
的值,移除列表中与参数value
相等的元素。
如果count = 0
,移除表中所有与value
相等的值;
如果count < 0
,从表尾开始向表头搜索,移除与value
相等的元素,数量为count
的绝对值;
如果count > 0
,从表头开始向表尾搜索,移除与value
相等的元素,数量为count
key
: string
value
: string
count
: int
int
/boolean
: 返回被移除元素的数量。列表不存在时返回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')
通过索引设置列表元素的值
key
: string
index
: int
value
: string
boolean
: 操作成功返回TRUE
。如果索引超出范围,或者key
不指向列表,返回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'
对一个列表进行修剪(trim
),让列表只保留指定区间内的元素,不在指定区间之内的元素都将被删除
key
: string
start
: int
stop
: int
array
: 返回列表中剩余元素组成的数组。如果key
值不是列表,返回FALSE
$redis->rPush('key1', 'A');
$redis->rPush('key1', 'B');
$redis->rPush('key1', 'C');
$redis->lRange('key1', 0, -1); // array('A', 'B', 'C')
$redis->lTrim('key1', 0, 1);
$redis->lRange('key1', 0, -1); // array('A', 'B')
移除并获取列表最后一个元素
key
: string
string
: 返回被移除的元素。失败(列表为空)返回FALSE
$redis->rPush('key1', 'A');
$redis->rPush('key1', 'B');
$redis->rPush('key1', 'C'); // key1 => ['A', 'B', 'C']
$redis->rPop('key1'); // key1 => ['A', 'B']
移除列表的最后一个元素,并将该元素添加到另一个列表并返回
srcKey
: string
dstKey
: string
string
: 返回被移除的元素。失败返回FALSE
$redis->delete('x', 'y');
$redis->lPush('x', 'abc');
$redis->lPush('x', 'def');
$redis->lPush('y', '123');
$redis->lPush('y', '456');
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"
}
*/
将一个或多个值插入到列表的尾部(最右边),如果列表不存在,一个空列表会被创建并执行rPush
操作。 当列表存在但不是列表类型时,返回FALSE
key
: string
value
: string
要插入到列表的字符串
int
: 执行插入操作后,列表的长度。失败返回FALSE
$redis->delete('key1');
$redis->rPush('key1', 'A'); // 返回 1
$redis->rPush('key1', 'B'); // 返回 2
$redis->rPush('key1', 'C'); // 返回 3
// key1 => ['A', 'B', 'C']
将一个值插入到已存在的列表尾部(最右边)。失败返回FALSE
key
: string
value
: string
要插入到列表的字符串
int
: 执行插入操作后,列表的长度。失败返回FALSE
$redis->delete('key1');
$redis->rPushX('key1', 'A'); // 返回 0
$redis->rPush('key1', 'A'); // 返回 1
$redis->rPushX('key1', 'B'); // 返回 2
$redis->rPushX('key1', 'C'); // 返回 3
// key1 => ['A', 'B', 'C']
返回列表的长度。
如果列表key
不存在或为空列表,返回 0 。如果key
不是列表类型,返回FALSE
Key
: string
int
: 返回列表的长度。如果key
不是列表,返回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
key
中key
中key
集合中将一个或多个成员元素加入到集合中。如果元素已存在于集合中,返回FALSE
key
: string
value
: string
int
: 返回被添加到集合中的新元素的数量
$redis->sAdd('key1', 'member1'); // 1, key1 => {'member'}
$redis->sAdd('key1', 'member2', 'member3'); // 2, key1 => {'member1', 'member2', 'member3'}
$redis->sAdd('key1', 'member2'); // 0, key1 => {'member1', 'member2', 'member3'}
返回集合中元素的数量
key
: string
int
: 返回集合中元素的数量。 当集合key
不存在时,返回 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
返回给定集合之间的差集
Keys
: string
key
, key2
, ..., keyN
指向集合的任意数量的key
array
: 第一个集合与其他所有集合差集元素组成的数组
$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"
}
*/
将给定集合之间的差集存储在指定的集合中
dstKey
: string
用于存储差集的key
keys
: string
key1
, key2
, ..., keyN
指向集合的任意数量的key
int
: 返回差集中的元素数量。如果某个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"
}
*/
返回给定所有给定集合的交集
当给定集合当中有一个空集时,结果也为空集。如果某个key
不存在,返回FALSE
keys
: string
key1
, key2
, ..., keyN
: string
,指向集合的任意数量的key
array
: 返回交集成员组成的数组。如果交集为空,返回空数组
$redis->sAdd('key1', 'val1');
$redis->sAdd('key1', 'val2');
$redis->sAdd('key1', 'val3');
$redis->sAdd('key1', 'val4');
$redis->sAdd('key2', 'val3');
$redis->sAdd('key2', 'val4');
$redis->sAdd('key3', 'val3');
$redis->sAdd('key3', 'val4');
var_dump($redis->sInter('key1', 'key2', 'key3'));
/*
输出
array(2) {
[0]=>
string(4) "val4"
[1]=>
string(4) "val3"
}
*/
将给定集合之间的交集存储在指定的集合中
dstKey
: string
用于存储交集的key
keys
: string
key
, key2
, ..., keyN
指向集合的任意数量的key
int
: 返回存储交集的集合的元素数量。如果某个key
不存在,返回FALSE
$redis->sAdd('key1', 'val1');
$redis->sAdd('key1', 'val2');
$redis->sAdd('key1', 'val3');
$redis->sAdd('key1', 'val4');
$redis->sAdd('key2', 'val3');
$redis->sAdd('key2', 'val4');
$redis->sAdd('key3', 'val3');
$redis->sAdd('key3', 'val4');
var_dump($redis->sInterStore('output', 'key1', 'key2', 'key3'));
var_dump($redis->sMembers('output'));
/*
输出
int(2)
array(2) {
[0]=>
string(4) "val4"
[1]=>
string(4) "val3"
}
*/
判断成员元素是否是集合的成员
key
: string
value
: string
boolean
: 如果元素是集合的成员,返回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
返回集合中的所有的成员
Key
: string
array
: 集合中的所有成员组成的数组
$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"
}
*/
顺序随机,对应于Redis
集合内部的排序
将指定元素从当前集合移动到目标集合
srcKey
: string
dstKey
: string
member
: string
boolean
: 操作成功返回TRUE
。如果当前key
或目标key
不存在,或元素不存在于当前key
中,返回FALSE
$redis->sAdd('key1', 'member11');
$redis->sAdd('key1', 'member12');
$redis->sAdd('key1', 'member13'); // key1 => {'member11', 'member12', 'member13'}
$redis->sAdd('key2', 'member21');
$redis->sAdd('key2', 'member22'); // key2 => {'member21', 'member22'}
$redis->sMove('key1', 'key2', 'member13');
/*
key1 => {'member11', 'member12'}
key2 => {'member21', 'member22', 'member13'}
*/
移除集合中的一个或多个随机元素,返回移除的元素
key
: string
count
: int
可选
string
/boolean
: 被移除的元素。集合不存在或为空,返回FALSE
array
/boolean
: 被移除元素组成的数组。集合不存在时,返回空数组。key
不是集合,返回FALSE
$redis->sAdd('key1', 'member1');
$redis->sAdd('key1', 'member2');
$redis->sAdd('key1', 'member3'); // key1 => {'member3', 'member1', 'member2'}
$redis->sPop('key1'); // 'member1', key1 => {'member3', 'member2'}
$redis->sPop('key1'); // 'member3', key1 => {'member2'}
// 传递 count 参数
$redis->sAdd('key2', 'member1', 'member2', 'member3');
$redis->sPop('key2', 3); // 返回所有成员,顺序随机
返回集合中的一个随机元素
key
: string
count
: int
可选
string
/array
/boolean
:
不提供count
参数:返回一个随机元素(String
)。
提供count
参数:如果count
为正数,且小于集合基数,返回一个包含count
个元素的数组,数组中的元素各不相同。如果count
大于等于集合基数,那么返回整个集合。如果count
为负数,返回一个数组,数组中的元素可能会重复出现多次,而数组的长度为count
的绝对值。集合不存在,返回FALSE
$redis->sAdd('key1', 'member1');
$redis->sAdd('key1', 'member2');
$redis->sAdd('key1', 'member3'); // key1 => {'member3', 'member1', 'member2'}
// 无 count 参数
$redis->sRandMember('key1'); // 'member1', key1 => {'member3', 'member1', 'member2'}
$redis->sRandMember('key1'); // 'member3', key1 => {'member3', 'member1', 'member2'}
// 有 count 参数
$redis->sRandMember('key1', 3); // 返回集合所有元素组成的数组
$redis->sRandMember('key1', 2); // 返回集合中 2 个元素组成的数组
$redis->sRandMember('key1', -100); // 返回 100 个元素组成的数
$redis->sRandMember('empty-set', 100); // 返回空数组
$redis->sRandMember('not-a-set', 100); // 返回 FALSE
移除集合中的一个或多个成员元素,不存在的成员元素会被忽略
key
: string
member
: string
int
: 返回被成功移除的元素的数量
$redis->sAdd('key1', 'member1');
$redis->sAdd('key1', 'member2');
$redis->sAdd('key1', 'member3'); // key1 => {'member1', 'member2', 'member3'}
$redis->sRem('key1', 'member2', 'member3'); // 返回 2, key1 => {'member1'}
返回给定集合的并集。不存在的集合key
被视为空集
Keys
: string
key
, key2
, ..., keyN
任意数量指向集合的key
array
: 并集成员组成的数组
$redids->delete('s0', 's1', 's2');
$redis->sAdd('s0', '1');
$redis->sAdd('s0', '2');
$redis->sAdd('s1', '3');
$redis->sAdd('s1', '1');
$redis->sAdd('s2', '3');
$redis->sAdd('s2', '4');
var_dump($redis->sUnion('s0', 's1', 's2'));
/*
返回存在于 s0、s1 或 s2 中的元素
array(4) {
[0]=>
string(1) "3"
[1]=>
string(1) "4"
[2]=>
string(1) "1"
[3]=>
string(1) "2"
}
*/
将给定集合的并集存储在指定的集合key
中
dstKey
: string
用于存储并集的key
Keys
: string
key
, key2
, ..., keyN
任意数量指向集合的key
int
: 返回结果集中的元素数量。某个key
不存在则返回FALSE
$redis->delete('s0', 's1', 's2');
$redis->sAdd('s0', '1');
$redis->sAdd('s0', '2');
$redis->sAdd('s1', '3');
$redis->sAdd('s1', '1');
$redis->sAdd('s2', '3');
$redis->sAdd('s2', '4');
var_dump($redis->sUnionStore('dst', 's0', 's1', 's2'));
var_dump($redis->sMembers('dst'));
/*
返回存在于 s0、s1 或 s2 中的元素
int(4)
array(4) {
[0]=>
string(1) "3"
[1]=>
string(1) "4"
[2]=>
string(1) "1"
[3]=>
string(1) "2"
}
*/
迭代集合中的元素
Key
: string
待迭代的key
iterator
: int
(引用) 迭代次数pattern
: string
可选,匹配模式count
: int
每次迭代返回的元素数量
array
/boolean
: 返回元素数组或者FALSE
$it = NULL;
$redis->setOption(Redis::OPT_SCAN, Redis::SCAN_RETRY); // 迭代完成前,不要返回空值
while ($arr_mems = $redis->sScan('set', $it, '*pattern*')) {
foreach ($arr_mems as $str_mem) {
echo "Member: $str_mem\n";
}
}
$it = NULL;
$redis->setOption(Redis::OPT_SCAN, Redis::SCAN_RETRY); // 每次迭代都返回结果,无论结果是否为空
while ($arr_mems = $redis->sScan('set', $it, '*pattern*') !== FALSE) {
if (count($arr_mems) > 0) {
foreach ($arr_mems as $str_mem) {
echo "Member found: $str_mem\n";
}
} else {
echo "No members in this iteration, iterator value: $it\n";
}
}
向有序集合添加一个或多个成员,或者更新已存在成员的分数
key
: string
score
: double
value
: string
int
: 成员添加成功返回 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)
计算集合中元素的数量
key
: string
int
: 返回有序集的基数
$redis->zAdd('key', 0, 'val0');
$redis->zAdd('key', 2, 'val2');
$redis->zAdd('key', 10, 'val10');
$redis->zSize('key'); // 3
计算有序集合中指定分数区间的成员数量
key
: string
start
: float
end
: float
int
: 分数值在指定间的成员的数量
$redis->zAdd('key', 0, 'val0');
$redis->zAdd('key', 2, 'val2');
$redis->zAdd('key', 10, 'val10');
$redis->zCount('key', 0, 3); // 2
对有序集合中指定成员的分数加上增量
key
: string
value
: float
分数的增量member
: string
float
: 返回成员的新分数值
$redis->delete('key');
$redis->zIncrBy('key', 2.5, 'member1'); // key 或 member1 不存在,member1 的分数被初始化为 0。现在 member1 的分数为 2.5
$redis->zIncrBy('key', 1, 'member1'); // 3.5
keyOutput
: string
ZSetKeys
: array
Weights
: array
可选,权重,聚合操作之前,集合中所有元素的分数值先乘上权重aggregateFunction
: string
可选,SUM
或MIN
或MAX
,定义如何计算结果集中某个成员的分数值
int
: 保存到目标结果集的的成员数量
$redis->delete('k1');
$redis->delete('k2');
$redis->delete('k3');
$redis->delete('ko1');
$redis->delete('ko2');
$redis->delete('ko3');
$redis->delete('ko4');
$redis->zAdd('k1', 0, 'val0');
$redis->zAdd('k1', 1, 'val1');
$redis->zAdd('k1', 3, 'val3');
$redis->zAdd('k2', 2, 'val1');
$redis->zAdd('k2', 3, 'val3');
$redis->zInter('ko1', ['k1', 'k2']); // 2, ko1 => array('val1', 'val3')
$redis->zInter('ko2', ['k1', 'k2'], [1, 1]); // 2, ko2 => array('val1', 'val3')
// 使用 Weights 参数
$redis->zInter('ko3', ['k1', 'k2'], [1, 5], 'min'); // 2, ko3 => array('val1', 'val3')
$redis->zInter('ko4', ['k1', 'k2'], [1, 5], 'max'); // 2, ko4 => array('val3', 'val1')
通过索引区间返回有序集合成指定区间内的成员
下标参数start
和stop
都以0
为底,0
表示有序集第一个成员,以 1 表示有序集第二个成员,以此类推。
以 -1 表示最后一个成员, -2 表示倒数第二个成员,以此类推
key
: string
start
: int
end
: int
withscores
: bool
默认FALSE
array
: 指定区间内,带有分数值(可选)的有序集成员的列表
$redis->zAdd('key1', 0, 'val0');
$redis->zAdd('key1', 2, 'val2');
$redis->aAdd('key1', 10, 'val10');
$redis->zRange('key1', 0, -1); // array('val0', 'val2', 'val10')
// 带上分值
$redis->zRange('key1', 0, -1, true); // array('val0' => 0, 'val2' => 2, 'val10' => 10)
返回有序集合中指定分数区间的成员列表。有序集成员按分数值递增(从小到大,zRevRangeByScore
为从大到小)次序排列
key
: string
start
: string
end
: string
options
: array
有两种可用options
: withscores => TRUE
和limit => array($offset, $count)
array
: 指定区间内,带有分数值(可选)的有序集成员的列表
$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, ['withscores' => TRUE]); // array('val0' => 0, 'val2' => 2)
$redis->zRangeByScore('key', 0, 3, ['limit' => [1, 1]]); // array('val2')
$redis->zRangeByScore('key', 0, 3, ['withscores' => TRUE, 'limit' => [1, 2]]); // array('val2' => 2)
通过字典区间返回有序集合的成员min
和max
参数必须以(
、[
开头,或者为-
和+
。
必须使用三个或五个参数调用该方法,否则将返回FALSE
key
: string
min
: string
max
: string
offset
: int
可选,起始位置limit
: int
可选,返回元素的个数
array
: 指定区间内的元素列表
foreach (['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->zRangeByLext('key', '-', '[c', 1, 2); // array('b', 'c')
返回有序集中指定成员的排名,排名以 0 开始。其中有序集成员按分数值递增(从小到大,zRevRank
有大到小)顺序排列
key
: string
member
: string
int
: 元素在集合中的排名
$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
移除有序集合中的一个或多个成员
key
: string
member
: string
int
: 成功返回 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')
移除有序集合中给定的排名区间的所有成员
key
: string
start
: int
end
: int
int
: 被移除成员的数量
$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, ['withscores' => TRUE]); // array('three' => 3)
移除有序集合中给定的分数区间的所有成员
key
: string
start
: float
/string
end
: float
/string
int
: 被移除成员的数量
$redis->zAdd('key', 0, 'val0');
$redis->zAdd('key', 2, 'val2');
$redis->zAdd('key', 10, 'val10');
$redis->zRemRangeByScore('key', 0, 3); // 2
返回有序集中指定区间内的成员,通过索引,分数从高到底
下标参数start
和stop
都以0
为底,0
表示有序集第一个成员,以 1 表示有序集第二个成员,以此类推。
以 -1 表示最后一个成员, -2 表示倒数第二个成员,以此类推
key
: string
start
: int
end
: int
withscores
: bool
默认FALSE
array
: 指定区间内,带有分数值(可选)的有序集成员的列表
$redis->zAdd('key', 0, 'val0');
$redis->zAdd('key', 2, 'val2');
$redis->zAdd('key', 10, 'val10');
$redis->zRevRange('key', 0, -1); // array('val10', 'val2', 'val0')
// 带分数值
$redis->zRevRange('key', 0, -1, true); // array('val10' => 10, 'val2' => 2, 'val0' => 0)
返回有序集中,成员的分数值
key
: string
member
: string
float
$redis->zAdd('key', 2.5, 'val2');
$redis->zScore('key', 'val2'); // 2.5
计算给定的一个或多个有序集的并集,并存储在新的key
中
keyOutput
: string
ZSetKeys
: array
Weights
: array
权重,聚合操作之前,集合的所有元素分数值乘上权重aggregateFunction
: string
SUM
、MIN
或MAX
,定义如何计算结果集中某个成员的分数值
int
: 保存到结果集的成员数量
$redis->delete('k1');
$redis->delete('k2');
$redis->delete('k3');
$redis->delete('ko1');
$redis->delete('ko2');
$redis->delete('ko3');
$redis->zAdd('k1', 0, 'val0');
$redis->zAdd('k1', 1, 'val1');
$redis->zAdd('k2', 2, 'val2');
$redis->zAdd('k2', 3, 'val3');
$redis->zUnion('ko1', ['k1', 'k2']); // 4, ko1 => array('val0', 'val1', 'val2', 'val3')
// 使用 Weights 参数
$redis->zUnion('ko2', ['k1', 'k2'], [1, 1]); // 4, ko2 => array('val0', 'val1', 'val2', 'val3')
$redis->zUnion('ko3', ['k1', 'k2'], array(5, 1)); // 4, ko3 => array('val0', 'val2', 'val3', 'val1')
迭代有序集合中的元素(包括元素成员和元素分值)
key
: string
iterator
: int
迭代次数的引用,初始值为 0pattern
: string
可选,匹配模式
array
/boolean
: 返回符合匹配模式的元素集合,迭代完成时返回FALSE
$it = NULL;
$redis->setOption(Redis::OPT_SCAN, Redis::SCAN_RETRY);
while ($arr_matches = $redis->zScan('zset', $it, '*pattern*')) {
foreach ($arr_matches as $str_mem => $f_score) {
echo "key: $str_mem, Score: $f_score\n";
}
}
原文地址:https://segmentfault.com/a/1190000016925335
标签:day unix套接字 字符串数组 标识 ace oat 参数调用 cte before
原文地址:https://www.cnblogs.com/lalalagq/p/9962108.html