package
7.28.3
Repository: https://github.com/lun-zhang/zlutils.git
Documentation: pkg.go.dev

# README

直接存取json

用反射封装解析json的函数

带回源函数的批量查询函数BizMGetJsonMapWithFill

很常见的场景是批量缓存,缓存可能一部分发生修改(常见做法是修改后执行del key),就无法命中缓存, 未命中的部分,需要回源,然后将回源结果写入缓存,最后将命中和未命中的两部分合并返回给用户。

函数入参解释

入参解释:

  1. bizKeys必须是slice
  2. keyFunc必须只有一个入参和一个出参,
    • 入参类型必须与bizKeys的数组内每个元素的类型相同
    • 出参类型必须是string
  3. fillFunc(不为nil时)必须是2个入参,2个出参
    • 入参顺序:
      1. ctx context.Context
      2. noCachedBizKeys 未命中的bizKey数组,类型必须与bizKeys相同
    • 出参顺序:
      1. noCachedMap map[bizKey类型]bizValue类型
      2. err error 发生错误时,会返回
  4. outPtr 必须是map[bizKey类型]bizValue类型的地址

函数执行流程

  1. 执行redis mget获得命中缓存的cachedMap和未命中缓存的noCachedBizKeys
  2. (fillFunc != nil时)用noCachedBizKeys调用回源函数fillFunc,得到回源结果noCachedMap
  3. (fillFunc != nil时)将noCachedMap写入缓存,并且与cachedMap合并给到outPtr

如果fillFunc==nil就不会回源

如何避免击穿

fillFunc返回的noCachedMap中,将回源也查不到的bizKeybizValue填为nil 那么会被保存到redis中(json.Unmarshalnull),下次查redis查到null就不会回源了

# Functions

NOTE: 只能用于初始化时候,失败则panicredis基本不会是性能瓶颈,所以不放xray.

# Structs

No description provided by the author