首页 > 数据库 >redis惊群

redis惊群

时间:2022-11-30 12:05:55浏览次数:39  
标签:缓存 过期 任务量 redis 并发 惊群 进程


什么是惊群

首先,我们使用缓存的主要目的就是为了高并发情况下的高可用,换句话说,在使用了缓存的高并发的系统下,如果缓存突然都消失了,会发生什么?首先数据库的压力必然骤增,接着负载迅速升高,响应时间变慢,进程/线程由于响应时间变慢导致集压并剧增,这就是惊群。惊群的后果就是系统不可用甚至宕机。当然这是一个非常极端的例子,但是能很好的解释惊群现象。真实环境中,可能会有个一些页面是访问非常频繁的,如果这些页面的缓存在同一时间或相近的时间突然过期了,在高并发的情况下也会产生惊群现象。

如何避免惊群

首先,避免缓存在同一时间过期;其次,如果缓存过期,不要让所有并发的进程/线程都去触发更新同一缓存数据。Nginx中使用mutex互斥锁解决这个问题,具体措施有使用全局互斥锁,每个子进程在epoll_wait()之前先去申请锁,申请到则继续处理,获取不到则等待,并设置了一个负载均衡的算法(当某一个子进程的任务量达到总设置量的7/8时,则不会再尝试去申请锁)来均衡各个进程的任务量。而redis我们也可以利用锁的机制,来避免惊群!

 

 

源码面前,了无秘密



标签:缓存,过期,任务量,redis,并发,惊群,进程
From: https://blog.51cto.com/zhenghongxin/5898196

相关文章

  • 云小课|云小课教您如何选择Redis实例类型
    阅识风云是华为云信息大咖,擅长将复杂信息多元化呈现,其出品的一张图(云图说)、深入浅出的博文(云小课)或短视频(云视厅)总有一款能让您快速上手华为云。更多精彩内容请单击......
  • Redis基础命令
    Redis基础命令目录Redis基础命令Redis数据结构介绍Redis通用命令String类型key的层级结构Hash类型List类型Set类型SortedSet类型Redis数据结构介绍redis是一个key-value......
  • centos7安装redis
    安装依赖yuminstall-ygccyum-yinstallcentos-release-sclyum-yinstalldevtoolset-9-gccdevtoolset-9-gcc-c++devtoolset-9-binutilssclenabledevtoolse......
  • es,logstash,redis,filebeat
    logstash从redis中拿取数据后会删除reids中的key,就无法在redis中查询到beats输入的值。----filebeat.ymlfilebeat.inputs:-type:tcphost:"0.0.0.0:8000"output.redis:......
  • redis 及其在 python 内的使用
    2022-11-2923:03:17星期二Redis简介    redis是一个Key-Value数据库,Value支持string(字符串),list(列表),set(集合),zset(有序集合),hash(哈希类型)等类型。是一......
  • redis集群之主从复制集群的原理和部署
    最近在复盘redis的知识,所以本文开始希望介绍下redis的集群架构、原理以及部署;本文主要介绍redis的主从复制集群,包括其架构模型,原理,高可用等;一、主从集群的介绍  redis......
  • redis分布式锁-解决同一资源多人获取锁定与释放问题
    业务逻辑大概是,一个螺丝刀,有人在用了,其他人无法使用,等待使用完成后另外一个人才能使用描述下一路遇见的问题分布式情况下需要用到分布式锁(用redis)开启使用螺丝刀时,需要......
  • Redis详解(二)——AOF
    转载Redis详解(二)——AOF前言RDB持久化存在一个缺点是一定时间内做一次备份,如果redis意外down掉的话,就会丢失最后一次快照后的所有修改(数据有丢失)。对于数据完整性要......
  • redis入门
    概述redis是什么Redis(RemoteDictionaryServer),即远程字典服务,是一个开源的使用ANSIC语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多......
  • linux中使用docker创建redis容器镜像
    redis也是一种数据库,创建过程基本与mysql容器差不多,不过语法上稍有不同cd/rootmkdirredisdockersearchredisdockerpullredisdockerimagesdockerrun-p638......