今晚无聊,躺在床上,在刷技术文章时,看见了一篇关于redis缓存的文章 写的蛮好,这也就引起了我对于redis思考!

不如往深了说 引起了我对于追求探索技术本质的一些思考 平时在网上刷到很多关于redis的文章,我也在项目中经常用到redis这个缓存数据库 记得自己初学redis时 总是纠结技术如果去学 但是随着阅历以及学习能力和经验的提高 自己也对技术也有一些悟出来的道理 或者说是如何学好技术 往后有时间或者哪天心血来潮了写一篇关于自己对于技术的认知

还是进入主题,在网上经常刷到关于redis的文章,自己也经常在项目中用到redis,但是自己从来没有太过深究redis,心里老觉得不得劲 于是今晚就心血来潮了写一篇关于自己对redis的一些思考

这里我就不说redis是干什么的了,如果不知道看下我之前写的redis文章,这些文章中也有官网的内容 因为我也是从官网学的)

1.聊聊redis缓存穿透问题

如何理解缓存穿透呢?就是当请求访问过来时 先去查询redis缓存,如果缓存中没有, 再去查询mysql数据库, 然后mysql数据库返回数据到redis缓存中, redis接收数据并把数据存储起来, 这样当下次请求过来时,服务端就直接查询redis缓存了并返回给客户端,不必再去查询mysql,缓解了数据库压力,并提高了效率

这是我们的正常情况对不对!



但但但但但但但是......有没有想过一个问题,如果是黑客恶意攻击,客户端发起的请求中的数据,我们缓存中不仅没有,就连我们的mysql中也没有! 这下完犊子了 这下客户端只要重复的发送这个请求,所有的请求会经过redis后然后再来请求我们的mysql,因为我们数据库中没有呀,所以查询不到,也没有数据往redis中存),这就是缓存穿透

那么如果是一个黑客恶意发起请求,mysql就有可能在长时间内持续承受大量的请求,mysql这时候心里很苦,很快就会撂挑子不干了,直接宕机,(接下来,整个系统宕机,然后你就抓紧删库跑路吧,(逃,

如果是大型项目的话,这个损失是很大的

那我们就要像羔羊一样任人宰割吗?NONONO,redis还有一个好兄弟,这个好兄弟叫作布隆过滤器

这个好兄弟可以存放大数据量,(偷偷告诉你,存放大数据量是他的优点,但是他也有缺点,就是查询到的结果不一定准确,0代表一定没有,1代表不一定有,布隆过滤器这位redis的好兄弟我这里就不介绍了,只介绍这位好兄弟如何仗义行侠帮助我们的redis

在中间加了这位好兄弟,那么当请求进来后,会首先经过我们的布隆过滤器,这个好兄弟先判断这个数据存不存在,若判断不存在直接丢弃请求,若这个数据存在再去进行redis查询,然后执行下一步,最后响应,有了这位好兄弟,我们就可以讲数据库中所有的查询条件,放入布隆过滤器中,所有的请求先交给这位好兄弟来处理(这位好兄弟是有那么一点不靠谱,但是大体上并不影响



其实还有一种解决方案是把查询到的空值的key缓存起来并设置过期时间,但是会有一种弊端,就是如何发起大量的请求,那岂不是要接收多少空值的key,都要存在redis中,redis是内存数据库,内存不要钱吗?而且遭到恶意攻击,能有多大内存和黑客刚呢?

具体场景具体用法:

  1. 如果空值的key少可以考虑缓存起来
  2. 如果空值的key多并且不重复,还是让布隆过滤器这位好兄弟来拔刀相助比较好

2.聊聊redis缓存雪崩问题

缓存雪崩可以这样理解,雪崩雪崩嘛!这些缓存就像雪一样发生了崩塌,缓存是存在于我们的redis这位好兄弟这里的,这位好兄弟平常管理着这些缓存,加入哪一天这兄弟不高兴了,撒手不干了,宕机),那岂不是这些缓存数据又没了,当请求来临时又要mysql兄弟处理了,mysql兄弟看到这么些请求过来淦它,心里直发怵啊!简直是瑟瑟发抖,造成了结果就是数据库崩溃,系统崩溃 这就是我们缓存雪崩,简单来说redis宕机了



解决方案也很简单,简单粗暴,一个不行来俩甚至更多,一节更比六节强,搭建redis集群然后交给hystrix来监控

3.聊聊缓存击穿问题

缓存击穿这个和缓存穿透字面上有点像,但是区别在于缓存穿透是数据中没有这个key,但是缓存击穿是数据中有这个key,并且我们要把这个key缓存到redis中,

比如淘宝双11,并不是所有的商品都要搞活动,只是一部分搞活动,那么这一部分商品在活动开始时,必然会有大量的用户去抢购,大量的请求),这时候如果我们的数据在mysql中,mysql必然不干了,mysql这位兄弟内存又要骂娘了,那么我们就需要redis来救场,提前把这些热点的key(需要搞活动的商品)缓存到redis中,当活动开始时直接去淦redis,没事redis扛得住,这样就解决了这个问题

但但但但但但是.......如果这个key突然在用户还没抢购完的时候,很妈离谱就过期了!那么完犊子,mysql又要骂娘了

这就是缓存击穿(热点key过期问题)

解决方案:

  1. 热点key竟然要妈离谱过期,我们在设置热点key时让这个bi永不过期就完事了,简单粗暴
  2. 互斥锁,当第一个查询数据库的请求发起时,给缓存中这个数据上锁,其他请求这个key等待,当第一个查询数据库打请求完成后解锁,其他请求直接从缓存中查

关于redis缓存数据库的一些思考的更多相关文章

  1. 快速搭建Redis缓存数据库

    之前一篇随笔——Redis安装及主从配置已经详细的介绍过Redis的安装于配置.本文要讲的是如何在已经安装过Redis的机器上快速的创建出一个新的Redis缓存数据库. 一.环境介绍 1) Linux ...

  2. [技术博客] 用户验证码验证机制---redis缓存数据库的使用

    目录 问题引入 初识redis 实际应用 作者:马振亚 问题引入 在这次的开发过程中,我们的需求中有一个是普通用户可以通过特定的机制申请成为社长.因为只有部分人才能验证成功,所以这个最开始想了两种思路 ...

  3. Django缓存机制以及使用redis缓存数据库

    目录 Django 配置缓存机制 缓存系统工作原理 Django settings 中 默认cache 缓存配置 利用文件系统来缓存 使用Memcache来缓存: 使用Local-memory来缓存: ...

  4. NOSQL中的redis缓存数据库

    NOSQL概述 什么是NOSQL? NoSql(NoSQL=Not Only SQL),意思为"不仅仅是SQL",是一个全新的数据库理念,泛指非关系型的数据库. 为什么需要NOSQ ...

  5. redis缓存数据库及Python操作redis

    缓存数据库介绍  NoSQL(NoSQL = Not Only SQL ),意即“不仅仅是SQL”,泛指非关系型的数据库,随着互联网web2.0网站的兴起,传统的关系数据库在应付web2.0网站, 特 ...

  6. NoSQL:redis缓存数据库

    一 Redis介绍 Redis和Memcached类似,也属于key-value nosql 数据库 Redis官网redis.io, 当前最新稳定版4.0.1 和Memcached类似,它支持存储的 ...

  7. 性能超前,详解腾讯云新一代Redis缓存数据库

    背景 当前内存数据库发展迅速,用户对于存储系统的要求也越来越高,为了满足各类业务场景的需要,腾讯云设计了新一代的内存数据库,不但保留了原来系统的高性能,高可用等特性,同时还兼容了当前流行的Redis原 ...

  8. redis缓存数据库

    redis 介绍 redis是业界主流的key-value nosql 数据库之一.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set( ...

  9. 关于Redis缓存数据库

    将数据存入缓存1.(会先从数据库查数据,数据库没有会从缓存中拿,没有则会从数据库拿.且加入缓存)@Cacheable(name="命名空间",key="#xxx^&quo ...

随机推荐

  1. ElasticSearch入门到筋痛

    1. 什么是ES ES中文网:https://www.elastic.co/guide/cn/elasticsearch/guide/current/index.html ES:是一款基于Lucene ...

  2. 使用dotNET_Reactor4.7加密后的dll在VS2010中无法打包

    1.只要去除加密工具中的反编译选项"Anti ILDASM",再加密就OK了. 2.或者使用VS2008打包也行.

  3. Please commit your changes or stash them before you merge问题解决

    问题描述 error: Your local changes to the following files would be overwritten by merge: xxx/xxx/xxx.c P ...

  4. HLOD System

    1.1 HLOD System简介 首先,HLOD System主要的目标是为了减少Draw Call.然后,进行更多的Batch批处理,从而大大提高渲染性能,减少面数和纹理,这样我们相应地节省了内存 ...

  5. 英语能力考试 All In One

    英语能力考试 All In One 托福,雅思,托业 TOEIC 托业考试 Test of English for International Communication (TOEIC) 国际交流英语 ...

  6. Vue 组件之间通信 All in One

    Vue 组件之间通信 All in One 组件间通信 1. 父子组件之间通信 https://stackblitz.com/edit/vue-parent-child-commutation?fil ...

  7. copyright@xgqfrms

    copyright@xgqfrms copyright & seo ## refs *** <div> <a href="https://info.flagcoun ...

  8. how to change svg polygon size by update it's points in js

    how to change svg polygon size by update it's points in js matrixTransform https://stackoverflow.com ...

  9. Flutter Demo: 径向菜单动画

    video import 'dart:math'; import 'package:flutter/material.dart'; import 'package:vector_math/vector ...

  10. 苏黎世财经对话区块链专家,NGK如何利用时间价值实现自身的垂直扩张?

    近日,苏黎世财经日报联合法兰西金融等多家知名媒体,专访了NGK. 苏黎世财经日报专栏记者玛科尔德表示,随着NGK DeFi的明星代币BGV登上去中心化金融的舞台,它千倍的收益率让生态投资者趋之若鹜. ...