注:翻译phpredis使用手册https://github.com/phpredis/phpredis,根据谷歌翻译再加上自己的一点见解。尽量日更,学会markdown后会重新排版
类与方法
用法
1.Redis类
2.RedisException类
3.预定义的常量
Redis类
描述:创建Redis客户端
例:$redis = new Redis();
RedisException类
如果无法访问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
连接
1.connect,open - 连接到服务器
2.pconnect,popen - 连接到服务器(持久性、长连接)
3.auth - 向服务器进行身份验证
4.select - 更改当前连接的选定数据库
5.swapdb - 交换两个Redis数据库
6.close - 关闭连接
7.setOption - 设置客户端选项
8.getOption - 获取客户端选项
9.ping - ping服务器
10.echo - 回显给定的字符串
connect,open
描述:连接到Redis实例
参数:
host:string,可以是主机,也可以是unix domain socket
port: int, 可选
timeout:float,以秒为单位的值(可选,默认值为0表示无限制)
reserved: 如果指定了retry_interval,则应为NULL
retry_interval: int, 以毫秒为单位的值(可选)
read_timeout: float,以秒为单位的值(可选,默认为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域套接字。
$ redis - > connect(' 127.0.0.1 ',6379,1,NULL,100); // 1秒超时,重新连接尝试之间延迟100毫秒。
pconnect, popen
说明:连接到Redis实例或重用已与pconnect
/popen建立的连接。
在PHP进程结束之前,在请求关闭或结束时不会关闭连接。因此,在连接到一台redis服务器的许多服务器上使用持久连接时,请准备好太多开放FD's errors (这是啥错误?)(特别是在redis服务器端)。
还可以通过host + port + timeout或host + persistent_id或unix socket + timeout来识别多个持久连接。(Unix socket)
此功能在线程版本中不可用。然后,pconnect和popen像它们的非持久等价物一样工作。(指定意思不对)
参数:
host: string host或Unix socket
port: int 可选
timeout: float 以秒为单位的值(可选,默认为0表示不限制)
persistent_id: string 请求的持久连接标识
retry_interval:int 以毫秒为单位的值(可选)
read_timeout:float 以秒为单位的值(可选,默认为0表示不限制)
返回值:
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.5秒超时 对于前两个这将是另一个连接
$redis->pconnect('127.0.0.1', 6379, 2.5, 'x'); // x作为persistent_id发送 对于前三个这将是另一个连接
$redis->pconnect('/tmp/redis.sock'); // unix domain socket 这将是另一个连接
auth
描述:使用密码验证连接。警告:密码通过网络以纯文本的形式发送。auth命令
参数:
string: 密码
返回值:
true表示连接通过密码验证,false则不然。
例:
$redis->auth('foobared');
select
描述:更改当前连接中所选择的数据库。select命令
参数:
int dbindex,要切换的数据库编号。
返回值:
true表示成功,false表示失败
例:查看move方法里的例子
swapdb
描述:以原子方式将一个Redis数据库与另一个数据库交换
参数:
int:db1
int:db2
返回值:
bool:true表示成功,false表示失败
注意:需要Redis>=4.0.0
例:
$ redis- > swapdb(0,1); / *以原子方式将DB 0与DB 1交换* /
close
描述:断开与redis实例的链接
注意:关闭持久链接需要phpRedis>=4.2.0
参数:
无
返回值:
bool:true表示成功,false表示失败。
setOption
描述:设置客户端选项
参数:
设置参数的名称 name
设置参数的值 value
返回值
bool: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 serialize / unserialize
$ redis - > setOption(Redis :: OPT_PREFIX,' myAppName:'); //在所有键上使用自定义前缀
/ * SCAN系列命令的选项,指示是否从用户空结果。如果设置为SCAN_NORETRY(默认值),phpredis 将一次只发出一个SCAN命令,有时会返回一个空的结果数组。如果设置为SCAN_RETRY,phpredis将重试scan命令, 直到键返回或Redis返回零
* /
$ redis - > setOption( Redis :: OPT_SCAN, Redis :: SCAN_NORETRY);
$ redis - > setOption( Redis :: OPT_SCAN, Redis :: SCAN_RETRY);
getOption
描述:获取客户端设置
参数:设置的名字 name
返回值:
设置参数的值
例
$ redis - > getOption(Redis :: OPT_SERIALIZER);
//返回Redis :: SERIALIZER_NONE,Redis :: SERIALIZER_PHP或Redis :: SERIALIZER_IGBINARY。
ping
描述:检查当前连接状态
参数:无
返回值:
string:+PONG表示成功。如上所述,如果连接出错会抛出RedisException对象
echo
描述:向redis发送一个字符串,将会使用相同的字符串回复。
参数:
string要发送的消息
返回值:
string相同的消息
Server
- bgRewriteAOF - 异步重写仅附加文件
- bgSave - 将数据集异步保存到磁盘(在后台)
- config - 获取或设置Redis服务器配置参数
- dbSize - 返回所选数据库中的键数
- flushAll - 从所有数据库中删除所有密钥
- flushDb - 从当前数据库中删除所有键
- info - 获取有关服务器的信息和统计信息
- lastSave - 获取上次磁盘保存的时间戳
- resetStat - 重置info方法返回的统计信息。
- save - 同步将数据集保存到磁盘(等待完成)
- slaveOf - 使服务器成为另一个实例的从属服务器,或将其提升为主服务器
- time - 返回当前服务器时间
- slowLog - 访问Redis slowLog条目
bgRewriteAOF
描述:开始AOF的后台重写BGREWRITEAOF
参数:无
返回值:true表示成功,false表示失败
例
$ redis - > bgRewriteAOF();
bgSave
描述:将数据异步的保存到磁盘(在后台)bgSave
参数:无
返回值:true表示成功,false表示失败。如果保存已在运行,则此命令会失败并返回false
例
$ redis - > bgSave();
config
描述:获取或设置Redis服务器配置参数
参数:
operation(string) GET或SET
key(对于SET是string,对于GET则是glob模式匹配),相关示例。
value可选字符串(仅适用于SET)
返回值:
对于GET返回关联数组,key->value形式
对于SET返回bool
例:
$redis->config("GET", "*max-*-entries*");
$redis->config("SET", "dir", "/var/run/redis/dumps/");
dbSize
描述:返回所选数据库键的个数,dbSize。
参数:无
返回值:
int 数据库的大小,根据键数
例:
$count = $redis->dbSize();
echo "Redis has $count keys\n";
fullAll
描述:从所有数据库中删除所有键
参数:
async(bool)需要数据版本4.0.0或以上,是否异步
返回值:
bool : 总是true
例:
$redis->flushAll();
flushDb
描述:从当前数据库删除所有键
参数:
async(bool)需要数据版本4.0.0或以上,是否异步
返回值:
bool : 总是true
例:
$redis->flushDb();
info
描述:获取服务器的信息与统计信息,INFO命令
返回提供服务器信息的关联数组,不向info传递参数将会调用标准的redis info命令,该命令返回如下信息:
redis_version redis服务器版本
arch_bits 架构(32或者64位)
uptime_in_seconds 自redis服务器启动以来,经过的秒数
uptime_in_days 自redis服务器启动以来,经过的天数
connected_clients 已连接客户端的数量(不包括从属服务器的连接数量)
connected_slaves 已连接的从属服务器的数量
used_memory 由redis分配的内存数量,以字节(byte)为单位
rdb_changes_since_last_save 距离最近一次成功创建持久化文件后,进过了多少秒
rdb_bgsave_in_process 一个标志值,记录服务器是否正在创建RDB文件
rdb_last_save_time 最近一次成功创建RDB文件的UNIX时间戳
total_connections_received 服务器已接受的连接请求数量
total_commands_processed 服务器已执行的命令数量
role 如果当前服务器没有在复制任何其他服务器,那么这个域的值就是 master
;否则的话,这个域的值就是 slave
。注意,在创建复制链的时候,一个从服务器也可能是另一个服务器的主服务器。
你可以传递各种选项给info,这将修改返回的内容,(例如"COMMANDSTATS", "CPU")
参数:
选项:redis提供的选项(例如"COMMANDSTATUS", "CPU")
例:
$redis->info(); /* 标准的redis INFO 命令 */
$redis->info("COMMANDSTATS"); /* 相关的已运行命令 (>=2.6 only)
$redis->info("CPU"); /* 只是来自 Redis INFO的 CPU信息*/
lastSave
描述:返回上一次磁盘保存的时间戳,lastSave命令
参数:无
返回值:int 时间戳
例:
$redis->lastSave();
resetStat
描述:重置info方法返回的统计信息,CONFIG RESETSTAT命令
这些计数器将会被重置
- Keyspace hits 键空间命中次数
- Keyspace misses 键空间不命中次数
- Number of commands processed 执行命令的总数
- Number of connections received 连接服务器的次数
- Number of expired keys 过期key的个数
参数:无
返回值:bool,true表示成功,false表示失败
例:
$redis->resetStat();
save
描述:同步将数据集保存到磁盘(等待直到完成),save命令
参数:无
返回值:true表示成功,false表示失败。如果保存已在运行,则此命令返回false
例:
$redis->save();
slaveOf
描述:改变从服务器的状态,slaveOf命令
参数:主机(string)和端口(int),或没有参数停止作为从服务器。
返回值:true表示成功,false表示失败
例:
$redis->slaveOf('10.0.1.7', 6379);
/* ... */
$redis->slaveOf();
time
描述:返回当前服务器时间,time命令
参数:无
返回值:如果成功将会返回一个关联数组,其中元素0是unix时间戳,元素1是微秒
例:
$redis->time();
slowLog
描述:获取redis的慢查询,slowLog命令
参数:
Operation(string):可以是GET, LEN, RESET
Length(string),可选的:如果执行的是SLOWLOG GET命令,可以传入一个长度参数
返回值:
slowLog的返回值取决于执行的操作,SLOWLOG GET:redis提供的慢查询数组,SLOWLOG LEN:int慢查询的长度,SLOWLOG RESET :bool,取决于是否成功
例:
// 获取10条慢查询
$redis->slowLog('get', 10);
// 获取默认数量的慢查询
$redis->slowLog('get');
// 重置慢查询
$redis->slowLog('reset');
// 检索慢查询长度
$redis->slowLog('len');
键和字符串
字符串
- append - 将值附加到键
- bitCount - 计算字符串中的设置位
- bitOp - 在字符串之间执行按位运算
- decr,decrBy - 减少键的值
- get - 获取密钥的值
- getBit - 返回存储在key处的字符串值中offset处的位值
- getRange - 获取存储在密钥中的字符串的子字符串
- getSet - 设置键的字符串值并返回其旧值
- incr,incrBy - 增加键的值
- incrByFloat - 按给定的数量增加键的浮点值
- mGet,getMultiple - 获取所有给定键的值
- mSet,mSetNX - 将多个键设置为多个值
- set - 设置键的字符串值
- setBit - 设置或清除key中存储的字符串值中offset的位
- setEx,pSetEx - 设置键的值和到期时间
- setNx - 仅当密钥不存在时才设置密钥的值
- setRange - 从指定偏移量开始的键覆盖字符串的一部分
- strLen - 获取存储在键中的值的长度
键
- del,delete,unlink - 删除键
- dump - 返回存储在指定键中的值的序列化版本。
- exists - 确定密钥是否存在
- expire,setTimeout,pexpire - 设置密钥的生存时间,以秒为单位
- expireAt,pexpireAt - 将密钥的到期时间设置为UNIX时间戳
- keys,getKeys - 查找与给定模式匹配的所有键
- 扫描 - 扫描键空间中的键(Redis> = 2.8.0)
- migrate - 以原子方式将密钥从Redis实例转移到另一个实例
- move - 将一个键移动到另一个数据库
- object - 检查Redis对象的内部
- persist - 从密钥中删除过期时间
- randomKey - 从键空间返回一个随机密钥
- rename,renameKey - 重命名密钥
- renameNx - 仅在新密钥不存在时重命名密钥
- type - 确定key中存储的类型
- sort - 对列表,集合或有序集合中的元素进行排序
- ttl,pttl - 为钥匙留出时间
- restore - 使用先前通过dump获得的提供的序列化值创建密钥。
get
描述:获取该键的值,get命令
参数:key
返回值:string/bool,如果key不存在返回false,否则返回此键的值
例:
$redis->get('key');
set
描述:给键的值设置为字符串,如果redis >= 2.6.12,你还可以传入扩展选项,如下所示。set命令
参数:
key
value
timeout/options array(可选),如果你传入一个整型,phpredis,会重定向为SETEX,如果你传入有效的数组,将尝试使用Redis> = 2.6.12扩展选项。
返回值:
true表示成功
例:
// 简单的 key -> value 设置
$redis->set('key', 'value');
// 将重定向,实际上调用的是SETEX
$redis->set('key','value', 10);
// 如果key不存在将设置值,生存时间为10秒
$redis->set('key', 'value', Array('nx', 'ex'=>10));
//如果key存在将设置值, 生存时间为1000毫秒
$redis->set('key', 'value', Array('xx', 'px'=>1000));
setEx,pSetEx
描述:将键的值设置为字符串,并设置生存时间。pSetEx生存时间以毫秒为单位。setEx命令,pSetEx命令
参数:key ttl value
返回值:true表示命令成功
例:
$redis->setEx('key', 3600, 'value'); // 设置 key → value, 1h的生存时间
$redis->pSetEx('key', 100, 'value'); // 设置 key → value, 0.1s的生存时间
setNx
描述:如果当前数据库没有此键,则将键的值设置为字符串。setNx命令
参数:key value
返回值:true表示命令成功
例:
$redis->setNx('key', 'value'); /* return TRUE */
$redis->setNx('key', 'value'); /* return FALSE */
del,delete,unlink
描述:删除指定的键
参数:键的数组,或者是多个参数,每一个都是一个键。
注意!如果已连接的redis服务器>=4.0.0,则可以使用unlink方法,与del方法相同,从而删除键。unlink命令是非阻塞的,将异步的执行删除。
返回值:long 删除键的数量
例:
$redis->set('key1', 'val1');
$redis->set('key2', 'val2');
$redis->set('key3', 'val3');
$redis->set('key4', 'val4');
$redis->delete('key1', 'key2'); /* return 2 */
$redis->delete(['key3', 'key4']); /* return 2 */
/* 如果Redis >= 4.0.0 可以使用unlink方法 */
$redis->unlink('key1', 'key2');
$redis->unlink(['key1', 'key2']);
exists
描述:判断键是否存在,exists命令
参数:key
返回值:long 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', 'baz]); /* 3 */
$redis->exists('foo', 'bar', 'baz'); /* 3 */
注意!phpredis<4.0.0时,此函数只接受一个参数,并且返回bool值
incr,incrBy
描述:将存储的数字加一,如果传入第二个参数则将被用作增量,incr命令,incrBy命令
参数:
key
value 增量仅适用于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->incrBy('key1', 10); /* 24 */
incrByFloat
描述:以浮点精度增加键,incrByFloat命令
参数:
key
value (float)增量仅适用于incrBy
返回值:
float 新值
例:
$redis->incrByFloat('key1', 1.5); /* key1不存在, 所以key最终为 1.5 */
$redis->incrByFloat('key1', 1.5); /* 3 */
$redis->incrByFloat('key1', -1.5); /* 1.5 */
$redis->incrByFloat('key1', 2.5); /* 4 */
decr,decrBy
描述:将存储的数字减一,如果传入第二个参数则将被用作减量,decr命令,decrBy命令
参数:
key
value 减量仅适用于decrBy
返回值:
int 新值
例:
$redis->decr('key1'); /* 如果key1不存在则在自增前会设置成0 */
/* 现在值为 -1 */
$redis->decr('key1'); /* -2 */
$redis->decr('key1'); /* -3 */
// 将会重定向, 实际上调用的是decrBy
$redis->decr('key1', 10); /* -13 */
$redis->decrBy('key1', 10); /* -23 */
mGet,getMultiple
描述:获取所有指定键的值,如果某个键不存在则为false,mGet命令
参数:array 包含所有键的数组
返回值:array 键对应值得数组
例:
$redis->set('key1', 'value1');
$redis->set('key2', 'value2');
$redis->set('key3', 'value3');
$redis->mGet(['key1', 'key2', 'key3']); /* ['value1', 'value2', 'value3'];
$redis->mGet(['key0', 'key1', 'key5']); /* [`FALSE`, 'value1', `FALSE`];
getSet
描述:设置一个值并返回该键的上一个值。getSet命令
参数:
key
value string
返回值:string 此键的前一个值
例:
$redis->set('x', '42');
$exValue = $redis->getSet('x', 'lol'); // 返回 '42', 并将x的值设置为 'lol'
$newValue = $redis->get('x')' // 返回 'lol'
randomKey
描述:返回一个随机的键
参数::无
返回值:string 当前redis中存在的key
例:
$key = $redis->randomKey();
$surprise = $redis->get($key); //鬼才知道能返回什么
move
描述:将键移动到另一个数据库
参数:
key 将移动的键
dbindex 目标数据库的编号
返回值:
true表示成功,false表示失败
例:
$redis->select(0); // 切换到 DB 0
$redis->set('x', '42'); // 将42赋给x
$redis->move('x', 1); // 将x移动到 DB 1
$redis->select(1); // 切换到 DB 1
$redis->get('x'); // 将会返回 42
rename,renameKey
描述:重命名一个key
参数:string srckey 重命名的key
string dstkey key的新名字
返回值:true表示成功,false表示失败
例:
$redis->set('x', '42');
$redis->rename('x', 'y');
$redis->get('y'); // → 42
$redis->get('x'); // → `FALSE`
renameNx
描述:与重命名相同,但如果新键名已存在,则不会替换key。这与setNx的行为相同。
expire,setTimeOut,pexpire
描述:设置超时时间,pexpire需要以毫秒为单位
参数:
string:key键名
int:键的生存时间
返回值
bool:true表示成功,否则失败
例:
$redis->set('x', '42');
$redis->setTimeout('x', 3); // x 将在3秒后消失.
sleep(5); // 等待5秒
$redis->get('x'); // 将会返回false, 因为x已过期.
expireAt,pexpireAt
描述:设置到期日期(时间戳),pexpire需要毫秒的时间戳
参数:
string:key键名
int:Unix时间戳m,key的过期日期。
返回值:
bool:true表示成功,否则失败
例:
$redis->set('x', '42');
$now = time(NULL); // 当前的时间戳
$redis->expireAt('x', $now + 3); // x将在3秒后消失.
sleep(5); // 等待5秒
$redis->get('x'); // 将会返回false, 因为x已经过期.
keys,getKeys
描述:返回模式匹配后的字符串
参数:
string:使用'*'作为通配符。
返回值:
string数组:返回匹配的键
例:
$allKeys = $redis->keys('*'); // 匹配所有的键.
$keyWithUserPrefix = $redis->keys('user*');
scan
描述:扫描键
参数:
long(引用):初始化为null
string:可选参数,匹配模式
long:可选参数,每次迭代的键数(仅仅对redis是建议)
返回值:
array/bool:返回键的数组,结束返回false
注意:SCAN是RedisCluster的定向节点命令
例:
/* 不启用 Redis::SCAN_RETRY (默认条件) */
$it = NULL;
do {
// 扫描一些key
$arr_keys = $redis->scan($it);
// Redis可能返回空结果, 需要避免
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空结果时不返回 */
$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";
object
描述:描述key指向的对象,object命令
参数:
string:要检索的信息,encoding编码,refcount引用次数,idletime空闲时间
string:key
返回值:
string用于编码,long用于引用次数与空闲时间,false表示key不存在
例:
$redis->object("encoding", "l"); // → ziplist
$redis->object("refcount", "l"); // → 1
$redis->object("idletime", "l"); // → 400 (以秒为单位, 精度为10 秒).
type
描述:返回键的数据类型,type命令
参数:key
返回值:
返回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
描述:将字符串附加到键对应的字符串后,append命令。时间复杂度O(1)
参数:
key 键名
value 附加的字符串
返回值:
int: 追加后值的大小
例:
$redis->set('key', 'value1');
$redis->append('key', 'value2'); /* 12 */
$redis->get('key'); /* 'value1value2' */
getRange
描述:返回一个大字符串的子字符串,getRange命令
注意:substr也受支持,但是redis已经弃用了
参数:key,start,end
返回值:
string:子字符串
例:
$redis->set('key', 'string value');
$redis->getRange('key', 0, 5); /* 'string' */
$redis->getRange('key', -5, -1); /* 'value' */
setRange
描述:更改大字符串的小字符串,setRange命令
参数:key键名,offset偏移量,value值
返回值:修改后字符串的长度
例:
$redis->set('key', 'Hello world'); $redis->setRange('key', 6, "redis"); /* returns 11 */ $redis->get('key'); /* "Hello redis" */
strLen
描述:获取字符串值得长度,strLen命令
参数:key
返回值:int 长度
例:
$redis->set('key', 'value'); $redis->strlen('key'); /* 5 */
getBit
描述:从较大字符串中返回一个位,getBit命令
参数:key键名,offset偏移量
返回值:int 位值(0或1)
例:
$redis->set('key', "\x7f"); // 0111 1111 $redis->getBit('key', 0); /* 0 */ $redis->getBit('key', 1); /* 1 */
setBit
描述:更改字符串的一个位,setBit命令
参数:key键名,offset偏移量,value bool值或者是int(0或1)
返回值:
int 0或1,原来储存的位
例:
$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") */