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