redis——优化

news2024/10/6 10:36:09

    • 键值设计
      • bigKey
      • 例子
    • 批处理
      • 单机 pipeline
      • 集群
    • 服务器
      • 持久化
      • 慢查询
      • 安全
      • 内存
    • 集群问题
      • 集群完整性
      • 集群带宽
      • 数据倾斜
      • 客户端性能
      • 命令的集群兼容性
      • lua和事务:集群下不支持

键值设计

  1. 长度 <= 44
    节省内存。string的底层数据结构中,编码格式embstr(连续空间存储),如果大于,则是非连续空间
  2. 不包含特殊字符
  3. 基本格式:[业务名称]:[数据名称]:id。
    可读性强,避免重复,便于管理

bigKey

要求

  • 集合key元素数量<1000
  • 单个key的value<10KB

问题

  • 网络阻塞:因单个key太大,少量QPS,使得带宽堵塞,其他请求无法处理
  • 数据倾斜:对key散列到各个插槽,bigkey所在的机器内存使用率大于其他机器。需要手动重新分配插槽
  • redis阻塞:运算耗时,阻塞主线程
  • cpu压力:key序列化和反序列化耗cpu

扫描

  • redis-cli --bigkeys 扫描全部key。阻塞主线程
  • scan,通过游标,部分迭代,扫描全部key

处理

  • unlink 异步删除
  • 遍历bigkey的所有元素,逐个删除,最后删除bigkey

例子

在这里插入图片描述
在这里插入图片描述
拆分成多个小的hash每个hash一部分数据
eg:原数据1-100万
现:拆为100各hash 每个1万条数据,每个之前加不同前缀
one:somekey-{field-value}
two:somekey-{field-value}

批处理

单机 pipeline

  • mxxx一次处理多个命令(不要过大,否则可能导致网络堵塞),节省网络时间。eg:mset。
  • redis内置操作,更快,将一组命令做成原子性的
  • 只能处理部分数据类型
  • pipeline 各种数据类型都可以
  • 批处理的多个key必须落在一个插槽里。不同插槽在一个连接中无法完成

集群

在这里插入图片描述

服务器

持久化

  • redis做缓存尽可能不开启持久化,在做分布式锁等操作时使用
  • 建议关闭RDB(丢数据),使用AOF。
    RDB适合做数据备份,可手动处理
    更改配置,避免AOF频繁rewrite,避免在rewrite中AOF。
    主线程阻塞,等待AOF结束,但rewrite产生磁盘IO,AOF阻塞,则主线程长时间阻塞
    在这里插入图片描述
  • 部署
    在这里插入图片描述

慢查询

  • 设置阈值,超过阈值时间的都为慢查询
  • 慢查询命令存储在slowlog中
    在这里插入图片描述

安全

内存

内存不足 key频繁被删,qps不稳定,响应时间增长
在这里插入图片描述
info memory 查看内存情况

  • 复制缓冲区:RDB时,有新的数据,放在此处。从节点和主节点的增量更新,在此处的offset比较
  • AOF:AOF刷盘时的新命令
  • 客户端缓冲区:redis连接的客户端,输入输出缓冲区
    输入缓冲区:1G不可变,除非redis主进程堵塞,一般不会溢出
    输出缓冲区:可设置。bigkey/带宽不够可能导致溢出,
    在这里插入图片描述

集群问题

集群完整性

有个别插槽不可用则认为整个集群不可用

集群带宽

多个节点之间互相ping ,同时携带集群和插槽信息
如果节点过多,携带数据会很大,使用带宽变大,导致网络堵塞

  • 避免集群过大 > 1000, 可以拆分为多个集群
  • 不要在一个实例中运行多个redis
  • 设置阈值,心跳检测超过时间认为节点下线,时间越大ping的次数越小,发现故障越完

数据倾斜

客户端性能

redis做集群,客户端需要选择节点

命令的集群兼容性

部分命令不支持集群,只能单机
集群需要使用代码完成,增加复杂度

lua和事务:集群下不支持

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

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

相关文章

LeetCode:455. 分发饼干——贪心算法

&#x1f34e;道阻且长&#xff0c;行则将至。&#x1f353; &#x1f33b;算法&#xff0c;不如说它是一种思考方式&#x1f340;算法专栏&#xff1a; &#x1f449;&#x1f3fb;123 贪心算法是在每个阶段选取局部最优解&#xff0c;最终得到全局最优解的一种思想。贪心算法…

操作系统论文导读(四):Minimizing Memory Utilization of Real-Time Task Sets in Single and…

目录 一、论文核心思想&#xff1a; 二、降低RAM的思想 三、基本的相关定义 四、单处理器方面 五、优化单处理器中的堆栈使用 六、多处理器方面 七、基本的相关调度 八、协议特点 Minimizing Memory Utilization of Real-Time Task Sets in Single and Multi-Processor…

算法记录 | Day29 回溯算法

491.递增子序列 思路&#xff1a; 1.确定回溯函数参数&#xff1a;定义全局遍历存放res集合和单个path&#xff0c;还需要 nums数组startindex&#xff08;int&#xff09;为下一层for循环搜索的起始位置。 2.终止条件&#xff1a;当startindex >len(nums)&#xff0c;r…

C++初阶—vector深度剖析及模拟实现

目录 ➡️0. 前言 &#x1f60a;1.简易框架实现 &#x1f414;1. 无参构造 &#x1f414;2. 容量capacity — 长度size() &#x1f414;3. 动态增长 — push_back—pop_back — reserve &#x1f414;4. 迭代器的实现 &#x1f414;4.front和back的实现 &#x1f60a;2…

你知道C语言的typedef关键字吗?

本篇博客主要讲解C语言中的typedef关键字。typedef的作用是类型重定义&#xff0c;可以理解为给类型起一个别名。我主要从3个方面来讲解&#xff1a; typedef内置类型。typedef自定义类型。typedef和#define的区别。 1.typedef内置类型 typedef可以给一个类型起“别名”。比如…

服务器部署前后端分离项目

服务器部署前后端分离项目 目录服务器部署前后端分离项目一、安装环境安装jdk1、在/usr/local目录下创建jdk文件夹&#xff0c;并将jdk安装包放到/usr/local/jdk包下并解压1.1通过文件传输工具将jdk包上传到服务器上1.2输入解压命令1.3解压完成&#xff0c;生成下面的文件2、配…

学习周报4/9

文章目录前言文献阅读摘要简介方法结论时间序列预测总结前言 本周阅读文献《Improving LSTM hydrological modeling with spatiotemporal deep learning and multi-task learning: A case study of three mountainous areas on the Tibetan Plateau》&#xff0c;文章主要基于…

多种方法解决SLF4J: Defaulting to no-operation (NOP) logger implementation的错误

文章目录1. 复现错误2. 分析错误3. 解决错误4. 解决该错误的其他方法1. 复现错误 今天在编写使用Quartz执行定时任务的方法&#xff0c;如下代码所示&#xff1a; public class QuartzTest {public static void main(String[] args) throws SchedulerException {// 1、创建Sch…

大数据系列——Hive理论

概述 Hive是一个数据仓库管理工具&#xff0c;将结构化的数据文件映射为一张数据库表&#xff0c;并提供类SQL&#xff08;HQL&#xff09;查询功能。由Facebook实现并开源,最后捐赠给Apache发展为顶级项目。 以RDBMS数据库为元数据存储服务&#xff0c; 以Hadoop HDFS来存储…

44.节流与防抖

目录 1 防抖 1.1 概念 1.2 应用场景 1.3 lodash防抖 1.4 手写防抖 2 节流 2.1 概念 2.2 应用场景 2.3 lodash节流 2.4 手写节流 2.5 记录视频上一次的播放位置 1 防抖 1.1 概念 防抖就是让事件触发后延迟n秒后再执行回调函数&#xff0c;在这n秒内如…

014:Mapbox GL添加draw组件,绘制点、线、多边形、删除

第014个 点击查看专栏目录 本示例的目的是介绍演示如何在vue+mapbox中添加draw组件,绘制点、线、多边形,删除所选元素。 直接复制下面的 vue+mapbox源代码,操作2分钟即可运行实现效果 文章目录 示例效果配置方式示例源代码(共78行)相关API参考:专栏目标示例效果 配置方…

用于平抑可再生能源功率波动的储能电站建模及评价(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

项目部署---手工部署项目

手工部署项目 在ideal中开发springboot项目并打成jar包 将jar包上传到Linux服务器 mkdir /usr/local/app 创建目录&#xff0c;将项目jar包放到此目录 ![](https://img-blog.csdnimg.cn/83cf26b151874637a2dfeda7dd05e4cf.jpeg) 启动SpringBoot程序 检查防火墙&#xff0c;…

电脑蓝屏问题排查

最近电脑安装了最新win10&#xff0c;更新最新的驱动以后&#xff0c;开机几分钟后&#xff0c;会蓝屏重启&#xff0c;报错为&#xff1a; DRIVER_POWER_STATE_FAILURE 下载蓝屏分析工具BlueScreenView 问题出在ntoskrnl.exe bing搜索给出了二种解决方案&#xff1a; 1&a…

软件测试应届生社招找工作面试会遇到哪些坑?(全网最全避坑指南)

目录 找工作的最佳时间 是否裸辞 我们要做哪些准备工作 准备一段自我介绍 准备一份pdf简历 社招找工作的渠道&#xff1a;内推 找工作的最佳时间 社招找工作的最佳时间是&#xff1a;金三银四。也就是春节后的三月份和四月份。 为什么是金三银四呢&#xff1f;因为每年的…

HTML5 Geolocation

文章目录HTML5 Geolocation定位用户的位置浏览器支持HTML5 - 使用地理定位处理错误和拒绝在地图中显示结果给定位置的信息getCurrentPosition() 方法 - 返回数据Geolocation 对象 - 其他有趣的方法HTML5 Geolocation HTML5 Geolocation&#xff08;地理定位&#xff09;用于定位…

【SQL Server】数据库开发指南(五)T-SQL 高级查询综合应用与实战

T-SQL 是 SQL Server 的专用版本&#xff0c;提供了一组强大的高级查询功能&#xff0c;包括聚合函数、子查询、连接、视图、窗口函数、共享表达式、递归查询等。这些功能使得 T-SQL 可以轻松处理大量数据&#xff0c;并支持各种复杂的查询和数据操作。本文将介绍 T-SQL 的一些…

Debian 10配置apt源常见问题

目录 一&#xff1a;配置本地apt源没有发现文件 解决方案 二&#xff1a;apt下载bind9报错E: Package bind9 has no installation candidate 方法一&#xff1a; 方法二&#xff1a;更新不报错但是安装依旧报错E: Package bind9 has no installation candidate 一&#xff…

密码加密——加盐算法(两种方式)

加盐算法 文章目录加盐算法手写一个加盐算法spring security密码安全是一件很重要的事情&#xff0c;所以一定要谨慎对待 常见的主要是3种方式 明文MD5加密加盐算法 首先明文肯定是不可取的&#xff0c;在数据库中明文存储密码风险实在是太大了 简单来说&#xff0c;使用MD…

DataGrip连接数据库设置(MySQL、Oracle、SQL Server)

一、DataGrip连接MySQL 1.1 配置信息 1.2 测试查询employees库中departments表信息 employees为测试库&#xff0c;具体来源&#xff0c;参考这篇文章 下载并导入MySQL示例数据库employees 。 1.3 测试查询employees库中employees表信息 二、DataGrip连接Oracle 将SID改为o…