1.缓存雪崩和缓存穿透问题

  1.1缓存雪崩

    简介:缓存同一时间大面积的失效,所以,后面的请求都会落到数据库上,造成数据库短时间内承受大量请求而崩掉。

  解决办法:

     事前:尽量保证整个 redis 集群的高可用性,发现机器宕机尽快补上。选择合适的内存淘汰策略。
     事中:本地 ehcache 缓存 + hystrix 限流&降级,避免 MySQL 崩掉
     事后:利用 redis 持久化机制保存的数据尽快恢复缓存

encache:
  Ehcache是纯java的开源缓存框架,具有快速、精干等特点,是Hibernate中默认的CacheProvider。它主要面向通用缓存、Java EE和轻量级容器,具有内存和磁盘存储、缓存加载器、缓存扩展、缓存异常处理程序。
  
应用场景:

  使用纯java的ehcache作为本地缓存
  Reids 作为远程分布式缓存
  解决redis缓存压力过大,提高缓存速度,以及缓存性能。

redis和Ehcache缓存的区别
  如果是单个应用或者对缓存访问要求很高的应用,用ehcache。
  如果是大型系统,存在缓存共享、分布式部署、缓存内容很大的,建议用redis。

实际工作中使用Ehcache
  我们在项目中使用集中式缓存(Redis或者式Memcached等),通常都是检查缓存中是否存在
期望值的数据,如果存在直接返回,如果不存在就查询数据库然后在将数据库缓存,这个时候如果缓存系统因为某些原因宕机,造成服务无法访问,那么大的量请求直接穿透到数据库,最数据库压力非常大。

这时候我们让ehcache作为二级缓存,当redis服务器宕机后,可以查询ehcache缓存。
这样能够有效的扛住服务器请求压力。
因此, 一般 Redis作为一级缓存, ehcache作为二级缓存。


hystrix :

  简介:在分布式系统中,单个应用通常会有多个不同类型的外部依赖服务,内部通常依赖于各种RPC服务,外部则依赖于各种HTTP服务。这些依赖服务不可避免的会出现调用失败,比如超时、异常等情况,如何在外部依赖出问题的情况,仍然保证自身应用的稳定。Hystrix的目标就是能够在1个或多个依赖出现问题时,系统依然可以稳定的运行,其手段包括隔离、限流和降级等。

服务限流:

  通过线程池+队列的方式,通过信号量的方式。比如商品评论比较慢,最大能同时处理10个线程,队列待处理5个,那么如果同时20个线程到达的话,其中就有5个线程被限流了,其中10个先被执行,另外5个在队列中

服务熔断:

  当依赖的服务有大量超时时,在让新的请求去访问根本没有意义,只会无畏的消耗现有资源,比如我们设置了超时时间为1s,如果短时间内有大量请求在1s内都得不到响应,就意味着这个服务出现了异常,此时就没有必要再让其他的请求去访问这个服务了,这个时候就应该使用熔断器避免资源浪费

服务降级:

  所谓降级,就是当某个服务熔断之后,服务将不再被调用,此时客户端可以自己准备一个本地的fallback(回退)回调,返回一个缺省值。 例如:(备用接口/缓存/mock数据),这样做,虽然服务水平下降,但好歹可用,比直接挂掉要强,当然这也要看适合的业务场景


  1.2缓存穿透

     简介:一般是黑客故意去请求缓存中不存在的数据,导致所有的请求都落到数据库上,造成数据库短时间内承受大量请求而崩掉。
   解决办法: 有很多种方法可以有效地解决缓存穿透问题,最常见的则是采用布隆过滤器,将所有可能存在的数据哈希到一个足够大的 bitmap 中,一个一定不存在的数据被 这个 bitmap 拦截掉,从而避免了对底层存储系统的查询压力。另外也有一个更为简单粗暴的方法(我们采用的就是这种),如果一个查询返回的数据为空(不管是数 据不存在,还是系统故障),我们仍然把这个空结果进行缓存,但它的过期时间会很短,最长不超过五分钟。

Redis 使用过程中遇到的具体问题的更多相关文章

  1. Redis配置过程中的问题

    记录一下配置过程中的坑~~ 当Redis在服务器上安装完成后,get.set没有问题了,接下来在程序中使用看看... 首先 在配置文件redis.conf中,默认的bind 接口是127.0.0.1, ...

  2. redis安装过程中遇到的问题

    正常的 wget http://download.redis.io/releases/redis-3.0.7.tar.gz下载 解压缩 tar -zxvf redis-3.0.7.tar.gz cd ...

  3. Redis使用过程中有哪些注意事项?看看BAT这类的公司是正确使用Redis的!!

    Redis使用过程中要注意的事项 Redis使用起来很简单,但是在实际应用过程中,一定会碰到一些比较麻烦的问题,常见的问题有 redis和数据库数据的一致性 缓存雪崩 缓存穿透 热点数据发现 下面逐一 ...

  4. linux安装和配置 mysql、redis 过程中遇到的问题记录

    linux下部署mysql和redis网上的教程很多,这里记录一下我部署.配置的过程中遇到的一些问题和解决办法. mysql ①安装完成后启动的时候报错 Starting MySQL.The serv ...

  5. linux安装和配置 mysql、redis 过程中遇到的问题记录(转)

    章节目录 mysql redis linux下部署mysql和redis网上的教程很多,这里记录一下我部署.配置的过程中遇到的一些问题和解决办法. mysql ①安装完成后启动的时候报错 Starti ...

  6. 压测过程中,获取不到redis连接池,发现redis连接数高

    说明:图片截得比较大,浏览器放大倍数看即可(涉及到隐私,打了码,请见谅,如果有疑问,欢迎骚扰). 最近在压测过程中,出现获取不到redis连接池的问题 xshell连接redis服务器,查看连接数,发 ...

  7. redis作为缓存场景使用,内存耗尽时,突然出现大量的逐出,在这个逐出的过程中阻塞正常的读写请求,导致 redis 短时间不可用

    redis 突然大量逐出导致读写请求block   内容目录: 现象 背景 原因 解决方案 ref 现象 redis作为缓存场景使用,内存耗尽时,突然出现大量的逐出,在这个逐出的过程中阻塞正常的读写请 ...

  8. Redis 在新浪微博中的应用

    Redis 在新浪微博中的应用 Redis简介 1. 支持5种数据结构 支持strings, hashes, lists, sets, sorted setsstring是很好的存储方式,用来做计数存 ...

  9. redis 在 php 中的应用(List篇)

    本文为我阅读了 redis参考手册 之后编写,注意 php_redis 和 redis-cli 的区别(主要是返回值类型和参数用法) 目录: List(列表) LPUSH LPUSHX RPUSH R ...

随机推荐

  1. Linux—编译安装详解

    编译安装python3 1.python是通过C语言编写,所以在编译安装python3时需要在C语言环境 [root@localhost ~]# yum install -y gcc 2.python ...

  2. Python散列类型和运算符

    集合定义 集合的交 并 差 常见的运算符的用法 字典的定义 字典的 get  items  keys  pop  popitem  update  方法 三种逻辑运算 集合 集合特性 唯一性:不存在两 ...

  3. mysql简单的sql操作语句

    一,常用.简单的SQL操作语句 1.数据库操作: 1)创建数据库: create database database_name: 创建并设置字符编码 create database database_ ...

  4. 配置docker服务器支持远程连接

    操作系统:linux-ubuntu 参考文档:https://cloud.tencent.com/developer/article/1047265 采用上述文档:非安全的连接方式/服务端配置/通常的 ...

  5. CodeForces - 1260C(贪心+思维)

    题意 https://vjudge.net/problem/CodeForces-1260C 有一串砖,凡是r的倍数而不是b的倍数必须涂红,凡是b的倍数而不是r的倍数必须涂蓝,是公倍数则选一个涂.把涂 ...

  6. Firefox 与 geckodriver 版本兼容问题

    打开 python shell,执行以下脚本: from selenium import webdriverdriver = webdriver.Firefox()driver.maximize_wi ...

  7. Requests text乱码

    都在推荐用Requests库,而不是Urllib,但是读取网页的时候中文会出现乱码. 分析: r = requests.get(“http://www.baidu.com“) **r.text返回的是 ...

  8. UTC和GMT什么关系?moment处理世界时问题

    UTC和GMT什么关系? 个人理解,两者基本一样,要说区别,那就是UTC更准确,而GMT误差有点.由于历史原因,以前用GMT,后来发现有些误差,改用UTC 我们可以看到,JS的 Date() 用的是G ...

  9. Docker 简单发布dotnet core项目 文本版

    原文:https://www.cnblogs.com/chuankang/p/9474591.html docker发布dotnet core简单流程 照着步骤来基本没错 但是有几个要注意的地方: v ...

  10. matlab练习程序(贝塞尔曲线)

    下面三个公式分别是一次.二次和三次贝塞尔曲线公式: 通用的贝塞尔曲线公式如下: 可以看出,系数是由一个杨辉三角组成的. 这里的一次或者二次三次由控制点个数来决定,次数等于控制点个数-1. 实现的效果如 ...