package controller import ( "encoding/json" "fmt" "github.com/gin-gonic/gin" "github.com/go-redis/redis" "strconv" "time" "worktest/pkg/model" "worktest/pkg/redistab" ) type ListReq struct { Title string `json:"'title'"` } type ProductReq struct { ID uint `json:"autoincr"` } //RemoveCache 清除所有redis1缓存 func RemoveCache(c *gin.Context) { var req ProductReq if err := c.ShouldBind(&req); err != nil { Error(c, err.Error()) return } v, err := redistab.RedisClient.Del(redistab.GetProductOrderList(req.ID)).Result() fmt.Println("1---------", v, err) v, err = redistab.RedisClient.Del(redistab.GetProductSaleNum(req.ID)).Result() fmt.Println("1---------", v, err) v, err = redistab.RedisClient.Del(redistab.GetProductStockSize(req.ID)).Result() fmt.Println("1---------", v, err) Success(c, nil) return } //RemoveAllCache 清除所有redis1缓存 func RemoveAllCache(c *gin.Context) { var req ListReq if err := c.ShouldBind(&req); err != nil { Error(c, err.Error()) return } var list []*model.Product model.DB.Model(&model.Product{}).Find(&list) fmt.Println("2--------", redistab.RedisClient) for _, t := range list { //销量 v, err := redistab.RedisClient.Del(redistab.GetProductOrderList(t.ID)).Result() fmt.Println("1---------", v, err) v, err = redistab.RedisClient.Del(redistab.GetProductSaleNum(t.ID)).Result() fmt.Println("1---------", v, err) v, err = redistab.RedisClient.Del(redistab.GetProductStockSize(t.ID)).Result() fmt.Println("1---------", v, err) } Success(c, nil) return } func List(c *gin.Context) { var req ListReq if err := c.ShouldBind(&req); err != nil { Error(c, err.Error()) return } var list []*model.Product model.DB.Model(&model.Product{}).Find(&list) fmt.Println("2--------", redistab.RedisClient) for i, t := range list { fmt.Println("30----", redistab.GetProductOrderList(t.ID)) //销量 v, err := redistab.RedisClient.Get(redistab.GetProductOrderList(t.ID)).Result() fmt.Println("1---------", v, err) if err == nil && v != "" { u64, err := strconv.ParseUint(v, 10, 32) if err != nil { list[i].OrderNum = u64 } } v, err = redistab.RedisClient.Get(redistab.GetProductSaleNum(t.ID)).Result() fmt.Println("1---------", v, err) if err == nil && v != "" { u64, err := strconv.ParseUint(v, 10, 32) if err != nil { list[i].SalesVolume = u64 } } v, err = redistab.RedisClient.Get(redistab.GetProductStockSize(t.ID)).Result() fmt.Println("1---------", v, err) if err == nil && v != "" { u64, err := strconv.ParseUint(v, 10, 32) if err != nil { list[i].NowStockSize = u64 } } b, err := redistab.RedisClient.PFCount(redistab.GetProductStockSize(t.ID)).Result() fmt.Println("1---------", b, err) if err == nil && v != "" { list[i].Uv = uint(b) } } Success(c, list) return } //Clear 清除数据 func Clear(c *gin.Context) { var req ListReq if err := c.ShouldBind(&req); err != nil { Error(c, err.Error()) return } var list []*model.Product model.DB.Model(&model.Product{}).Find(&list) Success(c, list) return } //SynCache 同步redis func SynCache(c *gin.Context) { var req ListReq if err := c.ShouldBind(&req); err != nil { Error(c, err.Error()) return } var list []*model.Product model.DB.Model(&model.Product{}).Find(&list) fmt.Println("2--------", redistab.RedisClient) redistab.RedisClient.Del(redistab.GetProductBitMap()) redistab.RedisClient.Del(redistab.GetProductIdSet()) redistab.RedisClient.Del(redistab.GetProductIdZet()) for _, t := range list { v, err := redistab.RedisClient.Set(redistab.GetProductStockSize(t.ID), t.StockSize, 0).Result() fmt.Println("1---------", v, err) temp, err := json.Marshal(t) v, err = redistab.RedisClient.Set(redistab.GetProductDetail(t.ID), string(temp), 0).Result() fmt.Println("1---------", v, err) //同步bitmap b, err := redistab.RedisClient.SetBit(redistab.GetProductBitMap(), int64(t.ID), 1).Result() fmt.Println("1---------", b, err) //id同步到set redistab.RedisClient.SAdd(redistab.GetProductIdSet(),t.ID) //id同步到zset redistab.RedisClient.ZAdd(redistab.GetProductIdZet(),redis.Z{Score: float64(t.ID), Member: t.ID}) } //同步列表 Success(c, list) return } func PublishMsg(c *gin.Context) { for i := 0 ; i<=10 ; i++ { msg := fmt.Sprintf("消息标号:%d号",i) _= redistab.RedisClient.Publish(redistab.GetChannelKey(),msg) // 订阅 mychannel } Success(c, nil) return } func PublishMsgTime(c *gin.Context) { for i := 0 ; i<=10 ; i++ { time.Sleep(100*time.Microsecond) msg := fmt.Sprintf("消息标号:%d号",i) _= redistab.RedisClient.Publish(redistab.GetChannelKey(),msg) // 订阅 mychannel } Success(c, nil) return }