首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

使用 Go+Redis 实现用户排行榜

大家好,我是张大鹏,今天又来给大家分享技术文章了。

今天要给大家分享的是如何使用 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)

}

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20230618A04APB00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券