Redis ZSet или Sorted Set - это упорядоченное множество, коллекция строк. Каждый элемент такого множества, кроме собственно, значения-строки, имеет назначенную ему оценку (score) . Score служит для сортировки списка, и ее значение определяет положение элемента в списке. При изменении score для элемента - меняется и положение этого элемента.
Score должна быть строкой, представляющей собой число с плавающей точкой в двойной точности.
В целом, внешне, упорядоченные множества напоминают Perl-массивы, с той разницей, что значение индекса можно задавать самостоятельно и совершенно произвольно. Можно создать список, который содержит всего два элемента, при этом первый элемент имеет score - 5, а второй - 130.
Методы для операций над упорядоченными множествами в значениях ключей
Метод zadd
|
1 |
$r->zadd( $key, $score, $member ); |
Добавление ко множеству нового элемента с его оценкой.
|
1 |
my $status = $redis->zadd('store.mobile.rating', 11, 'Siemens' ); |
Если указанный ключ уже существует и содержит в себе значение другого типа, клиент получит
ошибку. Например:
|
1 2 |
[zadd] ERR Operation against a key holding the wrong kind of Siemens, at /usr/local/perl5/site_perl/5.8.8/Redis.pm line 277 |
Метод zrem
|
1 |
$r->zrem( $key, $member ); |
Удаление заданного элемента из множества.
|
1 2 |
$status = $redis->zrem('store.mobile.rating', 'Samsung'); print $status."\n"; |
Метод zincrby
|
1 |
$r->zincrby( $key, $increment, $member ); |
Увеличение оценки (score) заданного элемента на величину $increment.
|
1 2 3 4 5 6 |
$status = $redis->zadd('store.mobile.rating', 34, 'Samsung' ); $status = $redis->zincrby('store.mobile.rating', 10, 'Samsung' ); my $score = $redis->zscore('store.mobile.rating', 'Samsung'); print $score."\n"; # выведет 44 |
Метод zrank
|
1 |
$r->zrank( $key, $member ); |
Получение номера позиции элемента во множестве.
|
1 2 |
$position = $redis->zrank('store.mobile.rating', 'Samsung' ); print $position."\n"; # в данном случае выведет 1 |
Метод zrevrank
|
1 |
$r->zrevrank( $key, $member ); |
Получение номера позиции элемента во множестве. В отличие от zrank, поиск элемента начинается с другого конца множества.
|
1 2 3 4 5 |
my $status = $redis->zadd('store.mobile.rating', 11, 'Siemens' ); $status = $redis->zadd('store.mobile.rating', 34, 'Samsung' ); $position = $redis->zrevrank('store.mobile.rating', 'Samsung'); print $position."\n"; # в данном случае выведет 0 |
Метод zrange
|
1 |
$r->zrange( $key, $start, $end ); |
Получение набора отсортированных элементов множества, чьи позиции находятся в заданном диапазоне. $start - номер позиции, с которой начинается выборка, $end - номер позиции, которой она заканчивается.
|
1 2 |
my @list = $redis->zrange('store.mobile.rating', 0, 4); print join(" ", @list)."\n"; # вывод: Siemens Samsung |
Метод zrevrange
|
1 |
$r->zrevrange( $key, $start, $end ); |
Получение набора элементов, отсортированных в обратном порядке. $start - номер позиции, с которой начинается выборка, $end - номер позиции, которой она заканчивается.
|
1 2 |
my @list = $redis->zrevrange('store.mobile.rating', 0, 4); print join(" ", @list)."\n"; # вывод: Samsung Siemens |
Метод zrangebyscore
|
1 |
$r->zrangebyscore( $key, $min, $max ); |
Получение списка элементов с оценками из заданного диапазона. $min - это минимальное значение score в диапазоне, $max - максимальное.
|
1 |
my @list = $redis->zrangebyscore('store.mobile.rating', 10, 40 ); |
Метод zcount
|
1 |
$r->zcount( $key, $min, $max ); |
Получение количества элементов множества, чьи оценки (score) находятся в заданном диапазоне. $min - это минимальное значение score в диапазоне, $max - максимальное.
|
1 2 3 4 5 |
my $status = $redis->zadd('store.mobile.rating', 11, 'Siemens' ); $status = $redis->zadd('store.mobile.rating', 34, 'Samsung' ); my $count = $redis->zcount('store.mobile.rating', 10, 40); print $count."\n"; # в данном случае вернет 2 |
Метод zcard
|
1 |
$r->zcard( $key ); |
Получить число - количество всех элементов множества.
|
1 2 3 4 5 |
my $status = $redis->zadd('store.mobile.rating', 11, 'Siemens' ); $status = $redis->zadd('store.mobile.rating', 34, 'Samsung' ); my $count = $redis->zcard('store.mobile.rating'); print $count."\n"; # в данном случае выведет 2 |
Метод zscore
|
1 |
$r->zscore( $key, $member ); |
Получить оценку (score) для заданного элемента упорядоченного множества.
|
1 2 3 4 |
$status = $redis->zadd('store.mobile.rating', 34, 'Samsung' ); $score = $redis->zscore('store.mobile.rating', 'Samsung'); print $score."\n"; # выведет 34 |