Redis高可用高性能缓存的应用系列06 - 热Key,大Key,并发竞争解决方案

news2024/12/23 13:35:02

概述

终于迎来了Redis系列的尾声,本文针对Redis常遇到的热Key,大Key,并发竞争解决方案进行介绍。

热Key

什么是热key?当一个key的访问量明显大于其他key的时候,他就可以被称为热key。

热Key带来的问题

  • 热key占用大量的CPU资源,使其效率降低,影响其他业务
  • 热key所在的节点访问量大,容易造成物理网卡瓶颈
  • 超出redis承受能力后,容易造成击穿,这时大量访问打到数据库上造成数据库瓶颈

解决办法:

  • 对热key根据一定的规则,增加后缀,让它变成好几个key,分散到不同的节点中,减少一个节点的压力,他也有一定的问题,比如数据的一致性问题。更新一个key变成更新多个,业务代码也要修改,增加工作量。
  • 对为热key单独做集群,他们会有独立的热点key 做redis集群,和全量redis隔离。
  • 本地缓存,客户端本地对热key进行收集做缓存,比如浏览器的localstorage,安卓ios自己的数据库,然后设置一个比较短的过期时间,比如1分钟,用来解决更新问题。

大key

什么是大Key?(Redis客户端提供了bigkeys命令来查找大key)

  • string中的数据大于10k
  • list set zset 中的数据个数大于5000个

删除大key时会造成阻塞,怎么删除大key?

  • 根据实际业务时间,在低访问时间段删除
  • list set zset hash可以分批次删除
  • 使用unlink代替del命令,unlink是放入异步的线程中不会阻塞主线程的命令

并发竞争

多个客户端同时并发写一个key,本来应该先到的操作,因为某些原因后到了,导致数据出错。

解决方案:

1.利用分布式锁,确保同一时间只有一个系统再操作某一个Redis Key ,其他系统不能操作

2.利用时间戳,当时间戳最新时修改Redis key ,当时间戳比较旧时,忽略操作。

ZooKeeper

  • ZooKeeper主要服务于分布式系统,可以用它来做,统一配置管理,统一命名服务,分布式锁,集群管理。
  • ZooKeeper的目标就是封装好复杂易出错的关键服务,将简单易用的接口和性能高效、功能稳定的系统提供给用户。

ZooKeeper 节点

ZooKeeper 可以看成是树状结构,它的节点是znode

  • 持久节点,默认节点类型,创建节点的客户端与ZooKeeper断开链接以后,节点仍然存在
  • 持久节点顺序节点,再创建节点时,ZooKeeper会根据节点的创建时间,对节点进行编号
  • 临时节点,创建节点的客户端与ZooKeeper断开链接以后,节点就会被删除
  • 临时顺序节点,创建节点时,ZooKeeper会根据节点创建时间,对节点进行编号,创建节点的客户端与ZooKeeper断开链接以后,节点就会被删除。

惊群效应

惊群效应就是,给一堆睡觉的鸟群(羊群、牛群都行,随你高兴)中,扔一颗石子,结果就是会惊醒这一群的鸟,这就是所谓的惊群效应。

对应到并发编程中,当多个线程阻塞到相同资源上(比如锁)时,当这个资源ready后,资源就绪的信号唤醒了所有阻塞到这个资源上的所有线程。

在并发编程中,当有多个线程/进程争抢同一资源,因资源不足而被阻塞的时,当阻塞事件解除后,如果唤醒了所有阻塞在该事件上的所有线程/进程,那就触发了惊群效应。

ZooKeeper的解决

ZooKeeper利用临时顺序节点解决高并发中的惊群效应,步骤如下:

redis_06.png

1.创建临时的顺序节点
2.判断是不是最小节点
3.是最小的,获得锁,否则监听上面的节点
4.释放锁后,后面的监听节点处理

这个朋友写的非常好,实现的过程我就不在这里叙述了[PHP+zookeeper实现分布式锁,点击跳转]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/449594.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

黑马在线教育数仓实战7

1. hive的相关的优化 1.1 hive的相关的函数(补充说明) if函数: 作用: 用于进行逻辑判断操作语法: if(条件, true返回信息,false返回信息) 注意: if函数支持嵌套使用 nvl函数: 作用: null值替换函数格式: nvl(T value, T default_value) COALESCE函数 作用: 非空查找函数:格式…

Windows安装GPU环境CUDA、深度学习框架Tensorflow和Pytorch

Windows安装GPU环境CUDA、深度学习框架Tensorflow和Pytorch 1、未安装CUDA使用tensorflow报错 import tensorflow as tf2022-03-06 15:14:38.869955: W tensorflow/stream_executor/platform/default/dso_loader.cc:60] Could not load dynamic library cudart64_110.dll; dl…

Django | 一文完美解决admin增加新用户只有用户名密码和确认密码的问题

文章目录 如图所示,下面给出解决方案: 如果您使用 使用 Django 默认的后台管理界面添加用户时,只看到了三个字段(通常是 username、password和 repassword),那么可以通过定义 add_fieldsets 属性来增加更多…

【JUC】原子操作类

【JUC】原子操作类 文章目录 【JUC】原子操作类1. 原子操作类1.1 基本类型原子类1.2 数组类型原子类1.3 引用类型原子类1.3.1 AtomicReference1.3.2 AtomicStampedReference1.3.3 AtomicMarkableReference 1.4 对象的属性修改原子类 1. 原子操作类 原子操作类如下所示&#xf…

【Linux】进程间通信 --- 管道 共享内存 消息队列 信号量

等明年国庆去西藏洗涤灵魂,laozi不伺候这无聊的生活了 文章目录 一、进程间通信1.什么是通信?(IPC)2.为什么要有通信?(多进程协同)3.如何进行通信? 二、基于文件系统的管道通信1.通信…

acwing17给了一个头节点,从尾到头输出链表的元素,顺便练练容器

方法一 建立一个数组,从头到尾遍历一遍链表,然后将链表的每个元素的值赋给数组 犯了一个错误 新建的vector容器是一个可变长的数组,要想像数组下标那样访问前提是这个下标所指向的元素得存在,这也就跟那个声明一维数组得写出长度来…

rk3568 适配摄像头 (CIF协议)

rk3568 适配摄像头 (CIF协议) 在RK3568处理器中,支持CIF协议的摄像头可以通过CSI接口连接到处理器,实现视频数据的采集和处理。同时,RK3568还支持多种图像处理算法和编解码器,可以对采集到的视频数据进行实时处理和压缩&#xff…

[Golang实战] 带你入手gin框架使用,以项目为例

😚一个不甘平凡的普通人,致力于为Golang社区和算法学习做出贡献,期待您的关注和认可,陪您一起学习打卡!!!😘😘😘 🤗专栏:算法学习 &am…

Dear ImGui结合CMake实现基于GLFW和OpenGL3的入门级hello world代码

Dear ImGui结合CMake实现基于GLFW和OpenGL3的入门级hello world代码 如需转载请标明出处:https://blog.csdn.net/itas109 技术交流:129518033 环境: OS: windows 10 / Ubuntu 22.04 imgui: 1.89.5 glw: 3.3.8前言 Dear ImGui 是一个 用于…

alibaba arthas的新人上手教程

背景 Arthas 是Alibaba开源的Java诊断工具。 github开源地址:GitHub - alibaba/arthas: Alibaba Java Diagnostic Tool Arthas/Alibaba Java诊断利器Arthas 上手教程 1.下载arthas,并测试运行demo curl -O https://arthas.aliyun.com/arthas-boot.j…

高防IP的定义与作用

随着网络技术的发展,网络攻击的频率和威力不断升级,对企业和个人的网络安全造成了巨大风险。于是,高防IP作为一种网络安全防护工具应运而生,成为广大用户保障网络安全的重要手段。接下来让我们一起来详细了解下高防IP的定义和作用…

web实验(1)

(1) 应用html和css完成如图所示界面效果。内容相对于浏览器居中,图标见附件disc.jpg。 说明: 内容相对于浏览器居中,图标见附件disc.jpg盒子边框1px solid #ccc,内边距20px文本字体颜色#122e67&#xff…

outlook邮箱pc/mac客户端下载 含最新版

新的 Outlook for Windows or mac 为 Outlook 应用带来了最新功能、智能辅助功能和新的新式简化设计。 你可以根据自己的风格定制它,并使用新的 Outlook for Windows/mac 执行更多操作! 览版,与我们一起开始旅程,并帮助我们塑造新…

SSM整合完整流程

🏠个人主页:shark-Gao 🧑个人简介:大家好,我是shark-Gao,一个想要与大家共同进步的男人😉😉 🎉目前状况:23届毕业生,目前在某公司实习&#x1f…

Django--DRf---序列化器:序列化器嵌套

模型表: from django.db import models# Create your models here.class StudentModel(models.Model):id models.AutoField(primary_keyTrue)name models.CharField(max_length32,verbose_name姓名)age models.SmallIntegerField(verbose_name年龄)class_mate_f…

人人可用的开源数据可视化分析工具-DataEase

DataEase 介绍 DataEase是一种开源的关系型数据库管理系统,旨在帮助用户创建和管理各种类型的数据。它是一种易于使用的工具,适用于各种规模的企业和组织,从个人使用到大型公司使用。 Github 地址:GitHub - dataease/dataease: …

2023年4月份上新的Transformer模型设计系列论文(附下载链接)

来源:投稿 作者:王老师 编辑:学姐 论文1 论文标题: Slide-Transformer: Hierarchical Vision Transformer with Local Self-Attention** 滑动Transformer:具有局部自注意的分层视觉Transformer 论文链接:h…

ChatGPT 克隆方案,开源了!开箱即用

什么是 ChatGPT ChatGPT是一种基于人工智能技术的大型语言模型,它能够理解和处理人类自然语言,并且在回答问题、生成文本和模拟对话等方面表现出色。ChatGPT使用的是GPT-3.5架构,它在训练过程中接触了大量的语言数据,并利用这些数…

机器学习算法系列(四)-- 决策树

机器学习算法之–决策树 最经典的机器学习模型之一,成树型结构,决策树的目的是为了产生一颗泛化能力强,处理未见实例能力强的树,通过特征判断不断分类,基本流程遵循“分而治之”的递归分类策略。 一、算法原理 1.1、特…

《C++程序设计原理与实践》笔记 第17章 向量和自由空间

本章和后面四章介绍C标准库的容器和算法部分(通常称为STL)。本章和后面两张的重点是最常用、最有用的STL容器——向量的设计和实现。 17.1 引言 C标准库中最有用的容器是vector。vector提供了给定类型的元素序列。标准库vector是一个方便、灵活、&…