广告
返回顶部
首页 > 资讯 > 数据库 >缓存 | Redis 缓存避坑指南
  • 259
分享到

缓存 | Redis 缓存避坑指南

缓存|Redis缓存避坑指南 2018-09-22 17:09:13 259人浏览 猪猪侠
摘要

作者:马功伟 青云科技软件开发工程师 目前从事青云数据库管理平台开发工作,一直从事 Server 端开发工作。 高并发业务场景下,常使用缓存技术缓解数据库压力,可极大的提升用户体验和系统稳定性。由于 Redis 自身的诸多特性,很

缓存 | Redis 缓存避坑指南

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

目前从事青云数据库管理平台开发工作,一直从事 Server 端开发工作。

高并发业务场景下,常使用缓存技术缓解数据库压力,可极大的提升用户体验和系统稳定性。由于 Redis 自身的诸多特性,很适合用来做缓存。下面是一个常见的缓存查询流程。

缓存查询流程

虽然缓存带来了较多数据库使用性能方面的提升,也会带来一些缓存使用问题。

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

| 缓存击穿

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

查询击穿

解决思路

永不失效

这里分两种情况:

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

使用互斥锁

业界常使用 mutex 。简单说,就是只允许一个线程重建缓存,其他线程等待重建缓存完成,再从缓存获取数据即可。

| 缓存穿透

查询下发后,缓存层和数据库层都没有数据的情况。由于存储层查不到,导致无数据缓存。不存在的数据请求每次都要到存储层去查询,在高并发场景下,导致数据库压力过大。

查询穿透

解决思路

缓存空值

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

接口层进行校验

类似 ID=-1 这样的请求,可以在接口层增加参数和发性校验,对于校验不通过的请求直接 Return。

通过 IP 限流

对单一 IP 进行限流,比如 10 次/ 2 秒。虚拟货币交易所使用该解决方案。

布隆过滤器

当要查询一个数据时,使用 K 个哈希函数对元素值进行 K 次计算,得到 K 个哈希值,根据得到的哈希值,检查对应的 K 个比特值。

| 缓存雪崩

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

查询雪崩

解决思路

随机生成 Redis Key 的过期时间

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

加锁排队

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

缓存预热

系统上线时将相关数据写入缓存,这样可以避免在系统上线初期的高并发访问。

永不失效

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

对于加排队方案可以减轻数据库压力,但是会降低吞吐量,分布式系统中,还要考虑分布式锁的问题,并且在高并发情况下,可能会导致用户等待超时,对系统并发能力并没有显著作用。

总结

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

问题类型 思路 缺点
击穿&雪崩 永不失效 容易产生脏数据
击穿&雪崩 使用互斥锁 造成系统吞吐量降低
穿透 布隆过滤器 产生假阳性情况

故针对不同的业务系统,需要根据不同的业务场景具体分析,对症下药

您可能感兴趣的文档:

--结束END--

本文标题: 缓存 | Redis 缓存避坑指南

本文链接: https://www.lsjlt.com/news/8686.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 缓存 | Redis 缓存避坑指南
    作者:马功伟 青云科技软件开发工程师 目前从事青云数据库管理平台开发工作,一直从事 Server 端开发工作。 高并发业务场景下,常使用缓存技术缓解数据库压力,可极大的提升用户体验和系统稳定性。由于 Redis 自身的诸多特性,很...
    99+
    2018-09-22
    缓存 | Redis 缓存避坑指南
  • redis缓存指的是什么
    这篇文章给大家分享的是有关redis缓存指的是什么的内容。小编觉得挺实用的,因此分享给大家做个参考。一起跟随小编过来看看吧。redis缓存是什么意思?Redis缓存是一个开源的使用ANSIC语言编写、支持网...
    99+
    2022-10-18
  • redis缓存
    分布式项目的常见问题:对于首页每天有大量的人访问,对数据库造成很大的访问压力,甚至是瘫痪。那如何解决呢?我们通常的做法有两种:一种是数据缓存、一种是网页静态化。 redis是一款开源的Key-Value数据库,运行在内存中,由ANSIC编写...
    99+
    2019-04-17
    redis缓存
  • PHP入门指南:缓存设置
    PHP是一种非常流行的编程语言,在互联网开发领域经常被使用。在PHP开发中,缓存设置是非常重要的一部分。缓存可以提高网站性能和用户体验,降低服务器负载,是网站优化的常用手段之一。本文将为大家介绍PHP缓存设置的入门指南。一、什么是缓存?缓存...
    99+
    2023-05-20
    指南 PHP入门 缓存设置
  • Redis缓存穿透、缓存击穿、缓存雪崩
    使用redis作为缓存时,存在一些应用问题,包括缓存穿透、缓存击穿、缓存雪崩。 Redis缓存穿透、缓存击穿缓存雪崩 redis常被用于作为后台数据库的缓存,缓存一些热点访问数据,根据局部性原...
    99+
    2014-07-07
    Redis缓存穿透 缓存击穿 缓存雪崩
  • redis中缓存雪崩、缓存击穿、缓存穿透指的是什么意思
    这篇文章主要介绍了redis中缓存雪崩、缓存击穿、缓存穿透指的是什么意思,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。什么是redis缓存?...
    99+
    2022-10-18
  • redis的缓存雪崩、缓存穿透和缓存击穿
       缓存雪崩: 比如给缓存中的key设置了统一的过期时间,而在过期时间点,有大量的请求进来,这个时候redis中没有用户请求的资源,所以所有的请求会全部拥到数据库,如果数据库有报警监测的话,可能会报一下警,然后数据库就挂掉了。如果这时候把...
    99+
    2017-11-21
    redis的缓存雪崩 缓存穿透和缓存击穿
  • mysql缓存 (redis)
    Mysq需要注意的地方:mysql主从复制 延迟来自于 sql线程(解决:myslq5.7 可设置成多线程并行)数据库监控:lepus大型数据库的删除(安全快速的方法 一部分一部分删除)(不推荐暴力的删除 ...
    99+
    2022-10-18
  • Redis系列(六)Redis 的缓存穿透、缓存击穿和缓存雪崩
    NoSQL 开发中或多或少都会用到,也是面试必问知识点。最近这几天的面试每一场都问到了。但是感觉回答的并不好,还有很多需要梳理的知识点。这里通过几篇 Redis 笔记整个梳理一遍,后面再加上面试题。 Redis 系列: ...
    99+
    2021-02-26
    Redis系列(六)Redis 的缓存穿透 缓存击穿和缓存雪崩
  • redis缓存雪崩、缓存击穿和缓存穿透是什么
    这篇文章主要介绍了redis缓存雪崩、缓存击穿和缓存穿透是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇redis缓存雪崩、缓存击穿和缓存穿透是什么文章都会有所收获,下面我...
    99+
    2022-11-30
    redis
  • Redis缓存击穿、缓存穿透、缓存雪崩如何解决
    本篇内容介绍了“Redis缓存击穿、缓存穿透、缓存雪崩如何解决”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Redis缓存使用场景Redis...
    99+
    2023-07-05
  • 怎么缓存redis
    这篇文章运用简单易懂的例子给大家介绍怎么缓存redis,代码非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。redis怎么缓存?首先使用redis需要在服务器上提前安装,安装的命令是yum i...
    99+
    2022-10-18
  • Redis缓存一致性、缓存穿透、缓存击穿及缓存雪崩问题分析
    本篇内容介绍了“Redis缓存一致性、缓存穿透、缓存击穿及缓存雪崩问题分析”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,...
    99+
    2022-10-19
  • Redis中的缓存穿透、缓存雪崩、缓存击穿和缓存一致性怎么理解
    这篇文章主要介绍“Redis中的缓存穿透、缓存雪崩、缓存击穿和缓存一致性怎么理解”,在日常操作中,相信很多人在Redis中的缓存穿透、缓存雪崩、缓存击穿和缓存一致性怎么理解问题上存在疑惑,小编查阅了各式资料...
    99+
    2022-10-19
  • Redis中三大缓存现象缓存击穿、缓存穿透、缓存雪崩的解决方法
    这篇文章主要介绍“Redis中三大缓存现象缓存击穿、缓存穿透、缓存雪崩的解决方法”,在日常操作中,相信很多人在Redis中三大缓存现象缓存击穿、缓存穿透、缓存雪崩的解决方法问题上存在疑惑,小编查阅了各式资料...
    99+
    2022-10-18
  • redis缓存数据最多可以缓存多少
    今天就跟大家聊聊有关redis缓存数据最多可以缓存多少,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。  Redis在分布式应用中占据着越来...
    99+
    2022-10-18
  • 本地缓存与redis缓存有什么区别
    这篇文章主要介绍本地缓存与redis缓存有什么区别,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!本地缓存与redis缓存有以下几种不同:1、读写速度,不考虑并发问题,本地缓存自然是最...
    99+
    2022-10-18
  • springboot redis缓存配置
    今天小编就为大家带来一篇springboot redis缓存配置的文章。小编觉得挺实用的,为此分享给大家做个参考。一起跟随小编过来看看吧。开启远程访问:找到redis中的redis.conf文件并编辑(在安...
    99+
    2022-10-18
  • 如何解决redis缓存穿透、缓存击穿、缓存雪崩的问题
    这篇文章主要介绍了如何解决redis缓存穿透、缓存击穿、缓存雪崩的问题,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。缓存穿透:key中对应的...
    99+
    2022-10-18
  • Redis中缓存雪崩、缓存击穿和缓存穿透的示例分析
    这篇文章主要为大家展示了“Redis中缓存雪崩、缓存击穿和缓存穿透的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Redis中缓存雪崩、缓存击穿和缓存穿...
    99+
    2022-10-18
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作