排行榜功能是一个很普遍的需求,对于这类需求如果数据总量过大用mysql实现的话会很浪费性能
select * from rank_name order by score desc limit 0,10
这时候可以考虑使用redis中的有序集合来实现(以下是会用到的一些命令)
zrange 查看排行榜 (升序)
zrevrange 查看排行榜 (降序)
zadd 添加一个数据
zrem 删除一个数据
zrank 获取排名(升序)
zrevrank 获取排名 (降序)
以下是golang代码实现
c1,err := redis.Dial("tcp","127.0.0.1:6379")
if err != nil {
panic(err)
}
defer c1.Close()
_, err = c1.Do("zrange","rank_name","0","-1","withscores")
if err != nil {
return
}
for i := 0; i <100; i++ {
c1.Do("zadd","rank_name",rand.Intn(1000),"张"+strconv.Itoa(i))
}
do, err := redis.ByteSlices(c1.Do("zrange", "rank_name", 0, -1,"withscores"))
if err != nil {
return
}
for _, v := range do {
fmt.Println(string(v))
}
以下是运行结果,可以看到数据已经按照score排序了