Redis-Redis实战(有序集合)

有序集合是Redis提供的又一种数据类型。与集合相比,很明显它增加了排序功能,除了基本的 新增 删 改 差 判断是否存在等操作外,有序集合还提供了排序、获取TopN、按Range获取等操作。

有序集合的底层实现与集合相同,利用散列表来实现,同时,有序集合通过给集合中的每一个元素管理一个分数来实现排序。

有序集合的操作

zadd key score1 member1 score2 member2.. #添加元素(分数会覆盖)
zscore key member  #获取元素的分数
zrange key start end [withscores] #按分数范围获取元素(小->大)
zrevrange key start end [withscores]#按分数返回获取数据(大->小)
zrangebyscore key min max [withscore] [limit offset count]
zincrby key increment member  #增加元素的分数
zcard key    #获取集合元素的个数
zcount key min max  #获取某个范围内元素的个数
zrem key member1 member2..  #删除元素
zremrangebyrank key start end #按排名范围删除元素
zremrangebyscore key start end  #按分数范围删除元素
zrank key member   #获取元素的排名
zrevrank ky member   #获取元素排序(倒序)
命令
127.0.0.1:6379> zadd z1 100 Tom 87 Pater 89 Divad
(integer) 3
127.0.0.1:6379> zadd z1 98 Tom
(integer) 0
127.0.0.1:6379> zscore z1 Tom
"98"
127.0.0.1:6379> zrange z1 0 100
1) "Pater"
2) "Divad"
3) "Tom"
127.0.0.1:6379> zrevrange z1 0 100
1) "Tom"
2) "Divad"
3) "Pater"
127.0.0.1:6379> zrange z1 0 100 withscores
1) "Pater"
2) "87"
3) "Divad"
4) "89"
5) "Tom"
6) "98"
127.0.0.1:6379> zrevrange z1 0 100 withscores
1) "Tom"
2) "98"
3) "Divad"
4) "89"
5) "Pater"
6) "87"
127.0.0.1:6379> zincrby z1 3 Divad
"92"
127.0.0.1:6379> zincrby z1 3 Divad
"92"
127.0.0.1:6379> zcard z1
(integer) 3
127.0.0.1:6379> zcount z1 0 100
(integer) 3
127.0.0.1:6379> zrem z1 Pater
(integer) 1
127.0.0.1:6379> zrank z1 Tom
(integer) 1
127.0.0.1:6379> zrank z1 Divad
(integer) 0
127.0.0.1:6379> zrank z1 Pater
(nil)
127.0.0.1:6379> 

实践

1)按点击量对文章排序
要实现这个需求,我们以文章ID作为元素,点击量作为分数,当文章被访问一次时,将分数+1即可。

posts:page.view pvnum articleId

实现流程如下:

$postPrePage = 10
$start = ($currentPage - 1) * $postPrePage
$end = $currentPage * $postPrePage - 1
$postsIds = zrevrange posts:page.view $start $end
foreach $id in $postsIds
     $postData = hgetall post:$id
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值