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")
}

Guess you like

Origin blog.csdn.net/qq_42956653/article/details/121568762