phpにおけるredisの応用(Sorted-set編)
15840 ワード
Redis秩序化集合は、集合と同様にstringタイプ要素の集合であり、重複するメンバーは許可されません.異なるのは、各要素がdoubleタイプのスコアに関連付けられていることです.redisは、集合内のメンバーをスコアで小さいものから大きいものに並べ替えるものです.秩序化された集合のメンバーは一意ですが、スコア(score)は繰り返すことができます.集合はハッシュテーブルによって実現されるので,追加,削除,検索の複雑さはいずれもO(1)である.
Sorted-set(整列集合)
1、ZADD
Redis Zaddコマンドは、1つまたは複数のメンバー要素とその分割値を秩序セットに追加するために使用されます.(スコア値は、整数値または二重精度浮動小数点数であってもよい.)(1)メンバーが既に整列セットのメンバーである場合、そのメンバーのスコア値を更新し、そのメンバー要素を再挿入することで、メンバーが正しい位置にいることを保証します.(2)順序セットkeyが存在しない場合、空の順序セットを作成し、ZADD操作を実行する.(3)keyが存在するが順序セットタイプではない場合、エラーが返される.注意:Redis 2.4リリース以前は、ZADDは1回に1つの要素しか追加できませんでした.戻り値:更新された既存のメンバーを含まない、正常に追加された新しいメンバーの数.
2、ZREM
Redis Zremコマンドは、存在しないメンバーは無視されます.keyが存在するが順序セットタイプではない場合、エラーが返されます.注意:ZREMは、Redis 2.4リリース以前は1回に1つの要素しか削除できませんでした.
php構文:
3、ZCARD
Redis Zcardコマンドは、コレクション内の要素の数を計算するために使用します.
4、ZCOUNT
Redis Zcountコマンドは、順序セットで指定されたスコア区間のメンバー数を計算するために使用します.
5、ZSCORE
Redis Zscoreコマンドは、順序セット、メンバーのスコア値を返します.メンバー要素が整列セットkeyのメンバーでない場合、またはkeyが存在しない場合はnilを返します.
6、ZINCRBY
Redis Zincrbyコマンドは、整列セットで指定したメンバーのスコアに増分incrementを加算します(スコアは整数値または二重精度浮動小数点数です).(1)負の数値incrementを渡すことで、スコアから対応する値、例えばZINCRBY key-5 memberを減算することができ、memberのscore値から5を減算することができる.(2)keyが存在しない場合、またはスコアがkeyのメンバーでない場合、ZINCRBY key increment memberはZADD key increment memberに等しい.(3)keyがシーケンスセットタイプでない場合、エラーが返される.
7、ZRANGE
Redis Zrangeは、区間内のメンバーを指定する順序セットを返します.(メンバーの位置は、小数点以下から小数点以下)でソートされます.同じスコア値を持つメンバーは、辞書順(lexicographical order)に並べられます.)メンバーを値の増減(大から小)で並べ替える必要がある場合は、ZREVRANGEコマンドを使用します.下付きパラメータstartおよびstopはいずれも0をベースとし、すなわち、0で秩序セットの最初のメンバーを表し、1で秩序セットの2番目のメンバーを表す.負数の下付き記号を使用して、最後のメンバーを-1、最後から2番目のメンバーを-2で表すこともできます.
8、ZREVRANGE
Redis Zrevrangeコマンドは、区間内のメンバーを指定する順序セットを返します.ここで、メンバーの位置は、数値的に減算(大きいから小さい)されます.同じスコア値を持つメンバーは、辞書順の逆順序(reverse lexicographical order)で並べ替えられます.ZREVRANGEコマンドの他の態様は、メンバーが数値的に減少する順序で並べられている点を除いて、ZRANGEコマンドと同様である.
9、ZRANGEBYSCORE
Redis Zremrangebyscoreコマンドは、順序セットを削除し、スコア区間内のすべてのメンバーを指定します.
10、ZREVRANGEBYSCORE
Redis Zrevrangebyscoreは、指定されたスコア区間内のすべてのメンバーを秩序セットで返します.秩序セットのメンバーは、数値の増減(大きいから小さい)の順に並べられます.
同じスコア値を持つメンバーは、辞書順の逆順序(reverse lexicographical order)で並べ替えられます.
ZREVRANGEBYSCOREコマンドの他の態様は、メンバーが数値的に減少する順序で並べられている点を除いて、ZRANGGEBYSCOREコマンドと同様である.
11、ZREMRANGEBYSCORE
Redis Zremrangebyscoreコマンドは、指定されたスコア区間内のすべてのメンバーを削除するために使用されます.
12、ZINTER
Redis Zinterコマンドは、与えられた1つまたは複数の順序セットの交差を計算する.(cmdコマンドでのredisのZINTERTOREと同じ役割を果たす)
デフォルトでは、結果セットのメンバーのスコア値は、指定されたすべてのセットのメンバーのスコア値の和です.
13、ZUNION
Redis Zunionstoreコマンドは、与えられた1つまたは複数の順序セットの並列セットを計算する.(cmdにおけるredisのZUNIOnstorEと同様の役割を果たす)
デフォルトでは、結果セットのメンバーのスコア値は、指定されたすべてのセットのメンバーのスコア値の和です.
14、ZRANK
Redis Zrankは、指定されたメンバーの順序付けセットの順位を返します.ここで、順序付けされたセットメンバーは、小数点以下から大きい順に並べられます.
15、ZREVRANK
Redis Zrevrankコマンドは、順序セットのメンバーの順位を返します.ここで、整列セットのメンバーは、大きな値から小さい値への減算でソートされます.
ランキングは0を下回り、つまり点数が一番大きいメンバーは0となります.
16、ZREMRANGEBYRANK
Redis Zremrangebyrankコマンドを使用して、順序セットで指定されたランキング(rank)区間内のすべてのメンバーを削除します.
転載先:https://www.cnblogs.com/chrdai/p/6851731.html
Sorted-set(整列集合)
1、ZADD
Redis Zaddコマンドは、1つまたは複数のメンバー要素とその分割値を秩序セットに追加するために使用されます.(スコア値は、整数値または二重精度浮動小数点数であってもよい.)(1)メンバーが既に整列セットのメンバーである場合、そのメンバーのスコア値を更新し、そのメンバー要素を再挿入することで、メンバーが正しい位置にいることを保証します.(2)順序セットkeyが存在しない場合、空の順序セットを作成し、ZADD操作を実行する.(3)keyが存在するが順序セットタイプではない場合、エラーが返される.注意:Redis 2.4リリース以前は、ZADDは1回に1つの要素しか追加できませんでした.戻り値:更新された既存のメンバーを含まない、正常に追加された新しいメンバーの数.
connect('127.0.0.1',6379);
//$redis -> flushAll();
$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'));
//array (size=5)
// 'hello' => float 0
// 'foo' => float 1
// 'world' => float 1
// 'hi' => float 2
// 'welcome' => float 2.5
$redis -> zAdd('myset',3,'hi'); // hi myset ,
var_dump($redis -> zRange('myset',0,-1,'withScores'));
//array (size=5)
// 'hello' => float 0
// 'foo' => float 1
// 'world' => float 1
// 'welcome' => float 2.5
// 'hi' => float 3
2、ZREM
Redis Zremコマンドは、存在しないメンバーは無視されます.keyが存在するが順序セットタイプではない場合、エラーが返されます.注意:ZREMは、Redis 2.4リリース以前は1回に1つの要素しか削除できませんでした.
redis 127.0.0.1:6379> ZREM key member
php構文:
connect('127.0.0.1',6379);
$redis -> flushAll();
$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'));
//array (size=4)
// 'hello' => float 0
// 'foo' => float 1
// 'world' => float 1
// 'welcome' => float 2.5
3、ZCARD
Redis Zcardコマンドは、コレクション内の要素の数を計算するために使用します.
connect('127.0.0.1',6379);
$redis -> flushAll();
$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
4、ZCOUNT
Redis Zcountコマンドは、順序セットで指定されたスコア区間のメンバー数を計算するために使用します.
connect('127.0.0.1',6379);
$redis -> flushAll();
$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
5、ZSCORE
Redis Zscoreコマンドは、順序セット、メンバーのスコア値を返します.メンバー要素が整列セットkeyのメンバーでない場合、またはkeyが存在しない場合はnilを返します.
connect('127.0.0.1',6379);
$redis -> flushAll();
$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
6、ZINCRBY
Redis Zincrbyコマンドは、整列セットで指定したメンバーのスコアに増分incrementを加算します(スコアは整数値または二重精度浮動小数点数です).(1)負の数値incrementを渡すことで、スコアから対応する値、例えばZINCRBY key-5 memberを減算することができ、memberのscore値から5を減算することができる.(2)keyが存在しない場合、またはスコアがkeyのメンバーでない場合、ZINCRBY key increment memberはZADD key increment memberに等しい.(3)keyがシーケンスセットタイプでない場合、エラーが返される.
connect('127.0.0.1',6379);
$redis -> flushAll();
$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
7、ZRANGE
Redis Zrangeは、区間内のメンバーを指定する順序セットを返します.(メンバーの位置は、小数点以下から小数点以下)でソートされます.同じスコア値を持つメンバーは、辞書順(lexicographical order)に並べられます.)メンバーを値の増減(大から小)で並べ替える必要がある場合は、ZREVRANGEコマンドを使用します.下付きパラメータstartおよびstopはいずれも0をベースとし、すなわち、0で秩序セットの最初のメンバーを表し、1で秩序セットの2番目のメンバーを表す.負数の下付き記号を使用して、最後のメンバーを-1、最後から2番目のメンバーを-2で表すこともできます.
connect('127.0.0.1',6379);
$redis -> flushAll();
$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'));
8、ZREVRANGE
Redis Zrevrangeコマンドは、区間内のメンバーを指定する順序セットを返します.ここで、メンバーの位置は、数値的に減算(大きいから小さい)されます.同じスコア値を持つメンバーは、辞書順の逆順序(reverse lexicographical order)で並べ替えられます.ZREVRANGEコマンドの他の態様は、メンバーが数値的に減少する順序で並べられている点を除いて、ZRANGEコマンドと同様である.
connect('127.0.0.1',6379);
$redis -> flushAll();
$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 ->zRevRange('myset',0,-1,'withScore'));
9、ZRANGEBYSCORE
Redis Zremrangebyscoreコマンドは、順序セットを削除し、スコア区間内のすべてのメンバーを指定します.
connect('127.0.0.1',6379);
$redis -> flushAll();
$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 ->zRangeByScore('myset',2,3));
//array (size=3)
// 0 => string 'hi' (length=2)
// 1 => string 'welcome' (length=7)
// 2 => string 'score' (length=5)
var_dump($redis ->zRangeByScore('myset','-inf','+inf')); //
//array (size=6)
// 0 => string 'hello' (length=5)
// 1 => string 'foo' (length=3)
// 2 => string 'world' (length=5)
// 3 => string 'hi' (length=2)
// 4 => string 'welcome' (length=7)
// 5 => string 'score' (length=5)
var_dump($redis -> zRange('myset',0,-1,'withScore')); //
//array (size=6)
// 'hello' => float 0
// 'foo' => float 1
// 'world' => float 1
// 'hi' => float 2
// 'welcome' => float 2.5
// 'score' => float 3
10、ZREVRANGEBYSCORE
Redis Zrevrangebyscoreは、指定されたスコア区間内のすべてのメンバーを秩序セットで返します.秩序セットのメンバーは、数値の増減(大きいから小さい)の順に並べられます.
同じスコア値を持つメンバーは、辞書順の逆順序(reverse lexicographical order)で並べ替えられます.
ZREVRANGEBYSCOREコマンドの他の態様は、メンバーが数値的に減少する順序で並べられている点を除いて、ZRANGGEBYSCOREコマンドと同様である.
connect('127.0.0.1',6379);
$redis -> flushAll();
$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));
//array (size=3)
// 0 => string 'score' (length=5)
// 1 => string 'welcome' (length=7)
// 2 => string 'hi' (length=2)
var_dump($redis ->zRevRangeByScore('myset','+inf','-inf')); //
//array (size=6)
// 0 => string 'score' (length=5)
// 1 => string 'welcome' (length=7)
// 2 => string 'hi' (length=2)
// 3 => string 'world' (length=5)
// 4 => string 'foo' (length=3)
// 5 => string 'hello' (length=5)
var_dump($redis -> zRange('myset',0,-1,'withScore')); //
//array (size=6)
// 'hello' => float 0
// 'foo' => float 1
// 'world' => float 1
// 'hi' => float 2
// 'welcome' => float 2.5
// 'score' => float 3
11、ZREMRANGEBYSCORE
Redis Zremrangebyscoreコマンドは、指定されたスコア区間内のすべてのメンバーを削除するために使用されます.
connect('127.0.0.1',6379);
$redis -> flushAll();
$redis -> zAdd('myset',0,'hello'); // score=0
$redis -> zAdd('myset',1,'world'); // score=2
$redis -> zAdd('myset',1,'foo'); // score=1
$redis -> zAdd('myset',2,'hi'); // score=2
$redis -> zAdd('myset',2.5,'welcome'); // score=2.5
$redis -> zAdd('myset',3,'score'); // score=3
var_dump($redis ->zRemRangeByScore('myset',1,3)); // int 5
var_dump($redis ->zRange('myset',0,-1,'withScore'));
//array (size=1)
// 'hello' => float 0
12、ZINTER
Redis Zinterコマンドは、与えられた1つまたは複数の順序セットの交差を計算する.(cmdコマンドでのredisのZINTERTOREと同じ役割を果たす)
デフォルトでは、結果セットのメンバーのスコア値は、指定されたすべてのセットのメンバーのスコア値の和です.
connect('127.0.0.1',6379);
$redis -> flushAll();
$redis -> zAdd('myset',0,'hello'); // score=0
$redis -> zAdd('myset',1,'world'); // score=2
$redis -> zAdd('myset',1,'foo'); // score=1
$redis -> zAdd('myset',2,'hi'); // score=2
$redis -> zAdd('myset',2.5,'welcome'); // score=2.5
$redis -> zAdd('myset',3,'score'); // score=3
$redis -> zAdd('otherset',0,'good');
$redis -> zAdd('otherset',1,'hello');
$redis -> zAdd('otherset',2,'world');
$array_set = array('myset','otherset');
var_dump($redis ->zInter('destinationset',$array_set)); // int 2
var_dump($redis ->zRange('destinationset',0,-1,'withScore'));
//array (size=2)
// 'hello' => float 1
// 'world' => float 3
13、ZUNION
Redis Zunionstoreコマンドは、与えられた1つまたは複数の順序セットの並列セットを計算する.(cmdにおけるredisのZUNIOnstorEと同様の役割を果たす)
デフォルトでは、結果セットのメンバーのスコア値は、指定されたすべてのセットのメンバーのスコア値の和です.
connect('127.0.0.1',6379);
$redis -> flushAll();
$redis -> zAdd('myset',0,'hello'); // score=0
$redis -> zAdd('myset',1,'world'); // score=2
$redis -> zAdd('myset',1,'foo'); // score=1
$redis -> zAdd('myset',2,'hi'); // score=2
$redis -> zAdd('myset',2.5,'welcome'); // score=2.5
$redis -> zAdd('myset',3,'score'); // score=3
$redis -> zAdd('otherset',0,'good'); // score=0
$redis -> zAdd('otherset',1,'hello'); // score=1
$redis -> zAdd('otherset',2,'world'); // score=2
$array_set = array('myset','otherset');
var_dump($redis ->zUnion('destinationset',$array_set)); // int 7
var_dump($redis ->zRange('destinationset',0,-1,'withScore'));
//array (size=7)
// 'good' => float 0
// 'foo' => float 1
// 'hello' => float 1
// 'hi' => float 2
// 'welcome' => float 2.5
// 'score' => float 3
// 'world' => float 3
14、ZRANK
Redis Zrankは、指定されたメンバーの順序付けセットの順位を返します.ここで、順序付けされたセットメンバーは、小数点以下から大きい順に並べられます.
connect('127.0.0.1',6379);
$redis -> flushAll();
$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
15、ZREVRANK
Redis Zrevrankコマンドは、順序セットのメンバーの順位を返します.ここで、整列セットのメンバーは、大きな値から小さい値への減算でソートされます.
ランキングは0を下回り、つまり点数が一番大きいメンバーは0となります.
connect('127.0.0.1',6379);
$redis -> flushAll();
$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
16、ZREMRANGEBYRANK
Redis Zremrangebyrankコマンドを使用して、順序セットで指定されたランキング(rank)区間内のすべてのメンバーを削除します.
connect('127.0.0.1',6379);
$redis -> flushAll();
$redis -> zAdd('myset',0,'hello'); // rank=0
$redis -> zAdd('myset',1,'world'); // rank=2
$redis -> zAdd('myset',1,'foo'); // rank=1
$redis -> zAdd('myset',2,'hi'); // rank=3
$redis -> zAdd('myset',2.5,'welcome'); // rank=4
$redis -> zAdd('myset',3,'score'); // rank=5
var_dump($redis ->zRemRangeByRank('myset',1,3)); // int 3
var_dump($redis ->zRange('myset',0,-1,'withScore'));
転載先:https://www.cnblogs.com/chrdai/p/6851731.html