当前位置: 首页 > news >正文

北京做家政网站有哪些平台网站开发检测用户微信号

北京做家政网站有哪些平台,网站开发检测用户微信号,在线代理网页最干净,wordpress编辑器字体GitHub - kocor01/kcache: go 本地缓存解决方案,支持本地缓存过期、缓存过期自维护机制。 最近系统并发很高,单接口10W的 QPS,对 redis 压力很大,大量的热KEY导致 redis 分片CPU资源经常告警。计划用 go 本地缓存缓解 redis 的压…

GitHub - kocor01/kcache: go 本地缓存解决方案,支持本地缓存过期、缓存过期自维护机制。

最近系统并发很高,单接口10W的 QPS,对 redis 压力很大,大量的热KEY导致 redis 分片CPU资源经常告警。计划用 go 本地缓存缓解 redis 的压力。

有多个系统需要使用本地缓存,写了 KCache 方便各个系统使用。

本地压测达到 100W QPS。

使用请参考 使用实例

创建KCache

  • 创建一个KCache, 默认本地缓存过期时间 5s

    kc := New()
    
  • 创建一个KCache, 自定义本地缓存过期时间

    kc := NewWithExp(2 * time.Second)
    

获取缓存

  • GET 获取缓存,函数不带参数,本地缓存过期时间为创建 KCache 时设置的全局过期时间。

      kc := New()d := kc.Get("myKey", GetData())
    

    GET 方法包含两个参数,第一个参数为缓存的key,第二个参数为获取缓存数据的函数。当缓存不存在时,会调用函数获取数据,并将数据缓存起来。 函数需符合 GetKcDatafunc 类型、返回值需符合 KcData 类型。

    type GetKcDatafunc func() KcDatatype KcData struct { interface{} error
    }
    

    示例:

    // 获取缓存数据
    func GetData() GetKcDatafunc {return func() KcData {// sleep 模拟从 Redis、DB 中获取数据time.Sleep(20 * time.Millisecond)d := map[string]string{"k1": "value1","k2": "value2",}return KcData{d: d, err: nil}}
    }
    
  • Get 获取缓存,函数带参数

    kc := New()
    params := map[string]string{"k1": "value1","k2": "value2",
    }
    d := kc.Get("myKey", GetDataV2("myKey", params))
    

    示例:

    // 获取缓存数据
    func GetDataV2(key string, params map[string]string) GetKcDatafunc {return func() KcData {// sleep 模拟从 Redis、DB 中获取数据,也可以先从 redis 获取数据, 如果获取不到,再从 DB 中获取。time.Sleep(20 * time.Millisecond)data := make(map[string]string)for k, v := range params {data[k+key] = v}return KcData{d: data, err: nil}}
    }
    
  • GetWithExp 获取缓存,自定义本地缓存时间

    kc := New() 
    exp := 2 * time.Second
    params := map[string]string{"k1": "value1","k2": "value2",
    }
    d := kc.GetWithExp("myKey", exp, GetDataV2("myKey", params))
    

GetKcDatafunc 实现

  • Kcache 中间函数(强烈推荐)

    通过 Kcache 中间函数调用原有的获取数据函数,该函数内部不含任何业务代码,减少业务代码与缓存代码的耦合。

    kc := New()
    exp := 2 * time.Second
    params := map[string]string{"k1": "value1","k2": "value2",
    }
    d := kc.GetWithExp("myKey", exp, GetDataKcache("myKey", params))
    
    // 获取缓存数据, Kcache 中间函数
    func GetDataKcache(key string, params map[string]string) GetKcDatafunc {return func() KcData {data, err := GetDataV2(key, params)return KcData{Data: data, Err: err}}
    }// 获取数据
    func GetDataV2(key string, params map[string]string) (map[string]string, error) {// sleep 模拟从 Redis、DB 中获取数据,也可以先从 redis 获取数据, 如果获取不到,再从 DB 中获取。time.Sleep(20 * time.Millisecond)data := make(map[string]string)for k, v := range params {data[k+key] = v}return data, nil
    }
    
  • 闭包函数(推荐)

    简单获取数据的业务逻辑可以使用闭包函数。

    kc := New()
    params := map[string]string{"k1": "value1","k2": "value2",
    }
    key := "myKey"
    fc := func() KcData {// sleep 模拟从 Redis、DB 中获取数据,也可以先从 redis 获取数据, 如果获取不到,再从 DB 中获取。time.Sleep(20 * time.Millisecond)data := make(map[string]string)for k, v := range params {data[k+key] = v}return KcData{Data: data, Err: nil}
    }
    d := kc.Get(key, fc)
    
  • 业务混合

    kc := New()
    d := kc.Get("myKey", GetData())
    
    // 获取缓存数据
    func GetData() GetKcDatafunc {return func() KcData {// sleep 模拟从 Redis、DB 中获取数据time.Sleep(20 * time.Millisecond)d := map[string]string{"k1": "value1","k2": "value2",}return KcData{Data: d, Err: nil}}
    }
    

设置缓存

  • Set 设置缓存,本地缓存过期时间为创建 KCache 时设置的全局过期时间。

    正常情况下无需使用 Set 方法,因为 Get 方法会自动设置缓存。

    kc := New()
    params := map[string]string{"k1": "value1","k2": "value2",
    }
    d := kc.Set("myKey", params)
    
  • SetWithExp 设置缓存,自定义本地缓存时间。

    正常情况下无需使用 SetWithExp 方法,因为 Get 方法会自动设置缓存。

    kc := New()
    exp := 2 * time.Second
    params := map[string]string{"k1": "value1","k2": "value2",
    }
    d := kc.SetWithExp("myKey", params, exp)
    

删除缓存

  • Delete 删除本地缓存

    正常情况下无需使用 Delete 方法,因为有自动删除缓存机制。

    kc := New()
    params := map[string]string{"k1": "value1","k2": "value2",
    }
    d := kc.Delete("myKey")
    

单纯使用本地缓存

  • 不需要自维护缓存数据

  • 底层使用的 go-cache,go-cache下的所有方法都可以使用。

    kc := New()
    // SET
    kc.lc.Set("myKey", "myValue", 2*time.Second)
    // GET
    d, f := kc.lc.Get("myKey")
    // other
    ...

更多使用案列请参考 使用实例

http://www.yayakq.cn/news/745303/

相关文章:

  • 做企业网站的流程wordpress侧边浮动
  • 网站建设花钱少萧山做网站的公司
  • 域名备案个人网站名称赣州网站建设有哪些
  • 成都网站登记备案查询网站开发html的题
  • 昆明网站建设哪家合适做彩票网站犯法不
  • 毕业设计做网站还是系统做的比较好的法律实务培训网站
  • 淄博桓台学校网站建设方案wordpress登录注册界面
  • 网站怎么备案学视频剪辑去哪里学比较好
  • 办公室设计方案安徽网站建设优化推广
  • 网站建设与管理实践报告总结厦门十大装修公司排名榜
  • 株洲网站制作建设有什么网站可以做宣传
  • 做站用什么网站程序转化率的网站设计
  • 怎么自己做单页网站重庆seo优化公司哪家好
  • 如何建设网站制作平台小程序代理能赚钱吗
  • 做网站php软件中文wordpress视频主题
  • 做电影网站需要空间吗武进网站建设市场
  • 学习电子商务网站建设与管理的收获6微信公众号怎么做微网站
  • 网站初期建设方案深圳网站小程序设计开发
  • 找人做网站应该注意哪些一站式网站手机端怎么做
  • 网站制作详情简易软件开发工具
  • 做网页和网站一样吗服务器维护工程师
  • 免费域名试用注册网站商务网站建设中的必备功能
  • 集团网站建设服务公司wordpress 内存溢出
  • 陕西网站建设排名wordpress大学添加背景音乐
  • 铁道部建设监理协会网站手机网站例子
  • 潍坊做网站的电话设计师常去的网站
  • 东莞 网站建设多少钱软文推广案例500字
  • 泰安建设网站少儿编程是学些什么东西
  • 重庆自助建网站企企业郑州营销网站建设
  • wordpress图片设置水印如何做 网站的seo