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

简介: 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")
}


目录
相关文章
|
6月前
|
消息中间件 缓存 NoSQL
Redis各类数据结构详细介绍及其在Go语言Gin框架下实践应用
这只是利用Go语言和Gin框架与Redis交互最基础部分展示;根据具体业务需求可能需要更复杂查询、事务处理或订阅发布功能实现更多高级特性应用场景。
406 86
|
5月前
|
Java 编译器 Go
【Golang】(1)Go的运行流程步骤与包的概念
初次上手Go语言!先来了解它的运行流程吧! 在Go中对包的概念又有怎样不同的见解呢?
309 4
|
5月前
|
Java 编译器 Go
【Golang】(5)Go基础的进阶知识!带你认识迭代器与类型以及声明并使用接口与泛型!
好烦好烦好烦!你是否还在为弄不懂Go中的泛型和接口而烦恼?是否还在苦恼思考迭代器的运行方式和意义?本篇文章将带你了解Go的接口与泛型,还有迭代器的使用,附送类型断言的解释
278 3
|
5月前
|
存储 安全 Java
【Golang】(4)Go里面的指针如何?函数与方法怎么不一样?带你了解Go不同于其他高级语言的语法
结构体可以存储一组不同类型的数据,是一种符合类型。Go抛弃了类与继承,同时也抛弃了构造方法,刻意弱化了面向对象的功能,Go并非是一个传统OOP的语言,但是Go依旧有着OOP的影子,通过结构体和方法也可以模拟出一个类。
319 2
|
8月前
|
人工智能 测试技术 持续交付
Golang深入浅出之-Go语言中的持续集成与持续部署(CI/CD)
持续集成与持续部署(CI/CD)是现代软件开发的关键实践,尤其适用于Go语言项目。本文探讨了Go项目中常见的CI/CD问题,如测试覆盖不足、版本不一致和构建时间过长,并提供解决方案及GitHub Actions示例代码,帮助开发者优化流程,提升交付效率和质量。
264 5
|
NoSQL Go API
go语言操作Redis
go语言操作Redis
|
Go
golang语言之go常用命令
这篇文章列出了常用的Go语言命令,如`go run`、`go install`、`go build`、`go help`、`go get`、`go mod`、`go test`、`go tool`、`go vet`、`go fmt`、`go doc`、`go version`和`go env`,以及它们的基本用法和功能。
519 6
|
消息中间件 NoSQL Go
PHP转Go系列 | ThinkPHP与Gin框架之Redis延时消息队列技术实践
【9月更文挑战第7天】在从 PHP 的 ThinkPHP 框架迁移到 Go 的 Gin 框架时,涉及 Redis 延时消息队列的技术实践主要包括:理解延时消息队列概念,其能在特定时间处理消息,适用于定时任务等场景;在 ThinkPHP 中使用 Redis 实现延时队列;在 Gin 中结合 Go 的 Redis 客户端库实现类似功能;Go 具有更高性能和简洁性,适合处理大量消息。迁移过程中需考虑业务需求及系统稳定性。
431 1
|
存储 Go
Golang语言基于go module方式管理包(package)
这篇文章详细介绍了Golang语言中基于go module方式管理包(package)的方法,包括Go Modules的发展历史、go module的介绍、常用命令和操作步骤,并通过代码示例展示了如何初始化项目、引入第三方包、组织代码结构以及运行测试。
654 3
|
Go 开发者

热门文章

最新文章

推荐镜像

更多