使用第三方开源的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") }