首页 > 其他分享 >gcache使用

gcache使用

时间:2023-01-16 15:33:18浏览次数:42  
标签:gcache err value gc key 使用 main

gcache

gache感觉是个很不错的库,小巧实用,

func main() {
  // size: 10
  gc := gcache.New(10).Build()
  gc.Set("key", "value")
  v, err := gc.Get("key")
  if err != nil {
    panic(err)
  }
}

4个features

  1. 支持lfu,lru ,arc等cache算法。
  2. gogroutine 安全。
  3. 支持事件函数,evict,add。
  4. 支持自动加载缓存(通过loaderfunc)

set,get

package main

import (
  "github.com/bluele/gcache"
  "fmt"
)

func main() {
  gc := gcache.New(20).
    LRU().
    Build()
  gc.Set("key", "ok")
  value, err := gc.Get("key")
  if err != nil {
    panic(err)
  }
  fmt.Println("Get:", value)
}

设置过期

SetWithExpire 单独设置key过期事件

package main

import (
  "github.com/bluele/gcache"
  "fmt"
  "time"
)

func main() {
  gc := gcache.New(20).
    LRU().
    Build()
  gc.SetWithExpire("key", "ok", time.Second*10)
  value, _ := gc.Get("key")
  fmt.Println("Get:", value)

  // Wait for value to expire
  time.Sleep(time.Second*10)

  value, err = gc.Get("key")
  if err != nil {
    panic(err)
  }
  fmt.Println("Get:", value)
}

直接设置整个cache的过期时间

func main() {
  // LRU cache, size: 10, expiration: after a hour
  gc := gcache.New(10).
    LRU().
    Expiration(time.Hour).
    Build()
}

自动加载

package main

import (
  "github.com/bluele/gcache"
  "fmt"
)

func main() {
  gc := gcache.New(20).
    LRU().
    LoaderFunc(func(key interface{}) (interface{}, error) {
      return "ok", nil
    }).
    Build()
  value, err := gc.Get("key")
  if err != nil {
    panic(err)
  }
  fmt.Println("Get:", value)
}

LoaderFunc使用场景我觉得会小一些。

事件处理

驱逐事件:

func main() {
  gc := gcache.New(2).
    EvictedFunc(func(key, value interface{}) {
      fmt.Println("evicted key:", key)
    }).
    Build()
  for i := 0; i < 3; i++ {
    gc.Set(i, i*i)
  }
}

added事件:

func main() {
  gc := gcache.New(2).
    AddedFunc(func(key, value interface{}) {
      fmt.Println("added key:", key)
    }).
    Build()
  for i := 0; i < 3; i++ {
    gc.Set(i, i*i)
  }
}

标签:gcache,err,value,gc,key,使用,main
From: https://www.cnblogs.com/gqdw/p/17055491.html

相关文章

  • postgres使用pg_dump/psql导入导出
    准备打开windows下的命令窗口:开始->cmd->安装数据库的目录->进入bin目录;导出pg_dump–hlocalhost–Uusername–p5432–ddb_name–f"D:/test.dmp"可选参数U......
  • TestNG的使用技巧
    TestNG简介Testng是一套开源测试框架,是从Junit继承而来,testng意为testnextgeneration创建maven项目,添加依赖<dependency><groupId>org.testng</groupId><a......
  • 弱函数使用
    what?_weak函数是为了防止代码里面重复定义了同样函数名的函数,编译器在链接的时候会报错的一种手段。why?_weak一般被用在公共的接口上,比如中断入口函数,假如在isr.c定......
  • C# .NET6 Serilog的使用和配置
    入口文件:Program.csusingSerilog;usingSerilog.Events;//创建SerilogLog.Logger=newLoggerConfiguration().MinimumLevel.Override("Microsoft",LogEven......
  • postman简单使用
    postman是什么?postman是一款网页调试工具,支持几乎所有类型的HTTP请求下载地址:https://www.getpostman.com/简单使用网页使用F12打开调试模式,CopyasacURL(bash)......
  • [disruptor]03-disruptor的使用及缺陷
    03-disruptor的使用及缺陷disruptor的使用disruptor的使用代码可以见git仓库,这里仅仅对使用流程做一下简单介绍。消费者读数据消费者读数据的步骤如下:注册消费者,此时......
  • 三、四(调优系统性能、使用ACL控制对文件的访问)
    三、调优系统性能(不是重点)                     四、使用ACL控制对文件的访问           ......
  • Forexclub:为什么石油和天然气公司正在考虑使用绿色氢气
    随着全球对绿色氢的兴趣日益浓厚,能源公司正在利用各种可再生能源项目为氢生产提供动力。由于全球风电厂数十年的发展,这种生产的一个主要来源是风能。绿色氢被许多人誉为一种......
  • MeterSphere接口测试模块中循环控制器的使用
    MeterSphere开源持续测试平台的“接口测试”模块具有灵活的接口场景编排设计,模块覆盖了多种接口协议,可自由组合接口自动化测试场景,为接口测试带来方便快捷的体验。其中,逻辑......
  • SQL 函数使用
    replace用函数修改行数据1、使用replacesqlUPDATEtitles_testSETemp_no=REPLACE(emp_no,10001,10005)WHEREid=5;2、使用insert有......