大家好,我是张大鹏,今天又来给大家分享技术文章了。
今天要给大家分享的是如何使用 Golang + Redis 实现用户排行榜功能。排行榜的信息都存储在 Redis 中,通过Redis进行存储和读取,计算排行也通过 Redis 进行计算。
整体的目录结构如下:
入口文件如下:
package main
import (
"example/zdpgo_redis/z01_crud/api"
"log"
)
func main() {
// 初始化路由
router := api.InitRouter()
// 启动 API 服务
// 新增:curl -H "Content-type: application/json" -d '{"username": "张三", "points": 25}' localhost:8080/rank
// 获取:curl -H "Content-type: application/json" localhost:8080/rank/张三
// 排行:curl -H "Content-type: application/json" localhost:8080/rank
log.Fatal(router.Run("localhost:8080"))
}
路由代码如下:
// 新增用户排行信息
r.POST("/rank", handleAddRank)
// 根据用户名查看用户排行信息
r.GET("/rank/:username", handleGetUserRank)
// 查看排行榜
r.GET("/rank", handleGetRank)
添加排行榜的接口代码如下:
// 添加排行信息
func handleAddRank(c *api.Context) {
// 提取客户端用户对象
var userJson redis.User
if err = c.ShouldBindJSON(&userJson); err != nil {
c.ResponseFailureArgs(err.Error())
return
}
// 添加用户
err = database.SaveUser(&userJson)
if err != nil {
c.ResponseFailureArgs(err.Error())
return
}
// 返回
c.ResponseSuccess(api.Json{"user": userJson})
}
获取用户排名的接口代码如下:
// 获取用户排名信息
func handleGetUserRank(c *api.Context) {
// 获取客户端传递过来的用户名
username := c.Param("username")
// 从redis根据用户名查询用户排行
user, err := database.GetUser(username)
if err != nil {
if err == redis.ErrNil {
c.ResponseFailureNotFound(fmt.Sprintf("%s 不存在", username))
return
}
c.ResponseFailure(err.Error())
return
}
c.ResponseSuccess(user)
}
获取排行榜信息的接口代码如下:
// 获取排行榜信息
func handleGetRank(c *api.Context) {
// 从redis获取排行榜
users, err := database.GetRank()
if err != nil {
if err == redis.ErrNil {
c.ResponseFailureNotFound("排行榜不存在")
return
}
c.ResponseFailure(err.Error())
return
}
// 返回排行榜信息
c.ResponseSuccess(users)
}
领取专属 10元无门槛券
私享最新 技术干货