排行榜功能是一个很普遍的需求,对于这类需求如果数据总量过大用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排序了
在这里插入图片描述