Golang使用第三方库Go-Redis操作redis

本文涉及的产品
云原生内存数据库 Tair,内存型 2GB
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Redis 版,经济版 1GB 1个月
简介: Golang使用第三方库Go-Redis操作redis

使用第三方开源的Go-Redis库

git

https://github.com/go-redis/redis


go mod

go get github.com/go-redis/redis/v8

api帮助文档

https://redis.uptrace.dev/guide/server.html#connecting-to-redis-server

Go-Redis的基本操作

这位大佬写的已经很细致了,还有专门的redis专栏,直接看即可,不再赘述api了

https://blog.csdn.net/aa1215018028/article/details/83309633

业务请求次数案例

golang实现案例-代码

这里为了方便我把要求改成了

frequency := []int{10, 20, 30}

user := []string{“ordinary”, “vip”, “svip”}


没有根据案例规定来写,读者注意!

package main
import (
  "context"
  "fmt"
  "github.com/go-redis/redis/v8"
  "math"
  "math/rand"
  "strconv"
  "sync"
  "time"
)
var (
  wg   *sync.WaitGroup
  once sync.Once
)
func init() {
  once.Do(func() {
    wg = &sync.WaitGroup{}
  })
}
func ConnectToRedis() *redis.Client {
  client := redis.NewClient(&redis.Options{
    Addr:     "localhost:6379",
    Password: "",
    DB:       0,
  })
  return client
}
func Service(client *redis.Client, id string, frequency int) {
  defer func() {
    client.Close()
    wg.Done()
  }()
  for {
    val, err := client.Get(context.Background(), "compId:"+id).Result()
    //判断该值是否存在
    if err != nil {
      //不存在,创建改值
      client.Set(context.Background(), "compId:"+id, strconv.Itoa(math.MaxInt64-frequency), 150*time.Second)
      fmt.Println("id:[", id, "]不存在,已经创建")
      fmt.Println(err)
    } else {
      //存在,自增,调用业务
      _, err := client.Incr(context.Background(), "compId:"+id).Result()
      if err != nil {
        fmt.Println(id + "调用业务失败,使用次数上限,请升级")
        return
      } else {
        va, _ := strconv.Atoi(val)
        Business(id, strconv.Itoa(frequency-(math.MaxInt64-va)+1))
      }
    }
    time.Sleep(time.Duration(rand.Intn(5)) * time.Second)
  }
}
func Business(id, val string) {
  fmt.Println("id:[", id, "]存在,处理业务中...第", val, "次使用")
}
func main() {
  fmt.Println("Redis RW Test Start")
  frequency := []int{10, 20, 30}
  user := []string{"ordinary", "vip", "svip"}
  for i := 0; i < 3; i++ {
    wg.Add(1)
    go Service(ConnectToRedis(), user[i], frequency[i])
  }
  wg.Wait()
  fmt.Println("Redis RW Test Stop")
}


相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore &nbsp; &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
9天前
|
缓存 NoSQL Redis
redis管道操作(节省网络IO开销)
pipeline中发送的每个command都会被server立即执行,如果执行失败,将会在此后的响应中得到信息;也就是pipeline并不是表达“所有command都一起成功”的语义,管道中前面命令失败,后面命令不会有影响,继续执行。
13 1
|
14天前
|
NoSQL Java Redis
如何在 Java 中操作这些 Redis 数据结构的基本方法
如何在 Java 中操作这些 Redis 数据结构的基本方法
16 2
|
14天前
|
NoSQL Go Redis
如何使用 Go 和 `go-redis/redis` 库连接到 Redis 并执行一些基本操作
如何使用 Go 和 `go-redis/redis` 库连接到 Redis 并执行一些基本操作
13 1
|
20天前
|
Go
【golang】Go 判断字符串是否包含指定字符
【golang】Go 判断字符串是否包含指定字符
13 1
|
23天前
|
NoSQL 数据管理 关系型数据库
数据管理DMS操作报错合集之控制台查看Redis时出现乱码是什么导致的
数据管理DMS(Data Management Service)是阿里云提供的数据库管理和运维服务,它支持多种数据库类型,包括RDS、PolarDB、MongoDB等。在使用DMS进行数据库操作时,可能会遇到各种报错情况。以下是一些常见的DMS操作报错及其可能的原因与解决措施的合集。
|
24天前
|
DataWorks NoSQL Java
DataWorks操作报错合集之数据集成使用公共数据集成资源组写入到redis数据源(使用的是VPC连接),提示以下错误:request action:[InnerVpcGrantVpcInstanceAccessToApp], message:[InvalidInstanceId.怎么解决
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
|
27天前
|
存储 NoSQL Go
轻松上手,使用Go语言操作Redis数据库
轻松上手,使用Go语言操作Redis数据库
|
27天前
|
NoSQL Redis
加速 Redis 操作:掌握管道技术提升性能与效率
加速 Redis 操作:掌握管道技术提升性能与效率
|
1月前
|
NoSQL Java Redis
【Redis】 Java操作客户端命令——列表操作与哈希操作
【Redis】 Java操作客户端命令——列表操作与哈希操作
|
1月前
|
NoSQL Java Linux
【Redis】 使用Java操作Redis的客户端
【Redis】 使用Java操作Redis的客户端