关于redis:缓存-Redis-缓存避坑指南

22次阅读

共计 1759 个字符,预计需要花费 5 分钟才能阅读完成。

作者:马功伟 青云科技软件开发工程师

目前从事青云数据库治理平台开发工作,始终从事 Server 端开发工作。

高并发业务场景下,常应用缓存技术缓解数据库压力,可极大的晋升用户体验和零碎稳定性。因为 Redis 本身的诸多个性,很适宜用来做缓存。上面是一个常见的缓存查问流程。

<center> 缓存查问流程 </center>

尽管缓存带来了较多数据库使用性能方面的晋升,也会带来一些缓存应用问题。

本文将为大家介绍并辨别 缓存穿透,缓存击穿,缓存雪崩 三个常见缓存问题,并针对不同问题提供相应解决思路。

| 缓存击穿

查问申请下发后,缓存层中没有查问内容,数据库中有。在高并发场景下,某热点 Key 忽然生效,所有申请都打到数据库上,导致数据库压力过大。

<center> 查问击穿 </center>

解决思路

永不生效

这里分两种状况:

  • 对缓存数据的 Redis Key 不设置过期工夫,在数据库写入后进行刷新缓存;
  • 另起异步工作在 Redis Key 将要过期的时候来更新缓存。

应用互斥锁

业界常应用 mutex。简略说,就是只容许一个线程重建缓存,其余线程期待重建缓存实现,再从缓存获取数据即可。

| 缓存穿透

查问下发后,缓存层和数据库层都没有数据的状况。因为存储层查不到,导致无数据缓存。不存在的数据申请每次都要到存储层去查问,在高并发场景下,导致数据库压力过大。


<center> 查问穿透 </center>

解决思路

缓存空值

对于缓存中没有并在数据库中查问不到的数据,能够缓存空值,并设置较短的有效期。

接口层进行校验

相似 ID=-1 这样的申请,能够在接口层减少参数和发性校验,对于校验不通过的申请间接 Return。

通过 IP 限流

对繁多 IP 进行限流,比方 10 次 / 2 秒。虚构货币交易所应用该解决方案。

布隆过滤器

当要查问一个数据时,应用 K 个哈希函数对元素值进行 K 次计算,失去 K 个哈希值,依据失去的哈希值,查看对应的 K 个比特值。

| 缓存雪崩

高并发场景下,同一时间大面积的缓存生效,所有的申请打到数据库上,导致数据库压力过大。 与缓存击穿不同的是,缓存击穿是并发查问同一条数据,缓存雪崩是大量的缓存生效


<center> 查问雪崩 </center>

解决思路

随机生成 Redis Key 的过期工夫

在写入缓存时随机生成 Key 的过期工夫,比方随机在 1-10 之间生成秒数。

加锁排队

与缓存击穿解决思路统一。

缓存预热

零碎上线时将相干数据写入缓存,这样能够防止在零碎上线初期的高并发拜访。

永不生效

和缓存击穿解决思路统一。

对于加锁排队计划能够加重数据库压力,然而会升高吞吐量,分布式系统中,还要思考分布式锁的问题,并且在高并发状况下,可能会导致用户期待超时,对系统并发能力并没有显著作用。

总结

对以上提及的解决思路,也存在如下一些毛病。

问题类型 思路 毛病
击穿 & 雪崩 永不生效 容易产生脏数据
击穿 & 雪崩 应用互斥锁 造成零碎吞吐量升高
穿透 布隆过滤器 产生假阳性状况

故针对不同的业务零碎,须要依据不同的业务场景具体分析, 隔靴搔痒

对于 RadonDB

RadonDB 开源社区 是一个面向云原生、容器化的数据库开源社区。为数据库技术爱好者提供围绕支流开源数据库(MySQL、PostgreSQL、Redis、MongoDB、ClickHouse 等)的技术分享平台,并提供企业级 RadonDB 开源产品及服务。

目前 RadonDB 开源数据库系列产品已被 光大银行、浦发硅谷银行、哈密银行、泰康保险、太平保险、安盛保险、阳光保险、百年人寿、安吉物流、安畅物流、蓝月亮、天财商龙、罗克佳华、升哲科技、无锡汇跑体育、北京电信、江苏交通控股、四川航空、昆明航空、国控生物 等上千家企业及社区用户采纳。

RadonDB 可基于云平台与 Kubernetes 容器平台交付,不仅提供笼罩多场景的数据库产品解决方案,而且提供业余的集群治理和自动化运维能力,次要性能个性包含: 高可用主从切换、数据强一致性、读写拆散、一键装置部署、多维指标监控 & 告警、弹性扩容 & 缩容、横向自在扩大、主动备份 & 复原、同城多活、异地灾备 等。RadonDB 仅需企业及社区用户专一于业务层逻辑开发,无需关注集群高可用选型、治理和运维等简单问题,帮忙企业及社区用户大幅度晋升业务开发与价值翻新的效率!

GitHub:https://github.com/radondb

微信群:请搜寻增加群助手微信号 radondb

正文完
 0