Golang操作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")
}