redis(缓存)

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介: redis(缓存)

缓存

缓存(cache) 是计算机中的一个经典概念

核心思路是将 热点数据 放到访问速度更快的地方, 方便随时读取

通常情况下, 访问数据的速度: CPU 寄存器 > 内存 > 硬盘 > 网络

速度快的设备可以作为速度慢的设备的缓存

对于计算机硬件来说, 访问速度越快, 成本越高, 存储空间越小

但是大部分情况下, 缓存只存储一些 热点数据 , 是完全够用的

通常将 redis 作为 关系型数据库 (MySQL, Oracle …) 的缓存

关系型数据库的功能强大, 但是性能不高 (一次操作消耗资源较多)

  1. 数据存储在磁盘上, 磁盘的 IO 速度并不快
如果查询不能命中索引, 就需要进行表的遍历, 就会大大增加硬盘 IO 次数
  1. 关系型数据库对于 SQL 的执行会做一系列解析, 校验, 优化操作
  2. 复杂查询会触发笛卡尔积操作, 效率成指数下降

如何让数据库承担更大的并发量?

  1. 开源: 引入更多机器, 构成数据库集群
  2. 节流: 引入缓存, 热点数据通过缓存处理, 可以大大降低数据库的请求数量

经过缓存的业务执行流程

客户端访问业务服务器, 发起查询请求

业务服务器会先查询 缓存

  • 如果所需数据在 redis 中已存在, 则不必再访问 MySQL
  • 如果 redis 中不存在, 则访问 MySQL

缓存的更新策略

  1. 定期生成
    每隔一定周期, 对于访问数据进行统计, 根据访问频率挑选热点数据 (实时性差)
  2. 实时生成
    对于每次用户的查询
  • 如果在 redis 中查到了, 就返回对应结果
  • 如果在 redis 中查询不到, 就从数据库查, 并把查询到的数据也写入 redis

缓存淘汰机制

缓存 的容量是有限的, 对于热点数据的不断插入, 需要把一些 “不是那么热门” 的数据删除, 对此 缓存 拥有几种淘汰机制

FIFO (First In First Out) 先进先出 – 把缓存中存在最久的数据淘汰掉

LRU (Least Recently Used) 淘汰最久未使用的 – 记录每个 key 的最近访问时间, 每次淘汰访问时间最老的 key

LFU (Least Frequently Used) 淘汰访问次数最少的 – 记录每个 key 的访问次数, 每次淘汰访问次数最少的 key

Random 随机淘汰

缓存预热

当 Redis 作为 MySQL 缓存, 刚刚启动的时候, 会有大批 热点数据 生成到 Redis 中, 此时会造成 MySQL 的压力很大

缓存预热就是提前在 Redis 中准备部分热点数据, 让 MySQL 在刚刚启动时的压力没那么大


缓存穿透 (Cache Penetration)

访问的 key 在 Redis 和 数据库中都不存在, 这样的 key 并不会被用户获取到, 也不会被更新到Redis 中, 后续若是仍有此请求, 仍会访问数据库 (会导致数据库压力变大)

问题原因:

  1. 业务设计不合理
  2. 开发 / 运维误删数据库
  3. 黑客恶意攻击

解决:

  1. 当在 Redis 和 MySQL 中都查询不到时, 在 redis 中插入 value = “” 的键值对,防止后续频繁访问数据库
  2. 布隆过滤器对 key 进行校验
  3. 对查询数据做合法性校验 (针对业务上的优化)

缓存雪崩

问题:

  • 短时间内 redis 上 key 值大量失效 (redis 挂了 / 多个 key 的过期时间相同), 导致 redis 命中率下降, MySQL 压力骤增

解决:

  1. 部署高可用的 Redis 集群, 完善报警机制 (哨兵)
  2. 不设置过期时间, 或者对过期时间添加随机因子 (别同时全部过期)

缓存击穿 (Cache Breakdown)

问题:

  • 缓存雪崩的一种特殊情况, 热点 key 突然过期, 导致大量请求直接访问数据库

解决:

  1. 将热点 key 设置为永不过期
  2. 服务降级 (类似于手机省电模式, 适当关闭 MySQL 的非核心功能)

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
2月前
|
存储 缓存 NoSQL
解决Redis缓存数据类型丢失问题
解决Redis缓存数据类型丢失问题
180 85
|
17天前
|
存储 缓存 NoSQL
云端问道21期方案教学-应对高并发,利用云数据库 Tair(兼容 Redis®*)缓存实现极速响应
云端问道21期方案教学-应对高并发,利用云数据库 Tair(兼容 Redis®*)缓存实现极速响应
|
17天前
|
缓存 NoSQL 关系型数据库
云端问道21期实操教学-应对高并发,利用云数据库 Tair(兼容 Redis®)缓存实现极速响应
本文介绍了如何通过云端问道21期实操教学,利用云数据库 Tair(兼容 Redis®)缓存实现高并发场景下的极速响应。主要内容分为四部分:方案概览、部署准备、一键部署和完成及清理。方案概览中,展示了如何使用 Redis 提升业务性能,降低响应时间;部署准备介绍了账号注册与充值步骤;一键部署详细讲解了创建 ECS、RDS 和 Redis 实例的过程;最后,通过对比测试验证了 Redis 缓存的有效性,并指导用户清理资源以避免额外费用。
|
2月前
|
缓存 监控 NoSQL
Redis经典问题:缓存穿透
本文详细探讨了分布式系统和缓存应用中的经典问题——缓存穿透。缓存穿透是指用户请求的数据在缓存和数据库中都不存在,导致大量请求直接落到数据库上,可能引发数据库崩溃或性能下降。文章介绍了几种有效的解决方案,包括接口层增加校验、缓存空值、使用布隆过滤器、优化数据库查询以及加强监控报警机制。通过这些方法,可以有效缓解缓存穿透对系统的影响,提升系统的稳定性和性能。
|
3月前
|
缓存 NoSQL 关系型数据库
大厂面试高频:如何解决Redis缓存雪崩、缓存穿透、缓存并发等5大难题
本文详解缓存雪崩、缓存穿透、缓存并发及缓存预热等问题,提供高可用解决方案,帮助你在大厂面试和实际工作中应对这些常见并发场景。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
大厂面试高频:如何解决Redis缓存雪崩、缓存穿透、缓存并发等5大难题
|
3月前
|
存储 缓存 NoSQL
【赵渝强老师】基于Redis的旁路缓存架构
本文介绍了引入缓存后的系统架构,通过缓存可以提升访问性能、降低网络拥堵、减轻服务负载和增强可扩展性。文中提供了相关图片和视频讲解,并讨论了数据库读写分离、分库分表等方法来减轻数据库压力。同时,文章也指出了缓存可能带来的复杂度增加、成本提高和数据一致性问题。
【赵渝强老师】基于Redis的旁路缓存架构
|
3月前
|
缓存 NoSQL Redis
Redis 缓存使用的实践
《Redis缓存最佳实践指南》涵盖缓存更新策略、缓存击穿防护、大key处理和性能优化。包括Cache Aside Pattern、Write Through、分布式锁、大key拆分和批量操作等技术,帮助你在项目中高效使用Redis缓存。
491 22
|
3月前
|
缓存 NoSQL PHP
Redis作为PHP缓存解决方案的优势、实现方式及注意事项。Redis凭借其高性能、丰富的数据结构、数据持久化和分布式支持等特点,在提升应用响应速度和处理能力方面表现突出
本文深入探讨了Redis作为PHP缓存解决方案的优势、实现方式及注意事项。Redis凭借其高性能、丰富的数据结构、数据持久化和分布式支持等特点,在提升应用响应速度和处理能力方面表现突出。文章还介绍了Redis在页面缓存、数据缓存和会话缓存等应用场景中的使用,并强调了缓存数据一致性、过期时间设置、容量控制和安全问题的重要性。
60 5
|
3月前
|
缓存 NoSQL 中间件
redis高并发缓存中间件总结!
本文档详细介绍了高并发缓存中间件Redis的原理、高级操作及其在电商架构中的应用。通过阿里云的角度,分析了Redis与架构的关系,并展示了无Redis和使用Redis缓存的架构图。文档还涵盖了Redis的基本特性、应用场景、安装部署步骤、配置文件详解、启动和关闭方法、systemctl管理脚本的生成以及日志警告处理等内容。适合初学者和有一定经验的技术人员参考学习。
345 7
|
3月前
|
存储 缓存 监控
利用 Redis 缓存特性避免缓存穿透的策略与方法
【10月更文挑战第23天】通过以上对利用 Redis 缓存特性避免缓存穿透的详细阐述,我们对这一策略有了更深入的理解。在实际应用中,我们需要根据具体情况灵活运用这些方法,并结合其他技术手段,共同保障系统的稳定和高效运行。同时,要不断关注 Redis 缓存特性的发展和变化,及时调整策略,以应对不断出现的新挑战。
85 10