V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
seaguest
V2EX  ›  程序员

推荐一下自己的 Go 分布式缓存, ratelimit, jsonvalidator 项目

  •  
  •   seaguest · 2019-09-09 11:38:16 +08:00 · 1423 次点击
    这是一个创建于 1684 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近重构了一下自己的分布式缓存方案,是 cache-aside 模式的二级缓存( memory+redis )实现,目前已经在线上投入使用,经过百万日活的验证。

    内存部分是采用的是 sync.Map, 读取缓存的时候先从内存读,如果未读到则去读 redis,如果 redis 未读到,则根据定义的加载函数加载到 redis 和内存。

    缓存有 lazy 模式,为了避免缓存被击穿,可以设置 lazy 模式,缓存数据存活的时间更久,但是每次读取的时候依然会判断数据是否是最新的,不是最新的话会异步加载更新。

    通过 redis 的 Publish/Subscribe 功能,实现缓存的分布式更新,目前仅实现删除同步。

    因为是很轻量级的,所以性能理论上会很不错,测试 1000 个并发毫无压力,有兴趣的同学可以验证一下。理论上性能的瓶颈在于加载函数(数据库的查询,网络请求等)。

    项目地址 https://github.com/seaguest/cache

    顺便推荐一下自己另外两个小项目:

    https://github.com/seaguest/ratelimit

    参考网上 token-bucket lua 脚本实现的分布式限速器,性能取决于 redis。
    

    https://github.com/seaguest/jsonvalidator

    基于 json 模板的一个 json 校验工具,源于自己想做个 REST API 的自动化测试 /监控工具,实现 json 请求,返回 json 结果自动校验,支持 go-playground/validator 的语法以及正则表达式验证。
    
    

    欢迎大家批评指正 提建议,求 star ~~~

    目前尚无回复
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1093 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 18:38 · PVG 02:38 · LAX 11:38 · JFK 14:38
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.