Golang Go语言中后端服务使用缓存有没有更优雅的做法

发布于 1周前 作者 caililin 来自 Go语言

– 请求处理
- 请求过来
- 构建 redis key, 读取 redis, 拿到结果返回, 否则下一步
- 数据库查询 执行相应逻辑 取得结果
- 写入缓存
- 返回

– 更新, 构建相同的缓存 key, del cache

如果是 python 的话 可以用函数修饰器来更优雅的做(虽然流程一样, 但是读写 redis 的地方修饰器里面统一处理 函数本身关注自身逻辑就行)
golang 的话 就得在整个逻辑里面写 导致很多用到缓存的地方有很多重复的代码
我的做法有问题吗? 有没有更好的做法呢
golang 新手一枚 希望大家能指导下
Golang Go语言中后端服务使用缓存有没有更优雅的做法


更多关于Golang Go语言中后端服务使用缓存有没有更优雅的做法的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html

11 回复

可以写中间件,路由注册的时候套上去。

更多关于Golang Go语言中后端服务使用缓存有没有更优雅的做法的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


#1 有类似做法的项目吗 想看看

山寨装饰器 :doge:

你也可以写个装饰器
不过确实通常用中间件。

#4 推荐一个中间件来看看 装饰器的话 强类型的写起来太麻烦了

这种事情不是封装一个函数就解决的吗。。。

把 SQL 调用和 REDIS 操作抽象成一个函数,然后。。。

从软件设计的角度,不推荐和 SQL 封装在同一个函数。当我们需要事务性操作的时候,会导致脏读从而事务无效。

推荐把 Cache 做在 ServiceFacade 里面。由他控制缓存和事务。

当然,如果是 java 一个 Annotation 解决问题。

我也觉得这种 AOP 的风格是不容易达到的, 还是得看封装

我是抽出来,单写成一个包用
https://github.com/vgmdj/plugins

#9 嗯 现在也是差不多一样的做法

在Golang(Go语言)中构建中后端服务时,使用缓存是提升性能和响应速度的重要手段。以下是一些更优雅且高效的缓存使用策略:

  1. 选择合适的缓存库:Go社区提供了多种优秀的缓存库,如groupcachecache2go以及BigCache等。根据项目需求选择合适的库,可以大大简化缓存的管理。

  2. 利用内存缓存:对于小型到中型应用,使用Go的内置map或sync.Map作为缓存存储是一个简单且高效的选择。对于更高级的需求,可以考虑使用Redis或Memcached等分布式缓存。

  3. 设置缓存失效策略:实施合理的缓存失效策略(如LRU、LFU)以避免缓存污染和内存浪费。Go语言的第三方库通常提供了这些策略的实现。

  4. 使用上下文管理缓存:在中后端服务中,利用Go的context包来管理缓存的生命周期和访问权限,可以确保缓存的安全性和一致性。

  5. 缓存预热与分层:根据应用需求,实施缓存预热策略以减少首次访问的延迟。同时,考虑使用多层缓存(如本地缓存+分布式缓存)来优化性能和可扩展性。

  6. 监控与调优:持续监控缓存的性能和命中率,并根据数据进行调优。使用Go的监控工具(如Prometheus)可以方便地收集和分析缓存相关的指标。

通过上述策略,你可以在Go语言项目中更优雅地实现缓存,从而提升服务的整体性能和用户体验。

回到顶部