matryoshka
支持分布式环境,基于redis和机器内存(memory)的多级缓存。
- 一级缓存使用 freecache作为本地缓存,当数据在本地缓存中不存在时,会向第二级缓存请求数据。
- 二级缓存默认使用redis作为分布式缓存,当数据在二级缓存中不存在时,会向资源层请求数据。
- 当资源层某条数据更新,可以将缓存中对应的数据删除,二级分布式缓存会直接删除,一级内存缓存会默认利用redis的 sub/pub 机制,将所有机器下的数据删除。
功能
- 支持每级缓存的请求qps、命中qps、请求资源层qps的监控统计
- 支持只使用一级或二级缓存
- 支持自定义二级缓存和sub/pub的实现方式,只需要实现对应接口 WithDistributedCache、WithPubSubChannel
- 防缓存击穿,单机版的互斥锁,当从资源层同时加载同一数据时,每台机器最多只有一次请求会落到资源层,其他请求会等到数据同步到缓存后,直接从缓存中获取数据。
- 支持自定义错误处理,WithErrHandler
项目地址:https://github.com/smokezl/matryoshka
安装
go get github.com/smokezl/matryoshka
导入
import "github.com/smokezl/matryoshka"
基本使用方式
初始化
// 1、初始化全局缓存
conf := &matryoshka.RedisConfig{
Addr: "127.0.0.1:6379",
MaxRetry: 2,
Pwd: "",
IdleTimeout: 10,
ConnTimeout: 100,
MaxIdle: 50,
MaxActive: 500,
}
cache := matryoshka.Init(