首页 > 其他分享 >Go实战全家桶之三十二:指标系统查询加缓存

Go实战全家桶之三十二:指标系统查询加缓存

时间:2025-01-03 18:32:57浏览次数:3  
标签:三十二 缓存 return req ids ret var Go id

测试用例

func (self *TestGeneralserviceTestSuite) Test066_CacheQueryFrontSumReportShopl() {

    var req = frontdto.NewStatRequest()
    req.ObjectType = esentity.OBJECT_TYPE_SHOP
    req.ShopIds = []int64{814560415908069377}

    var ret = reportsum.FindBeanReportSumShop().CacheQueryFrontSumReport(req)
    var ret1 = reportsum.FindBeanReportSumShop().CacheQueryFrontSumReport(req)
    golog.Info(ret, ret1, ret.Total)
}

 {
     "baseEntity": {},
     "code": 200,
     "msg": "成功",
     "total": 0,
     "exist": false,
     "data": [
          {
               "id": "F|shop|20241231|814560415908069377|0",
               "sum_date": "20241231",
               "created_at": "2025-01-01T02:00:00.228705277+08:00",
               "page_flag": "F",
               "object_type": "shop",
               "object_id": 0,
               "account_id": 814560530895962113,
               "account_name": "",
               "vendor_id": 0,
               "shop_id": 814560415908069377,
               "shop_name": "华南电子科技",
               "parent_shop_id": 0,
               "parent_shop_name": "",
               "spu_id": 0,
               "part_number_raw": "",
               "brand_id": 0,
               "brand_name": "",
               "categ_id": 0,
               "categ_name": "",
               "avab_count": 30,
               "avab_qty": 2884783,
               "rfq_count": 280,
               "rfq_qty": 42511,
               "purchase_line_count": 3,
               "purchase_line_qty": 804,
               "sale_line_count": 4,
               "sale_line_qty": 2165,
               "ok_supplier_count": 3,
               "purchase_amount_platform": 203443100,
               "sale_amount_platform": 445692900,
               "sale_count_platform": 1384,
               "purchase_count_platform": 196,
               "sale_qty_platform": 2272,
               "purchase_qty_platform": 1879,
               "txn_amount": 649136000,
               "txn_count": 1580,
               "count_spu": 0,
               "count_brand": 0,
               "count_categ": 0,
               "count_categ_param": 0
          }
     ]
} 1

缓存应用

package querybase

import (
    "git.ichub.com/general/webcli120/goconfig/base/basedto"
    "git.ichub.com/general/webcli120/goconfig/ichublog/golog"
    "git.ichub.com/general/webcli120/goweb/pagemodel"
    "icd/general-srv/esentity"
    "icd/general-srv/handler/computemetrics/computesum/queryfacade/querybase/querycache"
    "icd/general-srv/handler/report_dto/frontdto"
)

type QueryCache struct {
    basedto.BaseEntity
    *QueryReportBase
}

func NewQueryCache() *QueryCache {
    return &QueryCache{}
}
func DefaultOf(base *QueryReportBase) *QueryCache {
    var ret = &QueryCache{
       QueryReportBase: base,
    }

    return ret
}

func (self *QueryCache) CacheQuerySpuList(req *frontdto.StatRequest) *pagemodel.PageResult[*esentity.ServiceSumReportEs] {

    var ids []string = make([]string, 0)
    var list = make([]*esentity.ServiceSumReportEs, 0)
    for _, id := range req.ObjectIds {
       if r := querycache.FindBeanShopCache().GetSpuList(id); r != nil {
          list = append(list, r)
       } else {
          ids = append(ids, id)
       }
    }
    if len(ids) == 0 {
       return pagemodel.ResultOkPageResult(list)
    }
    req.ObjectIds = ids
    var ret = self.QueryFrontSumReport(req)
    if ret.IsFailed() {
       ret.Data = list
       golog.Error("ReportSumShop [CacheQuerySpuList] err =", ret)
       return ret
    }
    for _, i := range ret.Data {
       querycache.FindBeanShopCache().SetSpuList(i.SpuId, i)
    }
    ret.Data = append(ret.Data, list...)
    return ret
}
func (self *QueryCache) CacheQueryShopList(req *frontdto.StatRequest) *pagemodel.PageResult[*esentity.ServiceSumReportEs] {

    var ids []int64 = make([]int64, 0)
    var list = make([]*esentity.ServiceSumReportEs, 0)
    for _, id := range req.ShopIds {
       if r := querycache.FindBeanShopCache().GetShopList(id); r != nil {
          list = append(list, r)
       } else {
          ids = append(ids, id)
       }
    }
    if len(ids) == 0 {
       return pagemodel.ResultOkPageResult(list)
    }
    req.ShopIds = ids
    var ret = self.QueryFrontSumReport(req)
    if ret.IsFailed() {
       ret.Data = list
       golog.Error("ReportSumShop [CacheQueryShopList] err =", ret)
       return ret
    }
    for _, i := range ret.Data {
       querycache.FindBeanShopCache().SetShopList(i.ShopId, i)
    }
    ret.Data = append(ret.Data, list...)
    return ret
}
func (self *QueryReportBase) CacheQueryFrontSumReport(req *frontdto.StatRequest) *pagemodel.PageResult[*esentity.ServiceSumReportEs] {
    var qc = DefaultOf(self)

    if req.IfShopObjectType() {
       return qc.CacheQueryShopList(req)
    }
    if req.IfSpuObjectType() {
       return qc.CacheQuerySpuList(req)
    }
    //brand categ
    return self.QueryFrontSumReport(req)
}
func (self *QueryReportBase) QueryFrontSumReport(req *frontdto.StatRequest) *pagemodel.PageResult[*esentity.ServiceSumReportEs] {

    req.SumChild = req.IfShopObjectType() && req.SumChild
    var ret = self.QueryRequest(req)
    if !ret.ExistRecord() {
       req.YesterdayLocal() //没有,找昨天
       ret = self.QueryRequest(req)
    }
    if !req.SumChild {
       return ret
    }
    if ret.IsFailed() || ret.Data == nil {
       golog.Error("ReportSumShop [QueryFrontSumReport] err =", ret, req.QuerySource)
       return ret
    }
    if ret.ExistRecord() {
       var maps, err = third.FindBeanThirdProxy().CacheContactShopGetChilds(req.ShopIds)
       if err != nil {
          req.SumChild = req.IfShopObjectType() && req.SumChild
          golog.Error("ReportSumShop [QueryFrontSumReport] err = ", err)
          return ret
       }
       self.sumChilds(ret, maps, req.ObjectType)
    }
    return ret
}

缓存机制

type ShopCache struct {
    basedto.BaseEntitySingle
}

func NewShopCache() *ShopCache {
    return &ShopCache{}
}

func (self *ShopCache) GetShopList(id int64) *esentity.ServiceSumReportEs {
    var key = cache_key_shoplist + ":" + gconv.String(id)
    ids, found := ichubcache.CacheGetOf[esentity.ServiceSumReportEs](thirdcache.FrontCache(), key)
    if found {
       return ids
    }
    return nil
}

func (self *ShopCache) SetShopList(id int64, value *esentity.ServiceSumReportEs) {
    var key = cache_key_shoplist + ":" + gconv.String(id)
    ichubcache.CacheSetOf[esentity.ServiceSumReportEs](thirdcache.FrontCache(), key, value)

}
func (self *ShopCache) GetSpuList(id string) *esentity.ServiceSumReportEs {
    var key = cache_key_spulist + ":" + gconv.String(id)
    ids, found := ichubcache.CacheGetOf[esentity.ServiceSumReportEs](thirdcache.FrontCache(), key)
    if found {
       return ids
    }
    return nil
}

func (self *ShopCache) SetSpuList(id int64, value *esentity.ServiceSumReportEs) {
    var key = cache_key_spulist + ":" + gconv.String(id)
    ichubcache.CacheSetOf[esentity.ServiceSumReportEs](thirdcache.FrontCache(), key, value)

}

func Flush() {
    frontCache.Flush()

}
func FrontCache() *ichubcache.IchubCache {
    return frontCache
}

// var CacheNew=true
var frontCache = ichubcache.DefaultOf("F-cache:", 2*30*time.Minute)

func CacheSetShopChild(id int64, ids []int64) {
    var key = cache_key_shopchild + ":" + gconv.String(id)

    ichubcache.CacheSetOf[[]int64](frontCache, key, &ids)

}
func CacheGetShopChild(id int64) []int64 {
    var key = cache_key_shopchild + ":" + gconv.String(id)
    ids, found := ichubcache.CacheGetOf[[]int64](frontCache, key)
    if found {
       return *ids
    }
    return nil
}

 

标签:三十二,缓存,return,req,ids,ret,var,Go,id
From: https://blog.csdn.net/leijmdas/article/details/144869717

相关文章

  • 【已解决】PDF文档有密码怎么办(2024新)免费在线工具PDF2Go
    强大的解密工具PDF2Go使用指南一、PDF2Go简介        PDF2Go是由德国QaamGo公司开发的在线PDF工具箱,以其强大的功能和用户友好的界面而闻名。它不仅免费,而且不需要用户注册或安装任何软件,只需打开浏览器即可使用。二、功能特点1.免费且无需注册PDF2Go的所有功能......
  • 解决Redis缓存数据类型丢失问题
    一、背景在通用的数据开放平台中,支持用户编写基于Groovy脚本的接口,Groovy脚本中可以查询数据库,然后对数据库中的数据进行一些处理。平台支持任何接口都可以启用缓存。缓存不是缓存整个脚本的结果,而是只支持缓存数据库查询语句的结果,这样Groovy脚本中的其他逻辑依然可以处理数据......
  • gozero实现对接开放平台分贝通中新建费用报销的sdk设计与解决方案
    使用GoZero框架来实现费用报销对接CRM系统的SDK设计和解决方案,可以分为以下几个步骤。GoZero是一个Go语言编写的高性能Web框架,具有丰富的功能,适用于构建API服务。下面是如何使用GoZero来实现费用报销管理系统的API,并与CRM系统对接的方案。###一、准备工作......
  • Django Swagger文档库drf-spectacular
    一、概述drf-spectacular是一个为DjangoRESTFramework(DRF)设计的OpenAPI3.0和3.1规范的生成器。它旨在提供既理智又灵活的方式来创建API文档,主要实现以下三个目标:从DRF中提取尽可能多的schema信息提供灵活性,使schema在现实世界中可用(不仅仅是示例)生成一个与......
  • django空气净化器销售系统系统-毕业设计源码09218
    目  录摘要1绪论1.1研究背景1.2 研究意义1.3研究现状1.4论文结构与章节安排2 空气净化器销售系统系统分析2.1可行性分析2.1.1技术可行性分析2.1.2 经济可行性分析2.1.3操作可行性分析2.2系统功能分析2.2.1功能性分析2.2.2非功能性分......
  • delphi djson 类与JSON 互转,与 Java、Golang 一致写法
    前因为什么要开发这个JSON库?原因是delphi官方的json既没有处理null(也叫零值)的问题;举例说明吧:开发者往往需要类与JSON之间进行序列化和反序列化;接下来我们举个例子:Person{id:Int64;//IDname:string;//姓名desc:string;//描述}这样一个类在不......
  • 【Blackbox Exporter】ProbeHTTP 函数解析,黑盒探测神器:Go 实现 HTTP 请求性能监控与指
    ProbeHTTP函数用于通过HTTP协议对指定的目标地址进行监控和探测。通过使用Prometheus指标进行性能度量,函数支持捕获请求的各类数据,如响应时间、状态码、重定向次数、SSL/TLS信息等。本文将逐步解析这段代码,帮助您理解它的各个部分以及它是如何工作的。1.函数签名与......
  • MongoDB或TOMCAT定时切割日志文件的脚本.250103
    MongoDB用过一段时间后,日志较大,需要定时进行日志切割。一、切割bash:splitlogmongo.sh#!/bin/bashlog_dir="/home/mongodb/logs"file_name="/home/mongodb/logs/mongodb.log"if[!-d$log_dir];thenmkdir-p$log_dirfiif[!-f$file_name];thentouch$file_name......
  • MongoDB备份脚本.241217
    #!/bin/bash#backupMongoDB#mongodump命令路径DUMP=/home/mongodb/bin/mongodump#临时备份目录OUT_DIR=/home/mongodb_bak/mongodb_bak_now#备份存放路径TAR_DIR=/home/mongodb_bak/mongodb_bak_list#获取当前系统时间DATE=`date+%Y_%m_%d`#数据库账号DB_USER=root#......
  • spring的三级缓存
    spring的三级缓存:Spring容器的“三级缓存”Spring容器的整个生命周期中,单例Bean对象是唯一的。即可以使用缓存来加速访问Spring源码中使用了大量的Cache手段,其中在循环依赖问题的解决过程中就使用了“三级缓存”三级缓存的意义singletonObject:一级缓存,存放完全实例化且......