后端工程师的高阶面经
邓明
前 Shopee 高级工程师,Beego PMC
6888 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 50 讲
后端工程师的高阶面经
15
15
1.0x
00:00/00:00
登录|注册

38|缓存综合应用:怎么用缓存来提高整个应用的性能?

你好,我是大明。今天我们来讨论一个话题——怎么优雅地使用缓存来提高整个应用的性能。
早在微服务部分,我就和你说过,面试中比较好用的就是高可用方案和高性能方案。那么在高性能方案里面,缓存就是一个绕不过的坎。
但是大部分人在面试的时候,缓存方案都比较朴素,没有什么突出之处。比如说也就是用用 Redis,使用 Redis 的确能够提高性能,但毕竟使用 Redis 是一个入行三个月就能溜得飞起的技能,并不能凸显你的能力。
所以今天我就给你准备了一些比较有特色的缓存方案,让你在面试中赢得竞争优势。

面试准备

看看你所维护的业务有没有可以使用请求级别缓存或者会话级别缓存的场景。如果有,可以在公司尝试优化一下,并且注意比较优化前后的性能。
你有没有使用过什么与众不同的缓存方案?如果没有的话,可以尝试根据公司的业务特征来设计一些有特色的缓存方案。
你的业务里面有没有可能引入本地缓存的,并且可以进一步引入一致性哈希负载均衡策略来提高缓存命中率和性能。
记住在面试缓存的时候,你除了要掌握前面的那些知识点以外,还要有非常具体的缓存方案。
很多时候,你出去面试缓存的时候显得干巴巴的,就是因为你在面试的时候缺乏具体的案例支撑或者细节不够。就算是缓存里非常基础的知识,你都要有案例来支撑。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文介绍了如何通过优雅地使用缓存来提高应用性能,并在面试中脱颖而出。作者提出了一些特色的缓存方案,建议读者在面试准备中寻找适合使用请求级别缓存或会话级别缓存的场景,并尝试优化性能。此外,建议读者设计有特色的缓存方案,如引入本地缓存并进一步引入一致性哈希负载均衡策略来提高缓存命中率和性能。文章还介绍了客户端缓存、业务相关缓存预加载以及缓存预热和预加载等内容,为读者提供了丰富的缓存优化思路和方法。在面试中,除了掌握缓存知识点外,还要有具体的缓存方案和案例支撑。作者提出了两个缓存方案:一致性哈希 + 本地缓存 + Redis缓存,以及Redis缓存降级成本地缓存。这些方案的设计理念、实施前后的性能数据以及与业界一般方案的比较都是面试时需要重点讨论的内容。读者可以按照从前端到后端,从微服务到数据库的思路来面试,展示在每个环节上如何利用缓存来提高性能。最后,读者被鼓励思考自己是否有使用过更有特色的方案,并根据业务特征设计一个全方位应用缓存的面试方案。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《后端工程师的高阶面经》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(4)

  • 最新
  • 精选
  • 好运来
    redis降级为本地缓存中,监控到redis恢复之后,逐步把流量转移到redis中,这个流量切换的功能一般怎么实现?

    作者回复: 这个简单,你可以在 Cache 里面维持住标记位,标记位 = 0 就是不用 Redis,用本地缓存,标记位 > 0,比如说 80,就是 80% 到 Redis。类似这样就可以的。

    2023-09-16归属地:广东
    1
  • sheep
    1. 会话级别缓存这里,Java使用Spring的Session-scope,那Go应该使用什么类型呢 2. 客户端缓存这里,可不可以建立socket,当服务端有数据变化时,通知到对应客户端。缺点就是可能通知到全部,而且socket连接数会很多

    作者回复: 1. 可以考虑放 Session 里面 2. 最好通过消息队列之类的来通知。

    2024-02-21归属地:广东
  • 3.0的A7
    关于缓存命中率的统计,老师有什么好的方案吗?

    作者回复: 如果你们公司规模比较大的话,可以考虑二次封装查询缓存的客户端。比如说在 GO 里面封装 redis.Cmdable 接口,在这里上报每次访问 Redis 是否命中了缓存的信息。 又或者说,你可以考虑刷个 KPI,就是在公司提供一致的缓存的接口,然后提供不同的实现,并且使用装饰器来提供一个上报缓存是否命中的实现。 如果没有这种统一的机制,可以考虑业务方自己记录,也就是每次调用缓存接口的时候,自己记录一下。

    2023-10-08归属地:北京
  • peter
    请教老师几个问题: Q1:订单请求返回以后,缓存已经失效了,支付请求怎么获取? Q2:对“会话”一直理解不太到位,“会话”什么时候算结束? Q3:客户端采用服务端的jar包,怎么就能够解决“服务端修改数据后客户端没有感知”的问题?

    作者回复: 1. 它们是在一个请求内,是一个请求的两个步骤。 2. 你可以理解为,用户登录了就是一个会话,退出了就是结束了,但是你也可以自由控制这个粒度。 3. 服务端要通知各个 Jar 包,或者 Jar 包里面有一些监听机制去监听服务端的变更。

    2023-09-15归属地:北京
收起评论
显示
设置
留言
4
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部