Redis实践经验
优雅的Key结构
Key实践约定:
- 遵循基本格式:[业务名称]:[数据名]:id
- 例:login:user:10
- 长度步超过44字节(版本不同,上限不同)
- 不包含特殊字符
优点:
- 可读性强
- 避免key冲突
- 方便管理
- 节省内存(key是string类型,底层编码包含int、embstr、raw三种。在小于44个字节时使用embstr,embstr采用连续内存空间,内存占用更小。如果超过44个字节,底层编码使用raw)
BigKey
BigKey通常以key的大小和key中成员的数量来综合判定,例如:
- Key本身的数据量过大:String类型的Key,它的值的大小是5M
- Key中的成员数过多:一个ZSET类型的Key,它的成员数量为10000个
- Key中成员的数据量过大:一个HASH类型的Key,它的成员数量虽然只有10000个,但这些成员的value总大小超过100M
推荐值:
- 单个Key的value值小于10kb
- 集合类型的key,建议元素数量小于1000
BigKey的危害:
- 网络阻塞:对BigKey执行读请求时,少量的QPS就可能导致带宽使用率被沾满,从而导致网络阻塞
- 数据倾斜:BigKey所在的Redis实例内存使用率远超其他实例,无法使用数据分片的内存资源达到均衡
- Redis阻塞:对元素较多的hash、list、zset等做运算会耗时较久,使主线程阻塞
- CPU压力:对BigKey的数据序列化和反序列化会导致CPU的使用率上升,影响Redis
持久化配置
- 用来做缓存的Redis实例尽量不要开启持久化功能
- 建议关闭RDB持久化功能,使用AOF持久化
- 利用脚本定期在slave节点做RDB,实现数据备份
- 使用AOF持久化,设置合理的rewrite阈值,避免频繁的bgrewrite
- 配置no-appendfsyns-on-rewrite = yes ,禁止在rewrite期间做aof,避免因AOF引起的阻塞(追求性能可以配置)
部署建议:
- Redis实例的物理机要预留足够内存,应对fork和rewrite
- 单个Redis实例内存上限不要太大,例如4G或8G。可以加快fork的速度、减少主从同步、数据迁移压力
- 不要与CPU密集型应用部署在一起
- 不要与高硬盘负载应用部署在一起。例如:数据库、消息队列
慢查询
Redis在执行时耗时超过某个阈值的命令,称为慢查询
慢查询的阈值可以通过配置指定:
- slowlog-log-slower-than:慢查询阈值,单位是微妙。默认是10000,建议1000
慢查询会被放入慢查询日志中,日志长度有上限。
- slowlog-max-len:慢查询日志(本质是一个队列)的长度。默认是128,建议1000
# 动态配置,重启失效,可在配置文件中永久配置
# 获取配置信息
config get slowlog-log-slower-than
config get slowlog-max-len# 设置配置信息
config set slowlog-log-slower-than 1000
config set slowlog-max-len 1000
命令及安全配置
- Redis设置复杂密码
- 禁止线上使用以下命令:keys、flushall、flushdb、config、set等命令。可以利用 rename-command 禁用
- bind:限制网卡,禁止外网网卡访问
- 开启防火墙
- 禁止使用Root账号启动Redis
- 尽量不要使用默认的端口
内存配置
当Redis内存不足时,可能导致Key频繁被删除、响应时间变长、QPS不稳定等问题。当内存使用率达到90%以上时就需要警惕,并快速定位到内存占用的原因。
| 内存占用 | 说明 |
|---|---|
| 数据内存 | 是Redis最主要的部分,存储Redis的键值信息。主要问题是BigKey问题,内存碎片问题(内存碎片,可直接重启Redis解决) |
| 进程内存 | Redis主进程本身运行需要占用内存;这部分大约在几兆,在大多数生产环境中与Redis数据占用的内存相比,可以忽略 |
| 缓冲区内存 | 一般包括客户端缓冲区、AOF缓冲区、复制缓冲区等。客户端缓冲区又包括输入缓冲区与输出缓冲区两种。这部分内存占用波动较大,不当使用BigKey,可能导致内存溢出 |
Redis查看内存分配状态,命令如下:
# 查看Redis内存相关信息
info memory
# 查看某个模块的内存信息
memory xxx
内存缓冲区常见三种:
- 复制缓冲区:主从复制的repl_backlog_buf,如果太小可能导致频繁的全量复制,影响性能。通过repl_backlog_buf来设置,默认是1mb
- AOF缓冲区:AOF刷盘之前的缓存区域,AOF执行rewire的缓冲区。无法设置容量上限
- 客户端缓冲区:分为输入流和输出流缓冲区,输入缓冲区最大1G且不能设置。输出缓冲区可以设置,如下图:


集群最佳实践
集群完整性问题:
# 默认配置,该配置表明,如果发现任意一个插槽不可用,则整个集群都会停止对外服务
cluster-require-full-coverage yes
# 因此,为了保证高可用特性,把默认配置改成 no
cluster-require-full-coverage no
集群带宽问题:
集群之间会不断的互相Ping来确定集群中其他节点的状态。每次Ping都会携带的信息至少包括:插槽信息、集群状态信息,集群中节点越多,集群状态信息数据量越大,10个节点的相关信息可能达到1kb,此时每次集群互通需要的带宽会非常高。
解决途径:
- 避免大集群,集群节点数不要太多,最好少于1000,如果业务庞大,建议多个集群
- 避免在单个物理机中运行太多Redis实例,建议10个以内
- 配置合适的cluster-node-timeout值
相关文章:
Redis实践经验
优雅的Key结构 Key实践约定: 遵循基本格式:[业务名称]:[数据名]:id例:login:user:10长度步超过44字节(版本不同,上限不同)不包含特殊字符 优点: 可读性强避免key冲突方便管理节省内存&#x…...
分类题解清单
目录 简介MySQL题一、聚合函数二、排序和分组三、高级查询和连接四、子查询五、高级字符串函数 / 正则表达式 / 子句 算法题一、双指针二、滑动窗口三、模拟四、贪心五、矩阵六、排序七、链表八、设计九、前缀和十、哈希表十一、字符串十二、二叉树十三、二分查找十四、回溯十五…...
QUdpSocket 的bind函数详解
QUdpSocket 是 Qt 框架中用于处理 UDP 网络通信的类。bind 函数是此类中的一个重要方法,它用于将 QUdpSocket 对象绑定到一个特定的端口上,以便在该端口上接收 UDP 数据包。 函数原型 在 Qt 中,bind 函数的原型通常如下所示: b…...
[spring] Spring MVC - security(下)
[spring] Spring MVC - security(下) callback 一下,当前项目结构如下: 这里实现的功能是连接数据库,大范围和 [spring] rest api security 重合 数据库连接 - 明文密码 第一部分使用明文密码 设置数据库 主要就是…...
数据库数据恢复—SQL Server数据库由于存放空间不足报错的数据恢复案例
SQL Server数据库数据恢复环境: 某品牌服务器存储中有两组raid5磁盘阵列。操作系统层面跑着SQL Server数据库,SQL Server数据库存放在D盘分区中。 SQL Server数据库故障: 存放SQL Server数据库的D盘分区容量不足,管理员在E盘中生…...
spring security的demo
参考: https://juejin.cn/post/6844903502003568647 Spring Security 5.7.0弃用 WebSecurityConfigurerAdapter-CSDN博客 创建 Spring Security 配置类 WebSecurityConfigurerAdapter已被弃用 package com.cq.sc.security.config;import org.springframework.c…...
无需构建工具,快速上手Vue2 + ElementUI
无需构建工具,快速上手Vue2 ElementUI 在前端开发的世界中,Vue.js以其轻量级和易用性赢得了开发者的青睐。而Element UI,作为一个基于Vue 2.0的桌面端组件库,提供了丰富的界面组件,使得构建美观且功能丰富的应用变得…...
通信协议_Modbus协议简介
概念介绍 Modbus协议:一种串行通信协议,是Modicon公司(现在的施耐德电气Schneider Electric)于1979年为使用可编程逻辑控制器(PLC)通信而发表。Modbus已经成为工业领域通信协议的业界标准(De f…...
LabVIEW优化氢燃料电池
太阳能和风能的发展引入了许多新的能量储存方法。随着科技的发展,能源储存和需求平衡的方法也需要不断创新。智慧城市倡导放弃石化化合物,采用环境友好的发电和储能技术。氢气系统和储存链在绿色能源倡议中起着关键作用。然而,氢气密度低&…...
SpringCloudGateway
作用 统一管理,易于监控安全,限流:在网关层就过滤掉非法信息nginx外部网关,gateway内网nginx可以使用Lua或Kong来增强 概念 id:名称随意uri: 被代理的服务地址。id和uri必填,谓词和过滤器非必填谓词:可以…...
Wireshark 对 https 请求抓包并展示为明文
文章目录 1、目标2、环境准备3、Wireshark 基本使用4、操作步骤4.1、彻底关闭 Chrome 进程4.2、配置 SSLKEYLOGFILE [核心步骤]4.3、把文件路径配置到 Wireshark 指定位置4.4、在浏览器发起请求4.5、抓包配置4.6、过滤4.6.1、过滤域名 http.host contains "baidu.com4.6.2…...
如何在Ubuntu环境下使用加速器配置Docker环境
一、安装并打开加速器 这个要根据每个加速器的情况来安装并打开,一般是会开放一个代理端口,比如1087 二、安装Docker https://docs.docker.com/engine/install/debian/#install-using-the-convenience-script 三、配置Docker使用加速器 3.1 修改配置…...
2.5 C#视觉程序开发实例1----CamManager实现模拟相机采集图片
2.5 C#视觉程序开发实例1----CamManager实现模拟相机采集图片 1 目标效果视频 CamManager 2 CamManager读取本地文件时序 3 BD_Vision_Utility添加代码 3.0 导入链接库 BD_OperatorSets.dllSystem.Windows.Forms.dllOpencvSharp 3.1 导入VisionParam中创建的文件Util_FileO…...
算法简介:什么是算法?——定义、历史与应用详解
引言 在现代计算机科学中,算法是一个核心概念。无论是编程还是数据分析,算法都扮演着至关重要的角色。在这篇博客中,我们将深入探讨算法的定义、历史背景以及它在计算机科学中的地位和实际应用。 什么是算法? 算法是解决特定问题…...
xss攻击
一、xss攻击简介 1、OWASP TOP 10之一,XSS被称为跨站脚本攻击(Cross-site-scripting)2、主要基于java script(JS)完成恶意攻击行为。JS可以非常灵活的操作html、css和浏览器,这使得XSS攻击的“想象”空间特别大。3、XSS通过将精心构造代码(JS)代码注入到网页中,并由…...
Android 性能优化之布局优化
文章目录 Android 性能优化之布局优化绘制原理双缓冲机制布局加载原理检测耗时常规方式AOP方式获取控件加载耗时 布局优化AsyncLayoutInflater方案Compose方案减少布局层级和复杂度避免过度绘制 Android 性能优化之布局优化 绘制原理 CPU:负责执行应用层的measure…...
TCP 握手数据流
这张图详细描述了 TCP 握手过程中,从客户端发送 SYN 包到服务器最终建立连接的整个数据流转过程,包括网卡、内核、进程中的各个环节。下面对每个步骤进行详细解释: 客户端到服务器的初始连接请求 客户端发送 SYN 包: 客户端发起…...
MDA协议
MDA协议通常指消息摘要算法(Message Digest Algorithm),在计算机安全和密码学中被广泛用于数据完整性验证和认证。以下是对MDA协议的详细介绍: 1. 概述 MDA协议是一类哈希函数,用于生成固定长度的消息摘要或哈希值。…...
always块敏感列表的相关报错,
在综合的时候,报错如下 Synthesis synth_1 [Synth 8-91] ambiguous clock in event control ["E:/FPGA/FPGA_project/handwrite_fft/handwrite_fft.srcs/sources_1/new/reg_s2p.v":140] 猜测报错原因(暂时没有时间寻找原因,后续在…...
STM32空闲中断处理串口接受数据
1、检测到空闲线路中断也叫做空闲中断,意思是串口接收完1字节数据后,数据先保持高电平(空闲)的时间超过1字节数据所用的时间,则被判定为空闲中断。 2、HAL库中操作空闲中断的宏是 (1)_HAL_UAR…...
OpenClaw毕业设计利器:Qwen3-14B辅助论文写作与查重
OpenClaw毕业设计利器:Qwen3-14B辅助论文写作与查重 1. 为什么选择OpenClaw做论文助手 去年帮学弟调试毕业论文时,我看着他反复在Word和查重网站间切换,突然意识到:学术写作的本质是信息处理——收集资料、组织逻辑、规避重复&a…...
原神帧率解锁完整指南:5步突破60帧限制,体验丝滑游戏画面
原神帧率解锁完整指南:5步突破60帧限制,体验丝滑游戏画面 【免费下载链接】genshin-fps-unlock unlocks the 60 fps cap 项目地址: https://gitcode.com/gh_mirrors/ge/genshin-fps-unlock 对于追求极致流畅游戏体验的《原神》玩家来说࿰…...
OpenClaw多模型对比:Gemma-3-12b-it与Qwen在自动化任务中的表现
OpenClaw多模型对比:Gemma-3-12b-it与Qwen在自动化任务中的表现 1. 测试背景与实验设计 去年夏天,当我第一次尝试用OpenClaw自动化处理日常办公任务时,面对琳琅满目的大模型选项陷入了选择困难。作为个人开发者,既希望模型足够聪…...
Fish Speech 1.5语音克隆5分钟快速部署:零基础小白也能玩转AI配音
Fish Speech 1.5语音克隆5分钟快速部署:零基础小白也能玩转AI配音 1. 认识Fish Speech 1.5语音克隆技术 Fish Speech 1.5是当前最易上手的开源语音克隆工具之一。想象一下,你只需要录制10秒钟的语音样本,就能让AI用你的声音朗读任何文本——…...
VScode集成openClaw使用OpenClaw Node for VS Code插件(右键没有openClaw)
VSCode 右键没有 OpenClaw,大多是 插件没装对、服务没启动、连接失败、或菜单被隐藏 导致。按下面步骤一步步修复,100% 能出来。一、先确认:你装的是正确插件(最常见坑)OpenClaw 有两个 VSCode 插件,只有这…...
Netskope 安全与网络重塑人工智能
从移动和云计算的进步到人工智能的指数级增长,网络和安全团队都在努力寻找正确的方法,以保持领先地位。这正是 Netskope 创立的初衷,也是我们不断创新、以正确的方式构建技术和业务的原因,从而帮助我们的客户更轻松地应对挑战。在…...
Embedded Coder实战:5分钟搞定PID控制器的C代码生成(附完整配置流程)
Embedded Coder实战:5分钟搞定PID控制器的C代码生成(附完整配置流程) 在工业自动化领域,PID控制器就像一位不知疲倦的调节大师,默默维持着无数设备的稳定运行。想象一下,当你需要将这套经典算法部署到资源有…...
解决GLIBC版本冲突:手把手编译低版本libcrypto.so.1.0.0(附完整脚本)
解决GLIBC版本冲突:手把手编译低版本libcrypto.so.1.0.0(附完整脚本) 在嵌入式开发中,经常会遇到目标设备的GLIBC版本过低,而编译环境中的库文件版本过高导致的兼容性问题。这种问题通常表现为运行时出现类似version G…...
Graphormer效果实测:100个DrugBank分子logP预测MAE=0.28(SOTA水平)
Graphormer效果实测:100个DrugBank分子logP预测MAE0.28(SOTA水平) 1. 模型介绍 Graphormer是一种基于纯Transformer架构的图神经网络,专门为分子图(原子-键结构)的全局结构建模与属性预测而设计。该模型在…...
【RAG】基于 RAG 的知识库问答系统设计与实现
基于 RAG 的知识库问答系统设计与实现1. 系统介绍2. 技术与方法3. 核心功能代码片段3.1 知识库创建3.2 知识对话问答3.3 知识库清空4. 系统运行效果截图4.1 文件上传与知识库创建4.2 知识库问答4.3 文件删除与知识库清空总结项目代码地址:https://github.com/AI-Mee…...
