go-cache


进程中的分布式缓存


安装

go get github.com/wuyan94zl/go-cache

实例化

    // 引入缓存包
    import "github.com/wuyan94zl/go-cache"
    
    // 实例化单机版缓存服务
    cache.Default(nil)

    // 实例化分布式版缓存服务
    cache.Default(&cache.Config{
        MaxLen:         100000, // 缓存长度 默认10000
        BackupInterval: 1,      // 缓存备份间隔时间 1分钟备份一次(默认60分钟),备份文件保存在根目录 db 文件中,启动或重启时会自动把备份的db数据同步到内存缓存中
        // 远程节点基于grpc方式交互的分布式缓存配置
        Grpc: &cache.GrpcConfig{
            Port:        "8888",                                       // 当前服务监听端口
            CurrentHost: "localhost:8888",                             // 当前服务Grpc地址
            AllHosts:    []string{"localhost:8811", "localhost:8821"}, // 所有服务Grpc地址 直连需要手动配置
        },
    })
    
    // 操作使用
    
    // 设置一个键为test值为value的缓存,60秒后过期
    cache.Instance.Set("test", "value", 60)
    
    // 获取键为test的缓存值
    cache.Instance.Get("test")
    
    // 设置一个键为test_nx值为value的缓存,60秒后过期,返回true。如果键test_nx缓存存在则不操作返回false
    cache.Instance.SetNX("test_nx", "value", 60)
    
    // 获取一个键为cache_key的缓存值,不存在则调用回调函数f()获取数据并添加缓存。存在则直接返回,不会触发f()回调函数
    var f cache.CallBack = cache.CallBackFunc(func(key string, params map[string]interface{}) ([]byte, error) {
        return json.Marshal("cache write data")
    })
    // 回调函数的参数对应Cache函数的key,map[string]interface{}{}
    cache.Instance.CallBackFunc(f).Cache("cache_key", map[string]interface{}{}, 600)

项目中使用

单机版

分布式版

rpcPort, httpPort := "8811", ":8810"