Laravel中Redis有序集合使用

本文详细介绍了Redis有序集合的常用操作,包括sadd、zincrby、zrem等,并提供了PHP实现示例。通过这些方法,可以进行元素的添加、更新、删除,以及按索引和分数范围查询、统计元素个数等操作,同时涵盖了并集和交集的计算。文章旨在帮助开发者更好地理解和使用Redis有序集合。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在项目中用到Redis有序集合操作,故整理使用方法。

目录

方法

sadd

zincrby

zrem

zrange

zrevrange

zrangebyscore

zrevrangebyscore

zunionstore

zinterstore

zcount

zcard

zscore

zremrangebyscore

zrank

zrevrank

zremrangebyrank

总结


方法

sadd

增加元素,并设置序号,成功返回true,重复返回false。

举例:

$redis->zadd('zset1', 1, 'zhangsan');

$redis->zadd('zset1', 2, 'lisi');

$redis->zadd('zset1', 3, 'wangwu');

 

zincrby

对指定元素索引值的增减,改变元素排列次序。

举例:

$redis->zincrby('zset1', 10, 'zhangsan'); // 返回11

 

zrem

移除指定元素

举例:

$redis->zrem('zset1', 'zhangsan'); // 返回 true or false

zrange

按位置次序返回表中指定区间的元素

举例:

$redis->zrange('zset1', 0, 1); 
// 返回位置 0 和 1的元素
/*
Array
(
    [0] => lisi
    [1] => zhangsan
)
*/


$redis->zrange('zset1', 0, -1); 
// 返回所有元素
/*
Array
(
    [0] => lisi
    [1] => zhangsan
    [2] => wangwu
)
*/


$redis->zrange('zset1', 0, -1, 'withscores'); 
// 返回所有元素 并包含索引值
/*
Array
(
    [lisi] => 1
    [wangwu] => 1
    [zhangsan] => 1
)
*/

zrevrange

同上,返回表中指定区间的元素,按次序倒排。

举例:

$redis->zrevrange('zset1', 0, -1); // 元素顺序和zrange相反

 

zrangebyscore

zrevrangebyscore

按顺序/降序返回表中指定索引区间的元素。

举例:

$redis->zadd('zset1', 3, 'wangwu');

$redis->zadd('zset1', 5, 'liliu');

// 返回索引值2-9之间的元素 array('wangwu','liliu')
$redis->zrangebyscore('zset1', 2, 9); 

// 返回索引值2-9之间的元素并包含索引值
$redis->zrangebyscore('zset1', 2, 9, 'withscores'); 

// 返回索引值2-9之间的元素,'withscores' =>true表示包含索引值; 'limit'=>array(1, 2),
// 表示偏移1条,返回2条,结果为array(array('wangwu',3),array('liliu',5))
$redis->zrangebyscore('zset1', 2, 9, array('withscores'=>true, 'limit'=>array(1, 2)));

zunionstore

zinterstore

将多个表的并集/交集存入另一个表中。

举例:

// 将'zset1','zset2','zset0'的并集存入'zset3'
$redis->zunionstore('zset3', array('zset1', 'zset2', 'zset0')); 

// weights参数表示权重,其中表示并集后 zset1集合的分 * 2 后存储到 zset3 集合, zset2集合的分 * 1 后存储到 zset3 集合
$redis->zunionstore('zset3', array('zset1', 'zset2'), array('weights' => array(2, 1))); 

// 'aggregate' => 'max'或'min'表示并集后相同的元素是取大值或是取小值
$redis->zunionstore('zset3', array('zset1', 'zset2'), array('aggregate' => 'max')); 

zcount

统计一个索引区间的元素个数。

举例:

$redis->zcount('zset1', 3, 5); // 返回 2

//'(3'表示索引值在3-5之间但不含3,同理也可以使用'(5'表示上限为5但不含5
$redis->zcount('zset1', '(3', 5)); 

zcard

统计元素个数。

举例:

$redis->zcard('zset1'); // 返回 4

 

zscore

查询元素的索引。

举例:

$redis->zscore('zset1', 'wangwu'); // 返回 3

zremrangebyscore

删除一个索引区间的元素。

举例:

$redis->zremrangebyscore('zset1', 0, 2);

// 删除索引在0-2之间的元素('zhangsan','lisi'), 返回删除元素个数2

zrank

zrevrank

返回元素所在表顺序/降序的位置(不是索引)。

举例:

// 返回0,因为它是第一个元素;zrevrank则返回1(最后一个)

$redis->zrank('zset1', 'ef');

zremrangebyrank

删除表中指定位置区间的元素。

举例:

// 删除位置为0-10的元素,返回删除的元素个数2

$redis->zremrangebyrank('zset1', 0, 10);

总结

Redis 有序集合操作方法及举例如上,可当字典查阅。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JSON_L

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值