说起Redis的诞生,它跟关系数据库MySQL还是挺有渊源的。

随着互联网的高速发展,MySQL容纳的数据也越来越多,用户请求也随之暴涨。而每一个用户请求都变成了对它的一个又一个读写操作,MySQL真是苦不堪言。尤其是到类似双11 这种全民购物狂欢的日子,都是MySQL受苦受难的日子。
后来有人就琢磨,是不是可以学学CPU,给数据库也加一个缓存呢?于是基于缓存的Redis数据库就诞生了!

Redis的使用流程

应用程序先从MySQL那查询到的数据,在Redis这里登记一下,后面再需要用到的时候,就先找Redis要,这里就不用再麻烦MySQL了。

因为Redis会把登记的数据都记录在内存中,所以就不用去执行慢如蜗牛的I/O操作了。所以找Redis要数据 比找MySQL要数据省去不少的时间!

Redis支持的5中种对象

1.String (字符串类型)
2.Hash (哈希)
3.List (链表)
4.Set(集合)
5.zset(有序集合)

缓存过期 && 缓存淘汰

Redis缓存的数据都是在内存中,可是就算是在服务器上,内存的空间资源还是很有限的,总之不能无节制的存下去。
所以Redis想到了一个办法:给缓存内容设置一个超时时间,具体设置多长交给应用的程序们去设置,Redis要做的就是把过期的内容从Redis数据库里面删除,及时腾出空间就OK了。

超时时间有了,那么Redis该在什么时候去干这个清理的活呢?
最简单的就是定期删除,比如100ms就做一次,一秒钟就是10次!

当然清理的时候也不能一下把所有过期的资源都给删除掉。因为Redis里面存了大量的数据,如果全面扫一遍,那不知道要花多长时间,会严重影响Redis接收新的请求!
所以Redis只好随机选择一部分来清理,能缓解内存压力就行了!

这样的话,那如果是某些键值的运气比较好,每次都没有被Redis的随机算法选中,每次都能幸免于难。那么这些长时间过期的数据就一直会占着内存空间!

于是Redis在原来定期删除的基础上,又加了一招:
把那些原来逃脱随机选择算法的键值,一旦遇到查询请求,被发现已经过期了,那就立即删除。
这种方式因为是被动式触发的,不查询就不会发生,所以也叫惰性删除!

可是,还是有部分键值,既逃脱了Redis的随机选择算法,又一直没有被查询,导致它们一直占着内存!而于此同时,可以使用的内存空间却越来越少。

而且就算退一步讲,Redis能够把过期的数据都删除掉,那万一过期时间设置的过长,还没等到Redis去清理,内存就已经吃满了,那就······

所以就有了内存淘汰策略,这一次Redis就能彻底解决问题啦!
Redis提供了8种策略供应用程序选择,用于Redis遇到内存不足时该如何决策:
- noeviction:返回错误,不会删除任何键值
- allkeys-lru:使用LRU算法删除最近最少使用的键值
- volatile-lru:使用LRU算法 从设置了过期时间的键集合中删除最近最少使用的键值
- allkeys-random:从所有key中随机删除
- volatile-random:从设置了过期时间的键的集合中随机删除
- volatile-ttl:从设置了过期时间的键中删除剩余时间最短的键
- volatile-lfu:从配置了过期时间的键中删除使用频率最少的键
- allkeys-lfu:从所有键中删除使用频率最少的键

有了上面几套组合拳,Redis就再也不用担心过期数据多了把空间撑满的问题了~

缓存穿透 && 布隆过滤器

不过MySQL有时会遇到查询的数据不存在的请求,每当这时MySQL就要白忙活一场!不仅如此,因为不存在,Redis也没法缓存,导致同样的请求来了每次都要让MySQL白忙活一场。Redis作为缓存的价值就没得到体现啦!这就是人们常说的缓存穿透

要把那些明知道不会有结果的查询请求挡住,缓解MySQL的压力,那这时就要用布隆过滤器了。

布隆过滤器别的本事没有,就擅长从超大的数据集中快速告诉你查找的数据存不存在!
PS:布隆过滤器有一点不靠谱,它告诉你存在的话不能全信,其实有可能是不存在的,不过它他如果告诉你不存在的话,那就一定不存在

将布隆过滤器介绍给了应用程序,不存在的数据就不会去打扰MySQL了,轻松帮忙解决了缓存穿透的问题。

缓存击穿 && 缓存雪崩

缓存击穿:当一个热点数据到了过期时间,被Redis删掉了,不巧的是随后就有对这个数据的大量查询请求过来,Redis这里已经删了,所以请求都会发到MySQL那里。

缓存雪崩:当一大批数据几乎同时过了有效期,然后又发生了很多对这些数据的请求。

要解决缓存击穿及缓存雪崩的问题,那么就要在程序上调整键值的过期时间,可以让其随机一下。对于热点数据,可以设置热点数据永不过期!

一文读懂Redis概念及常用术语相关推荐

  1. 一文读懂Redis常见对象类型的底层数据结构

    点击上方 好好学java ,选择 星标 公众号 重磅资讯.干货,第一时间送达 今日推荐:硬刚一周,3W字总结,一年的经验告诉你如何准备校招! 个人原创100W+访问量博客:点击前往,查看更多 转自:伍 ...

  2. 一文读懂Redis的四种模式,单机、主从、哨兵、集群(*)

    前言: redis有多种模式:单机模式.主从模式.哨兵模式.集群模式 1.单机模式 安装一个redis,启动起来,业务调用即可. 单机在很多场景也是有使用的,例如在一个并非必须保证高可用的情况下. 优 ...

  3. 一文读懂 Redis

    Redis 目录 Redis 1. 了解NoSql 1.1 什么是Nosql 1.2 NoSql数据库的优势 1.3 常见的NoSql产品及各产品的区别 2. Redis介绍 2.1 什么是Redis ...

  4. Redis与MySQL的双剑合璧,一文读懂redis

    还不懂Redis?看完这个故事就明白了! Redis Redis(Remote Dictionary Server)的诞生,跟关系数据库MySQL还挺有渊源的. MySQL使用中,有一大半的用户请求都 ...

  5. 一文读懂 Redis!

    一.redis简介 Redis 是C语言开发的一个开源高性能键值对的内存数据库,可以用来做数据库.缓存.消息中间件等场景,是一种NoSQL(not-only sql,非关系型数据库)的数据库. 二.R ...

  6. 一文读懂 S7-1500 手册 - 关于常用资源的介绍

    中央处理单元 (CPU) 是 SIMATIC S7-1500 系列产品的核心.由于 S7-1500 系列产品范围非常广泛,因此在日常工作中,特别在 S7-1500 CPU 选型和使用阶段,工程师经常遇 ...

  7. 一文读懂自动驾驶中常用的定位算法之NDT点云配准算法

    文中所用图片如无声明来源网络和论文. Paper: The Three-Dimensional Normal-Distributions Transform- an Efficient Represe ...

  8. 一文读懂redis的zset

    zset的数据结构 在redis中有一个有序列表,它的底层是由压缩列表或跳表组成.我们看下对应的数据结构 压缩链表: 跳表: 下载下来4.0的源码 https://download.redis.io/ ...

  9. 【深度学习】一文读懂机器学习常用损失函数(Loss Function)

    [深度学习]一文读懂机器学习常用损失函数(Loss Function) 最近太忙已经好久没有写博客了,今天整理分享一篇关于损失函数的文章吧,以前对损失函数的理解不够深入,没有真正理解每个损失函数的特点 ...

最新文章

  1. android selector的用法解析
  2. bert+crf可以做NER,那么为什么还有bert+bi-lstm+crf ?
  3. 如何查看笔记本电脑配置参数_2020双十一(小白/学生)如何选购笔记本电脑?5000元预算哪款笔记本配置值得入手?...
  4. redis lua
  5. SHLL脚本从1到100自加
  6. Uploadify3.2中文提示
  7. 浅析 record 使用场景
  8. 《C++ Primer》13.1.4节练习
  9. 反射、HashMap、ArrayList与LinkedList区别
  10. 工作116:确定需求报告
  11. win32 串口阻塞的方式发送接收数据
  12. python中pycharm倒计时_pycharm中的快捷键和简单设置
  13. 精译丨美国2017年最值得投资的7大共同基金
  14. python模态窗口_python webdriver 对模态窗口的处理
  15. 大疆RoboMaster技术总监:我是如何成为一名机器人工程师的
  16. 用matlab实现sift算法,sift算法的MATLAB程序
  17. IcedTea6 1.7.3
  18. 10bit灰阶测试图_我可能买的是一块假10bit显示器以及一块假8bit显示器?
  19. 阿里P10赵海平跳槽字节跳动:深度解析跳槽从开始到结束完整流程!
  20. html5 在线 ppt 制作软件,HTML5 幻灯片相册制作工具(HTML5 Slideshow Maker)

热门文章

  1. MSBuild 命令行编译Delphi
  2. Kotlin 协程 (5/7篇) - 响应式编程(冷流) Flow
  3. Office Communicator 2007 with Polycom
  4. Stable-Diffusion|文生图 拍立得纪实风格的Lora 图例(三)
  5. 自动化立体仓库的好处
  6. SpringBatch概述
  7. 基于SSM开发的英语学习系统
  8. cocos2d-x横版格斗游戏教程1
  9. tp6 使用lock_TP5使用Redis处理电商秒杀
  10. Failed to resolve: com.aliyun.ams:alicloud-android-utdid:1.1.5.4的解决办法