redis 实际测试(由于功能太多,我就挑几个重要的吧)
这个哥哥的博客非常好https://www.cnblogs.com/chrdai/p/6825684.html
list操作(列表用于队列)
lPush 插入队列头,一个或者多个
var_dump($redis -> lPush('favorite_fruit','cherry')); // key 不存在,创建一个新的列表, 返回 int 1
var_dump($redis -> lPush('favorite_fruit','banana')); // key 存在。但是 list 类型, 返回 int 2
var_dump($redis -> lPush('ooo','cherry','777')); // key 不存在,创建一个新的列表, 返回 id值
$redis -> set('pats','dog');
var_dump($redis -> lPush('pats','cat')); // key 存在。但不是是 list 类型, 返回 boolean false
rPush 插入队列尾,一个或者多个
var_dump($redis -> rPush('favorite_fruit','cherry')); // key 不存在,创建一个新的列表, 返回 int 1
var_dump($redis -> rPush('favorite_fruit','banana')); // key 存在。但是 list 类型, 返回 int 2
var_dump($redis -> rPush('ooo','cherry','777')); // key 不存在,创建一个新的列表, 返回 id值
$redis -> set('pats','dog');
var_dump($redis -> rPush('pats','cat')); // key 存在。但不是是 list 类型, 返回 boolean false
lPop 从头删除一个,队列里面没有了
var_dump($redis -> lPush('favorite_fruit','cherry'));
var_dump($redis -> lPush('favorite_fruit','banana'));
var_dump($redis -> lPush('favorite_fruit','apple'));
var_dump($redis -> lPop('favorite_fruit')); // string apple
var_dump($redis -> lRange('favorite_fruit',0,-1)); //根据id 查找列表区间
rPop 从尾部删除一个,队列里面没有了
$redis -> lPush('favorite_fruit','cherry');
$redis -> lPush('favorite_fruit','banana');
$redis -> lPush('favorite_fruit','apple');
var_dump($redis -> rPop('favorite_fruit')); // string cherry
var_dump($redis -> lRange('favorite_fruit',0,-1));
blPop/brPop 移出列表的第一个/最后一个元素,获取移除内容,如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。
// This first case: 非阻塞行为,最少有一个非空列表
$redis -> lPush('favorite_fruit','cherry');
$redis -> lPush('favorite_fruit','banana');
$redis -> lPush('favorite_fruit','apple');
$redis -> lPush('pats','dog');
$redis -> lPush('pats','cat');
$redis -> lPush('pats','rabbit');
var_dump($redis -> blPop('favorite_fruit',3));
$array_blpop = array('favorite_fruit','pats');
var_dump($redis -> blPop($array_blpop,3)); // 优先弹出第一个非空列表的头元素
var_dump($redis -> lRange('favorite_fruit',0,-1));
// This second case: 阻塞行为, 所有给定key都不存在或包含空列表
var_dump($redis -> blPop('fake_key',2)); // 阻塞链接, 2s 之后超时结束,返回 array (size=0) empty
llen 获取列表长度
$redis -> lPush('favorite_fruit','cherry');
$redis -> lPush('favorite_fruit','banana');
$redis -> lPush('favorite_fruit','apple');
var_dump($redis -> lLen('favorite_fruit')); // int 3
var_dump($redis -> lLen('fake_key')); // 列表不存在,返回 int 0
lrange 获取列表置顶位置内容
$redis -> lPush('favorite_fruit','cherry');
$redis -> lPush('favorite_fruit','banana');
$redis -> lPush('favorite_fruit','apple');
$redis -> lPush('favorite_fruit','peach');
$redis -> lPush('favorite_fruit','pineapple');
$redis -> lPush('favorite_fruit','grape');
var_dump($redis -> lRange('favorite_fruit',1,3));
var_dump($redis -> lRange('favorite_fruit',6,2)); // 当 start > end 时,返回空数组, array (size=0) empty
var_dump($redis -> lRange('favorite_fruit',0,100)); // 当 end 大于列表长
lRem 这个是删除,三个参数,一个是,哪个列表,二,是删除哪个元素,三是方向,大于0是从头到尾,小于0是从尾到头,等于0是删除所有
$redis -> lPush('favorite_fruit','cherry');
$redis -> lPush('favorite_fruit','apple');
$redis -> lPush('favorite_fruit','apple');
$redis -> lPush('favorite_fruit','peach');
$redis -> lPush('favorite_fruit','apple');
$redis -> lPush('favorite_fruit','grape');
var_dump($redis -> lRem('favorite_fruit','apple',2)); // int 2 // 从开头向结尾方向移除 2 个
var_dump($redis -> lRange('favorite_fruit',0,-1));
var_dump($redis -> lRem('favorite_fruit','apple',-1)); // int1 // 从结尾向开头方向移除 1 个
var_dump($redis -> lRange('favorite_fruit',0,-1));
var_dump($redis -> lRem('favorite_fruit','peach',0)); // int 1 // 移除所有的 value
var_dump($redis -> lRange('favorite_fruit',0,-1));
lset 根据索引,替换值
$redis -> lPush('favorite_fruit','cherry');
$redis -> lPush('favorite_fruit','apple');
$redis -> lPush('favorite_fruit','peach');
$redis -> lPush('favorite_fruit','grape');
var_dump($redis -> lSet('favorite_fruit','1','pineapple')); // 将第二个元素替换为 pineapple
var_dump($redis -> lRange('favorite_fruit',0,-1));
var_dump($redis -> lSet('favorite_fruit','100','pitaya')); // boolean false , 对索引超过范围进行设置,设置不成功
var_dump($redis -> lSet('fake_key',1,'mango')); // boolean false , 对不存在的 key 进行设置,设置不成功
lindex 根据索引获得值
$redis -> lPush('favorite_fruit','cherry');
$redis -> lPush('favorite_fruit','apple');
$redis -> lPush('favorite_fruit','peach');
$redis -> lPush('favorite_fruit','grape');
var_dump($redis -> lIndex('favorite_fruit',2)); // string 'apple'
var_dump($redis -> lRange('favorite_fruit',0,-1)); // 原 list 表不变
linsert 根据索引插入值
$redis -> lPush('favorite_fruit','cherry');
$redis -> lPush('favorite_fruit','apple');
$redis -> lPush('favorite_fruit','peach');
$redis -> lPush('favorite_fruit','grape');
// The first case : 成功插入,返回列表长度
var_dump($redis -> lInsert('favorite_fruit','before','apple','Mango')); // int 5
var_dump($redis -> lRange('favorite_fruit',0,-1));
// The seconde case : 没有找到指定元素 ,返回 -1
var_dump($redis -> lInsert('favorite_fruit','before','not_exists','pitaya')); // int -1
var_dump($redis -> lRange('favorite_fruit',0,-1)); // 原 list 不变
// The third case : 没有找到指定元素 ,返回 0
var_dump($redis -> lInsert('fake_key','before','apple','watermelon')); // int 0
Set(集合)(无序)(唯一)用于,相关性的存储,比如客户关系等
sadd 添加操作
$redis -> sAdd('myset','hello');
$redis -> sAdd('myset','foo');
$redis -> sAdd('myset','hello'); // 已存在的 key 被忽略
var_dump($redis -> sMembers('myset'));
Srem(删除) 命令用于移除集合中的一个或多个成员元素,不存在的成员元素会被忽略。
$redis -> sAdd('myset','hello');
$redis -> sAdd('myset','foo');
$redis -> sAdd('myset','world');
$redis -> sAdd('myset','hi');
$redis -> sAdd('myset','welcome');
var_dump($redis -> sRem('myset','hello','foo')); // int 2
var_dump($redis -> sMembers('myset'));
Smembers(查看所有) 命令返回集合中的所有的成员。 不存在的集合 key 被视为空集合。
$redis -> sAdd('myset','hello');
$redis -> sAdd('myset','foo');
$redis -> sAdd('myset','world');
$redis -> sAdd('myset','hi');
$redis -> sAdd('myset','welcome');
var_dump($redis -> sMembers('myset'));
Scard 命令返回集合中元素的数量。(统计)
$redis -> sAdd('myset','hello');
$redis -> sAdd('myset','foo');
$redis -> sAdd('myset','world');
$redis -> sAdd('myset','hi');
$redis -> sAdd('myset','welcome');
var_dump($redis -> sCard('myset')); // int 5
Smove(集合的转移) 命令将指定成员 member 元素从 source 集合移动到 destination 集合。
$redis -> sAdd('myset','hello');
$redis -> sAdd('myset','foo');
$redis -> sAdd('myset','world');
$redis -> sAdd('myset','hi');
$redis -> sAdd('myset','welcome');
$redis -> sAdd('destinationSet','welcome');
// The first case : member 包含在 source 中
var_dump($redis -> sMove('myset','destinationSet','foo')); // boolean true
var_dump($redis -> sMembers('myset'));
// The second case : member 不在 source 中
var_dump($redis -> sMove('myset','destinationSet','not_exists')); // boolean false
var_dump($redis -> sMembers('myset'));
// The third case : destination 中已经包含 member 元素
var_dump($redis -> sMove('myset','destinationSet','welcome')); // boolean true
var_dump($redis -> sMembers('myset')); // 只是将 welcome 从 myset 中移除
spop 随机选择一个,拿出来,原来集合里面删除掉
$redis -> sAdd('myset','hello');
$redis -> sAdd('myset','foo');
$redis -> sAdd('myset','world');
$redis -> sAdd('myset','hi');
$redis -> sAdd('myset','welcome');
// 其值会从原集合中移除
var_dump($redis -> sPop('myset')); // string world
var_dump($redis -> sMembers('myset'));
Sinter 命令返回给定所有给定集合的交集。
Sunion 命令返回给定集合的并集。
Sdiff 命令返回给定集合之间的差集。
Sismember 命令判断成员元素是否是集合的成员。
$redis -> sAdd('myset','hello');
$redis -> sAdd('myset','foo');
$redis -> sAdd('myset','world');
$redis -> sAdd('myset','hi');
$redis -> sAdd('myset','welcome');
var_dump($redis -> sIsMember('myset','hello')); // true
var_dump($redis -> sIsMember('myset','good')); // false
Sorted-set(有序集合)(围绕着分数计算)(无序)(唯一)(包含排名)用于,排名积分等
Zadd 命令用于将一个或多个成员元素及其分数值加入到有序集当中。
$redis -> zAdd('myset',0,'hello');
$redis -> zAdd('myset',1,'world');
$redis -> zAdd('myset',1,'foo'); // 集合中的元素唯一,但是分数可以重复
$redis -> zAdd('myset',2,'hi');
$redis -> zAdd('myset',2.5,'welcome');
var_dump($redis -> zRange('myset',0,-1,'withScores'));
$redis -> zAdd('myset',3,'hi'); // hi 已经是 myset 的成员,此时更新分数值并重新插入这个成员元素
var_dump($redis -> zRange('myset',0,-1,'withScores'));
Zrem(删除) 命令用于移除有序集中的一个或多个成员,不存在的成员将被忽略。
$redis -> zAdd('myset',0,'hello');
$redis -> zAdd('myset',1,'world');
$redis -> zAdd('myset',1,'foo'); // 集合中的元素唯一,但是分数可以重复
$redis -> zAdd('myset',2,'hi');
$redis -> zAdd('myset',2.5,'welcome');
$redis ->zRem('myset','hi'); // 一处集合中的某个元素
var_dump($redis -> zRange('myset',0,-1,'withScores'));
Zcard 命令用于计算集合中元素的数量。(统计集合)
$redis -> zAdd('myset',0,'hello');
$redis -> zAdd('myset',1,'world');
$redis -> zAdd('myset',1,'foo'); // 集合中的元素唯一,但是分数可以重复
$redis -> zAdd('myset',2,'hi');
$redis -> zAdd('myset',2.5,'welcome');
var_dump($redis ->zCard('myset')); // int 5
Zcount(统计) 命令用于计算有序集合中指定分数区间的成员数量。
$redis -> zAdd('myset',0,'hello');
$redis -> zAdd('myset',1,'world');
$redis -> zAdd('myset',1,'foo'); // 集合中的元素唯一,但是分数可以重复
$redis -> zAdd('myset',2,'hi');
$redis -> zAdd('myset',2.5,'welcome');
$redis -> zAdd('myset',3,'score');
// 1分到3分之间的值有5个
var_dump($redis ->zCount('myset',1,3)); // int 5
Zscore 命令返回有序集中,成员的分数值。 如果成员元素不是有序集 key 的成员,或 key 不存在,
$redis -> zAdd('myset',0,'hello');
$redis -> zAdd('myset',1,'world');
$redis -> zAdd('myset',1,'foo'); // 集合中的元素唯一,但是分数可以重复
$redis -> zAdd('myset',2,'hi');
$redis -> zAdd('myset',2.5,'welcome');
$redis -> zAdd('myset',3,'score');
// 返回 foo 的分数值
var_dump($redis ->zScore('myset','foo')); // float 1
Zincrby(改变指定分数) 命令对有序集合中指定成员的分数加上增量 increment
$redis -> zAdd('myset',0,'hello');
$redis -> zAdd('myset',1,'world');
$redis -> zAdd('myset',1,'foo'); // 集合中的元素唯一,但是分数可以重复
$redis -> zAdd('myset',2,'hi');
$redis -> zAdd('myset',2.5,'welcome');
$redis -> zAdd('myset',3,'score');
// 将 world 的分数增加0.6
var_dump($redis ->zIncrBy('myset',0.6,'world')); // float 1.6
// 将 score 的分减去1.2
var_dump($redis ->zIncrBy('myset',-1.2,'score')); // float 1.8
Zrange(排序) 返回有序集中,指定区间内的成员。
$redis -> zAdd('myset',0,'hello');
$redis -> zAdd('myset',1,'world');
$redis -> zAdd('myset',1,'foo'); // 集合中的元素唯一,但是分数可以重复
$redis -> zAdd('myset',2,'hi');
$redis -> zAdd('myset',2.5,'welcome');
$redis -> zAdd('myset',3,'score');
var_dump($redis ->zRange('myset',0,-1,'withScore'));
Zremrangebyscore(删除) 命令用于移除有序集中,指定分数(score)区间内的所有成员。
$redis -> zAdd('myset',0,'hello');
$redis -> zAdd('myset',1,'world');
$redis -> zAdd('myset',1,'foo');
$redis -> zAdd('myset',2,'hi');
$redis -> zAdd('myset',2.5,'welcome');
$redis -> zAdd('myset',3,'score');
var_dump($redis ->zRevRangeByScore('myset',3,2));
var_dump($redis ->zRevRangeByScore('myset','+inf','-inf')); // 返回分数值从正无穷到负无穷之间的值
var_dump($redis -> zRange('myset',0,-1,'withScore')); // 原集合不变
Zinter 命令计算给定的一个或多个有序集的交集.
Zunionstore 命令计算给定的一个或多个有序集的并集.
Zrank 返回有序集中指定成员的排名
$redis -> zAdd('myset',0,'hello');
$redis -> zAdd('myset',1,'world');
$redis -> zAdd('myset',1,'foo');
$redis -> zAdd('myset',2,'hi');
$redis -> zAdd('myset',2.5,'welcome');
$redis -> zAdd('myset',3,'score');
var_dump($redis ->zRank('myset','welcome')); // int 4
Zrevrank(排名) 命令返回有序集中成员的排名。
$redis -> zAdd('myset',0,'hello');
$redis -> zAdd('myset',1,'world');
$redis -> zAdd('myset',1,'foo');
$redis -> zAdd('myset',2,'hi');
$redis -> zAdd('myset',2.5,'welcome');
$redis -> zAdd('myset',3,'score');
var_dump($redis ->zRevRank('myset','welcome')); // int 1