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
相關文章
- 【Redis實戰】有序集合型別Redis型別
- 《Redis實戰》筆記-Redis的有序集合Redis筆記
- redis有序集合實現實時排名Redis
- redis有序集合Redis
- Redis 有序集合Redis
- Redis有序集合命令Redis
- Redis有序集合物件Redis物件
- Redis有序集合操作Redis
- Redis有序集合原理Redis
- Python–Redis實戰:第三章:Redis命令:第五節:有序集合PythonRedis
- Redis有序集合詳解Redis
- Redis物件——有序集合(ZSet)Redis物件
- Redis有序集合學習Redis
- Redis 有序集合(sorted set)Redis
- Java集合實戰Java
- redis學習之有序集合Redis
- php操作redis,有序集合zsetPHPRedis
- Redis雜湊與有序集合Redis
- Redis的有序集合(sorted set)Redis
- 使用Redis的有序集合實現排行榜功能Redis
- Redis 入門 - 3(集合 set、有序集合 sort set)Redis
- 使用 Redis 有序集合實現 IP 歸屬地查詢Redis
- 《閒扯Redis十一》Redis 有序集合物件底層實現Redis物件
- Redis 有序集合(zset)命令詳解Redis
- redis有序集合型別sort setRedis型別
- go操作redis的有序集合(zset)GoRedis
- redis之有序集合型別(Zset)——排行榜的實現Redis型別
- Python&Redis 無序集合set、有序集合zset操作PythonRedis
- Redis 資料庫之有序集合(zset)Redis資料庫
- PHP+Redis 有序集合實現 24 小時排行榜實時更新PHPRedis
- 爬蟲實戰專案集合爬蟲
- redis 有序集合(sorted set)(redis學習七)Redis
- 面試官:Redis中有序集合的內部實現方式是什麼?面試Redis
- Redis 入門指南九:Redis 有序集合(sorted set)Redis
- Redis有序集合命令ZREVRANGEBYSCORE詳解與應用RedisVR
- 有序列表和集合插入操作的耗時差距
- Redis 設計與實現 10:五大資料型別之有序集合Redis大資料資料型別
- [Redis 系列]redis 學習四,set 集合,hash 雜湊,zset 有序集合初步認知Redis