简介

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高性能缓存数据库的优势。

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论
立即
投稿
网站二维码

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部
/* 跳过导航链接 (无障碍) */ .skip-link { position: absolute; top: -100px; left: 15px; z-index: 99999; padding: 8px 16px; background: #007bff; color: #fff; font-size: 14px; border-radius: 0 0 4px 4px; text-decoration: none; transition: top 0.2s; } .skip-link:focus { top: 0; outline: 3px solid #0056b3; }