当前位置: 首页 > ds >正文

Redis进阶--缓存

目录

一、引言

二、介绍

1.为什么Mysql的速度慢呢?

2.缓存更新策略

1.定期生成

2.实时生成

3.redis的内存淘汰机制

4.注意事项

1.缓存预热

2.缓存穿透

3.缓存击穿

4.缓存雪崩

三、总结


一、引言

  本篇文章将介绍Redis其中一个重要的作用,作为缓存。

二、介绍

Redis中的数据主要是存储在内存中,读取速度比硬盘快得多。

Redis一般是作为Mysql的缓存

1.为什么Mysql的速度慢呢?

1.数据存储在硬盘上,磁盘的IO速度并不快,尤其是随机访问

2.查询有时候没有走索引,直接全表扫描了,速度下降

3.如果是复杂的查询,比如联合查询,需要进行笛卡尔积的操作,速度会更慢

2.缓存更新策略

1.定期生成

会把访问的数据以日志的形式记录下来

统计这一段时间这些数据使用的频率,然后将这些数据设置为热点数据,放入Redis中

之后规定一定的时间自己去生成这些热点数据

缺点:不能及时的更新,如果某个不是热点数据的数据忽然变成了热点数据,不能及时更新到redis中

2.实时生成

先去redis中查,查到了就返回。如果没有查到就去mysql中查到,然后写入到redis中

但是这样redis会越写越多,怎么解决呢?

3.redis的内存淘汰机制

1.写满了之后就不允许写入了(不适合于实时更新)

2.没有过期时间:淘汰使用频率最低的,随机淘汰

3.有过期时间:淘汰使用频率最低的,随机淘汰,淘汰时间即将过期的

淘汰存在最久的(FIFO),淘汰使用频率最低的(LFU),淘汰最近一次使用时间最久的(LRU),随机淘汰(RANDOM)

4.注意事项

1.缓存预热

项目刚启动的时候,先将部分没有访问的数据放入到redis中

2.缓存穿透

查询的某个key,在redis中不存在,在mysql中也没有,大量的请求都到达mysql了,会使得mysql宕机。

解决方式:1.进行参数检查  2.当一个key查找数据库中不存在时,把一个空对象或者默认值保存在缓存中,之后再访问这个数据,从缓存中获取(存在的问题:缓存中有更多的key了,占用空间,数据不一致问题)。3.布隆过滤器:会保存数据是否存在,如果判断数据不在,就不会访问存储层。

3.缓存击穿

某个时期一个热点key突然过期了,导致大量请求打到mysql上,导致mysql挂掉

解决方式:1.对热点key永不过期

2.服务降级:关闭一些不是特别重要的功能

4.缓存雪崩

由于短时间内,大规模的key失效了,缓存命中率大幅下降,mysql的压力迅速上升,甚至于宕机

解决方式:1.加强监控报警,加强redis集群可用性的保证

2.设置过期时间的时候添加一个随机的因子/不设置过期时间

三、总结

  本篇文章简单介绍了Redis作为缓存的作用以及常见出现故障的情况,感谢观看!

http://www.xdnf.cn/news/16073.html

相关文章:

  • AQS 抽象队列同步器 资源竞争-排队等待
  • C++实战案例:从static成员到线程安全的单例模式
  • Django视图与路由系统
  • Elasticsearch、Solr 与 OpenSearch 搜索引擎方案对比分析及选型建议
  • 漏洞扫描 + 渗透测试:双轮驱动筑牢网络安全防线
  • 计算机发展史:个人计算机时代的多元融合与变革
  • cartographer内置评估工具使用流程:评估前端优化的误差
  • XSS学习总结
  • 【LeetCode数据结构】栈的应用——有效的括号问题详解
  • iOS 加固工具有哪些?快速发布团队的实战方案
  • Django Ninja
  • 【web 自动化】-6- 数据驱动DDT
  • AWS Certified Cloud Practitioner 认证考试 测试题与解析
  • CSS实现背景色下移10px
  • 自动化与安全 - 将 Terraform 集成到 CI/CD
  • rancher上使用rke在华为云多网卡的服务器上安装k8s集群问题处理了
  • 使用Trae简单编写一个登陆页面
  • 智能合约安全 - 重入攻击 - 常见漏洞(第一篇)
  • AUTOSAR进阶图解==>AUTOSAR_SWS_COMManager
  • 【JS逆向基础】数据库之MongoDB
  • c#转python第四天:生态系统与常用库
  • 近期工作感想:职业规划篇
  • Web开发 04
  • 【企业架构】TOGAF概念之一
  • Android系统5层架构
  • XSS知识总结
  • kafka生产端和消费端的僵尸实例以及解决办法
  • `MYSQL`、`MYSQL_RES` 和 `MYSQL_FIELD`的含义与使用案例
  • 【硬件】GalaxyTabPro10.1(SM-T520)刷机/TWRP/LineageOS14/安卓7升级全过程
  • 浅谈 Vue 的双向数据绑定