简介
phpredis是php的一个扩展,效率是相当高有链表排序功能,对创建内存级的模块业务关系很有用;以下是redis官方提供的命令使用技巧:
下载地址如下:https://github.com/owlient/phpredis(支持redis 2.0.4)
Redis连接相关
Redis::__construct 构造函数
$redis = new Redis();
connect, open - 链接redis服务
参数:
- host: string,服务地址
- port: int,端口号
- timeout: float,链接时长 (可选, 默认为 0 ,不限链接时间)
注: 在redis.conf中也有时间,默认为300
pconnect, popen - 持久化连接
不会主动关闭的链接
setOption - 设置redis模式
getOption - 查看redis设置的模式
ping - 查看连接状态
String(字符串)操作
get - 获取某个key的值
如果该key不存在,return false
set - 写入key和value
如果写入成功,return true
setex - 带生存时间的写入值
$redis->setex('key', 3600, 'value'); // sets key → value, with 1h TTL.
setnx - 判断是否重复,写入值
$redis->setnx('key', 'value');
$redis->setnx('key', 'value');
delete - 删除指定key的值
返回已经删除key的个数(长整数)
$redis->delete('key1', 'key2');
$redis->delete(array('key3', 'key4', 'key5'));
ttl - 得到一个key的生存时间
persist - 移除生存时间到期的key
如果key到期 true,如果不到期 false
mset - 同时给多个key赋值(redis版本1.1以上才可以用)
$redis->mset(array('key0' => 'value0', 'key1' => 'value1'));
事务操作
multi, exec, discard
进入或者退出事务模式。参数可选Redis::MULTI或Redis::PIPELINE. 默认是 Redis::MULTI
- Redis::MULTI:将多个操作当成一个事务执行
- Redis::PIPELINE:让(多条)执行命令简单的,更加快速的发送给服务器,但是没有任何原子性的保证
- discard:删除一个事务
multi() 返回一个redis对象,并进入multi-mode模式,一旦进入multi-mode模式,以后调用的所有方法都会返回相同的对象,直到exec() 方法被调用。
watch, unwatch - 监测key变化
监测一个key的值是否被其它的程序更改。如果这个key在watch和exec 方法间被修改,这个 MULTI/EXEC 事务的执行将失败(return false)。unwatch 取消被这个程序监测的所有key。
$redis->watch('x');
$ret = $redis->multi()->incr('x')->exec();
订阅发布
subscribe - 方法回调订阅
publish - 发表内容到某一个通道
String补充操作
exists - 判断key是否存在
存在 true 不存在 false
incr, incrBy - 自增操作
key中的值进行自增1,如果填写了第二个参数,则自增第二个参数所填的值
$redis->incr('key1');
$redis->incrBy('key1', 10);
decr, decrBy - 自减操作
做减法,使用方法同incr
getMultiple - 获取多个key的值
传参由key组成的数组,返回如果key存在返回value,不存在返回false
$redis->set('key1', 'value1');
$redis->set('key2', 'value2');
$redis->set('key3', 'value3');
$redis->getMultiple(array('key1', 'key2', 'key3'));
getSet - 返回原值并写入新值
$redis->set('x', '42');
$exValue = $redis->getSet('x', 'lol'); // return '42', replaces x by 'lol'
$newValue = $redis->get('x'); // return 'lol'
append - 追加字符串
名称为key的string的值在后面加上value
$redis->set('key', 'value1');
$redis->append('key', 'value2');
$redis->get('key');
strlen - 获取string长度
$redis->strlen('key');
getBit/setBit - 操作二进制位
List(列表)操作
lPush - 在list左边(头)添加元素
$redis->lPush(key, value);
rPush - 在list右边(尾)添加元素
$redis->rPush(key, value);
lPushx/rPushx - 条件添加元素
在list左边(头)/右边(尾)添加元素,如果value已经存在,则不添加
$redis->lPushx(key, value);
lPop/rPop - 弹出并删除元素
输出list左(头)起/右(尾)起的第一个元素,删除该元素
$redis->lPop('key');
blPop/brPop - 阻塞版本
lpop命令的block版本
$redis->blPop('key1', 'key2', 10);
当timeout为0时,若遇到名称为key的list不存在或该list为空,则命令结束。如果timeout>0,则遇到上述情况时,等待timeout秒,如果问题没有解决,则对key+1开始的list执行pop操作
lSize - 返回list元素个数
$redis->lSize('key');
lIndex, lGet - 获取指定位置元素
$redis->lGet('key', 0);
lSet - 设置指定位置元素值
$redis->lSet('key', 0, 'X');
lRange, lGetRange - 获取范围元素
$redis->lRange('key1', 0, -1);
返回名称为key的list中start至end之间的元素(end为-1,返回所有)
lTrim, listTrim - 截取list
保留start至end之间的元素
$redis->lTrim('key', start, end);
lRem, lRemove - 删除指定值元素
$redis->lRem('key', 'A', 2);
删除count个名称为key的list中值为value的元素。count为0,删除所有值为value的元素;count>0从头至尾删除count个;count<0>
lInsert - 指定位置插入元素
在list中找到值为pivot的value,并根据参数Redis::BEFORE | Redis::AFTER,来确定newvalue是放在pivot的前面或后面。如果key不存在,不会插入;如果pivot不存在,return -1
$redis->delete('key1');
$redis->lInsert('key1', Redis::AFTER, 'A', 'X');
$redis->lPush('key1', 'A');
$redis->lPush('key1', 'B');
$redis->lPush('key1', 'C');
$redis->lInsert('key1', Redis::BEFORE, 'C', 'X');
$redis->lRange('key1', 0, -1);
$redis->lInsert('key1', Redis::AFTER, 'C', 'Y');
$redis->lRange('key1', 0, -1);
$redis->lInsert('key1', Redis::AFTER, 'W', 'value');
rpoplpush - 移动元素
返回并删除名称为srckey的list的尾元素,并将该元素添加到名称为dstkey的list的头部
$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));
Set(集合)操作
sAdd - 向set中添加元素
如果value存在,不写入,return false
$redis->sAdd(key, value);
sRem, sRemove - 删除set中的元素
$redis->sAdd('key1', 'set1');
$redis->sAdd('key1', 'set2');
$redis->sAdd('key1', 'set3');
$redis->sRem('key1', 'set2');
sMove - 移动元素到另一个集合
将value元素从名称为srckey的集合移到名称为dstkey的集合
$redis->sMove(srckey, dstkey, value);
sIsMember, sContains - 判断元素是否存在
名称为key的集合中查找是否有value元素,有true没有false
$redis->sIsMember(key, value);
sCard, sSize - 返回set元素个数
sPop - 随机返回并删除一个元素
sRandMember - 随机返回一个元素(不删除)
sInter - 求交集
sInterStore - 求交集并保存到output
$redis->sInterStore('output', 'key1', 'key2', 'key3');
sUnion - 求并集
$redis->sUnion('s0', 's1', 's2');
sUnionStore - 求并集并保存
$redis->sUnionStore('output', 'key1', 'key2', 'key3');
sDiff - 求差集
sDiffStore - 求差集并保存
sMembers, sGetMembers - 返回set所有元素
sort - 排序、分页
$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
Sorted Set(有序集合/Zset)操作
zAdd - 添加元素
向名称为key的zset中添加元素member,score用于排序。如果该元素已经存在,则根据score更新该元素的顺序。
$redis->zAdd('key', 1, 'val1');
$redis->zAdd('key', 0, 'val0');
$redis->zAdd('key', 5, 'val5');
$redis->zRange('key', 0, -1); // array(val0, val1, val5)
zRange - 按排名正序获取元素
返回名称为key的zset(元素已按score从小到大排序)中的index从start到end的所有元素
$redis->zAdd('key1', 0, 'val0');
$redis->zAdd('key1', 2, 'val2');
$redis->zAdd('key1', 10, 'val10');
$redis->zRange('key1', 0, -1);
// with scores
$redis->zRange('key1', 0, -1, true);
zDelete, zRem - 删除元素
$redis->zAdd('key', 0, 'val0');
$redis->zAdd('key', 2, 'val2');
$redis->zAdd('key', 10, 'val10');
$redis->zDelete('key', 'val2');
$redis->zRange('key', 0, -1);
zRevRange - 按排名倒序获取元素
返回名称为key的zset(元素已按score从大到小排序)中的所有元素
$redis->zRevRange('key', 0, -1);
// with scores
$redis->zRevRange('key', 0, -1, true);
zRangeByScore, zRevRangeByScore - 按score范围获取
返回名称为key的zset中score >= start且score <= end的所有元素
$redis->zRangeByScore(key, start, end, array(withscores, limit));
zCount - 统计score范围内元素个数
$redis->zCount(key, start, end);
zRemRangeByScore - 删除score范围内元素
删除名称为key的zset中score >= start且score <= end的所有元素,返回删除个数
$redis->zRemRangeByScore('key', start, end);
zSize, zCard - 返回zset元素个数
zScore - 返回元素score
$redis->zScore(key, val2);
zRank, zRevRank - 返回元素排名
返回名称为key的zset中元素的rank(即index,从0开始),若没有val元素,返回null。zRevRank是从大到小排序。
$redis->zRevRank(key, val);
zIncrBy - 增加score
如果在名称为key的zset中已经存在元素member,则该元素的score增加increment;否则向集合中添加该元素,其score的值为increment
$redis->zIncrBy('key', increment, 'member');
zUnion/zInter - 多个zset集合操作
对N个zset求并集和交集,并将最后的集合保存在dst中。对于集合中每一个元素的score,在进行AGGREGATE运算前,都要乘以对应的WEIGHT参数。如果没有提供WEIGHT,默认为1。
Hash(哈希)操作
hSet - 添加元素
向名称为h的hash中添加元素key1→hello
$redis->hSet('h', 'key1', 'hello');
hGet - 获取元素
$redis->hGet('h', 'key1');
hLen - 返回元素个数
$redis->hLen('h');
hDel - 删除域
$redis->hDel('h', 'key1');
hKeys - 返回所有键
$redis->hKeys('h');
hVals - 返回所有值
$redis->hVals('h');
hGetAll - 返回所有键值对
$redis->hGetAll('h');
hExists - 判断键是否存在
$redis->hExists('h', 'a');
hIncrBy - 增加数值
将名称为h的hash中x的value增加2
$redis->hIncrBy('h', 'x', 2);
hMset - 批量添加
$redis->hMset('user:1', array('name' => 'Joe', 'salary' => 2000));
hMGet - 批量获取
$redis->hMGet('h', array('field1', 'field2'));
Redis服务操作
flushDB - 清空当前数据库
flushAll - 清空所有数据库
randomKey - 随机返回一个key
$key = $redis->randomKey();
select - 选择数据库
move - 转移key到另一个数据库
$redis->select(0); // switch to DB 0
$redis->set('x', '42'); // write 42 to x
$redis->move('x', 1); // move to DB 1
$redis->select(1); // switch to DB 1
$redis->get('x'); // will return 42
rename, renameKey - 重命名key
$redis->set('x', '42');
$redis->rename('x', 'y');
$redis->get('y'); // → 42
$redis->get('x'); // → FALSE
renameNx - 重命名(目标名存在则不替换)
setTimeout, expire - 设定key活动时间(秒)
$redis->setTimeout('x', 3);
expireAt - key存活到unix时间戳
$redis->expireAt('x', time() + 3);
keys, getKeys - 返回满足正则的所有key
$keyWithUserPrefix = $redis->keys('user*');
dbSize - 查看当前数据库key数量
$count = $redis->dbSize();
auth - 密码认证
$redis->auth('foobared');
bgrewriteaof - 使用AOF持久化
$redis->bgrewriteaof();
slaveof - 选择从服务器
$redis->slaveof('10.0.1.7', 6379);
save - 同步保存数据到磁盘
bgsave - 异步保存数据到磁盘
lastSave - 返回上次成功保存的时间戳
info - 返回redis版本信息等详情
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
总结
以上是phpredis扩展提供的完整API文档,涵盖了Redis支持的所有数据类型操作(String、List、Set、Sorted Set、Hash)以及各种服务管理操作。开发者在实际项目中可以根据需要选择合适的数据类型和操作命令,充分发挥Redis高性能缓存数据库的优势。

发表评论 取消回复