当前位置: 首页 > article >正文

07-redis性能优化

第七章Redis性能优化7.1 内存优化数据结构选择1. String vs Hash# String存储对象SET user:1001{name:张三,age:25,email:zhangsanexample.com}# Hash存储对象推荐HSET user:1001 name张三HSET user:1001 age25HSET user:1001 emailzhangsanexample.com2. List vs ZSet# List存储有序数据适合简单列表LPUSH recent:itemsitem1LPUSH recent:itemsitem2# ZSet存储有序数据需要排序ZADD leaderboard100user1ZADD leaderboard95user2内存优化技巧1. 使用合适的数据编码# 查看编码OBJECT ENCODING key# String编码# int: 整数# embstr: 短字符串44字节# raw: 长字符串44字节# Hash编码# ziplist: 压缩列表元素少且值小# hashtable: 哈希表元素多或值大# List编码# ziplist: 压缩列表元素少且值小# linkedlist: 链表元素多或值大# quicklist: 快速列表Redis 3.2# Set编码# intset: 整数集合元素都是整数且数量少# hashtable: 哈希表元素多或包含非整数# ZSet编码# ziplist: 压缩列表元素少且分数小# skiplist: 跳跃表元素多或分数大2. 控制数据结构大小# Hash使用ziplist hash-max-ziplist-entries 512 hash-max-ziplist-value 64 # List使用ziplist list-max-ziplist-size -2 # Set使用intset set-max-intset-entries 512 # ZSet使用ziplist zset-max-ziplist-entries 128 zset-max-ziplist-value 643. 使用位操作# 使用Bitmap存储布尔值SETBIT user:1001:features01SETBIT user:1001:features10SETBIT user:1001:features21# 比使用多个String节省空间# SET user:1001:feature:0 1# SET user:1001:feature:1 0# SET user:1001:feature:2 14. 使用共享对象池# 共享对象池配置 # Redis默认会共享0-9999的整数 # 可以通过修改源码调整共享范围内存监控# 查看内存使用情况INFO memory# 关键指标used_memory_human# 已使用内存used_memory_peak_human# 峰值内存used_memory_rss_human# 系统分配内存mem_fragmentation_ratio# 内存碎片率# 查看大keyredis-cli--bigkeys# 查看内存使用redis-cli--memkeys7.2 命令优化避免使用KEYS命令# 不推荐KEYS命令会阻塞RedisKEYS user:*# 推荐使用SCAN命令SCAN0MATCH user:* COUNT100批量操作# 使用MGET替代多次GETMGET key1 key2 key3# 使用MSET替代多次SETMSET key1 value1 key2 value2 key3 value3# 使用HMSET替代多次HSETHMSET user:1001 name张三age25emailzhangsanexample.com# 使用Pipeline批量执行redis-cli--pipeEOF SET key1 value1 SET key2 value2 SET key3 value3 EOF使用Lua脚本-- 原子性执行多个命令localresult{}fori1,100doresult[i]redis.call(GET,key:..i)endreturnresult合理使用过期时间# 设置过期时间SETEX key3600value# 为已有key设置过期时间EXPIRE key3600# 设置精确过期时间EXPIREAT key1704067200避免大key操作# 拆分大Hash# 不推荐HSET big:hash field1 value1 HSET big:hash field2 value2# ...大量字段# 推荐HSET hash:1 field1 value1 HSET hash:2 field2 value2# 拆分大List# 不推荐LPUSH big:list item1 LPUSH big:list item2# ...大量元素# 推荐LPUSH list:1 item1 LPUSH list:2 item27.3 网络优化使用连接池importredisfromredis.connectionimportConnectionPool# 创建连接池poolConnectionPool(hostlocalhost,port6379,max_connections50)# 使用连接池rredis.Redis(connection_poolpool)# 使用连接r.set(key,value)valuer.get(key)减少网络往返importredis# 不推荐多次网络往返rredis.Redis(hostlocalhost,port6379)r.set(key1,value1)r.set(key2,value2)r.set(key3,value3)# 推荐使用Pipelinepiper.pipeline()pipe.set(key1,value1)pipe.set(key2,value2)pipe.set(key3,value3)pipe.execute()使用本地缓存importredisfromfunctoolsimportlru_cache rredis.Redis(hostlocalhost,port6379)lru_cache(maxsize1000)defget_user(user_id):returnr.get(fuser:{user_id})优化TCP参数# TCP backlog tcp-backlog 511 # TCP keepalive tcp-keepalive 300 # TCP缓冲区大小 # 在系统层面配置 # /proc/sys/net/core/somaxconn # /proc/sys/net/ipv4/tcp_max_syn_backlog7.4 配置优化基础配置# 最大客户端连接数 maxclients 10000 # 最大内存 maxmemory 2gb # 内存淘汰策略 maxmemory-policy allkeys-lru # 持久化策略 # 根据需求选择RDB、AOF或混合持久化性能相关配置# 关闭THP # 在系统层面配置 echo never /sys/kernel/mm/transparent_hugepage/enabled # 设置swapiness # 在系统层面配置 sysctl vm.swappiness10 # 文件描述符限制 # 在系统层面配置 ulimit -n 65535慢查询配置# 慢查询阈值 slowlog-log-slower-than 10000 # 慢查询日志长度 slowlog-max-len 128命令统计# 查看命令统计INFO commandstats# 查看热门命令redis-cli--latency7.5 性能监控基础监控# 查看Redis信息INFO# 关键指标# CPUused_cpu_sys# 系统CPU时间used_cpu_user# 用户CPU时间# 内存used_memory_human# 已使用内存used_memory_peak_human# 峰值内存mem_fragmentation_ratio# 内存碎片率# 连接connected_clients# 连接客户端数blocked_clients# 阻塞客户端数# 命令instantaneous_ops_per_sec# 每秒操作数total_commands_processed# 总命令数total_connections_received# 总连接数# 错误rejected_connections# 拒绝的连接数sync_full# 全量同步次数sync_partial_err# 部分同步错误次数延迟监控# 测量延迟redis-cli--latency# 延迟历史redis-cli --latency-history# 延迟分布redis-cli --latency-dist性能分析# 查看慢查询SLOWLOG GET10# 查看命令统计INFO commandstats# 分析热点keyredis-cli--hotkeys监控脚本#!/bin/bash# Redis监控脚本# 获取Redis信息INFO$(redis-cli INFO)# 提取关键指标MEMORY$(echo$INFO|grepused_memory_human|cut-d:-f2|tr-d\r)FRAGMENTATION$(echo$INFO|grepmem_fragmentation_ratio|cut-d:-f2|tr-d\r)OPS$(echo$INFO|grepinstantaneous_ops_per_sec|cut-d:-f2|tr-d\r)CLIENTS$(echo$INFO|grepconnected_clients|cut-d:-f2|tr-d\r)# 输出结果echo内存使用:$MEMORYecho内存碎片率:$FRAGMENTATIONecho每秒操作数:$OPSecho连接数:$CLIENTS# 检查异常if[$(echo$FRAGMENTATION 1.5|bc)-eq1];thenecho警告: 内存碎片率过高fiif[$OPS-gt100000];thenecho警告: 每秒操作数过高fi性能优化建议1. 内存使用定期监控内存使用情况及时清理无用数据合理设置过期时间避免大key2. 命令使用避免使用KEYS命令使用SCAN代替KEYS批量操作使用Pipeline合理使用Lua脚本3. 网络优化使用连接池减少网络往返使用本地缓存优化TCP参数4. 配置优化根据实际需求配置maxmemory选择合适的内存淘汰策略合理配置持久化策略优化系统参数5. 监控告警设置内存使用告警监控慢查询日志跟踪关键性能指标定期分析性能数据

相关文章:

07-redis性能优化

第七章:Redis性能优化 7.1 内存优化 数据结构选择 1. String vs Hash # String存储对象 SET user:1001 {"name":"张三","age":25,"email":"zhangsanexample.com"}# Hash存储对象(推荐) HS…...

第五篇:依赖注入系统(超详细版)

第五篇:依赖注入系统(超详细版) 依赖注入基础概念 什么是依赖注入? 依赖注入的核心优势 依赖注入的工作原理 函数依赖 1. 基础函数依赖 2. 异步函数依赖 3. 带yield的依赖(上下文管理器) 类依赖 1. 基础类依赖 2. 带参数的类依赖 3. 类依赖的实例化方式 依赖的依赖 1. 基…...

java工具:《判断当前时间是否在数据库起止时间范围内,是 ,返回true;否,返回false》

文章目录一、介绍功能说明参数说明返回值实现原理二、代码一、介绍 功能说明 这是一个判断当前时间是否在指定时间范围内的工具方法。方法接收两个 Date 类型的参数(开始时间和结束时间),判断当前的系统时间是否落在这两个时间点之间。 参…...

西门子smart 200 rtu方式通讯四台三菱E700变频器资料 硬件:smart plc...

西门子smart 200 rtu方式通讯四台三菱E700变频器资料 硬件:smart plc.三菱E700变频器,mcgs触摸屏(电脑仿真也可) 功能:指针写法,通过modbus rtu方式,实现对E700变频器通讯控制和监控。 有正反转,停止&…...

未来 5 年,对于程序员群体而言非AI 大模型莫属!

毫不夸张地讲,未来 5 年,对于程序员群体而言,最具潜力与前景的技术发展方向,非AI 大模型莫属! 在行业实践中,华为已_全面布局 Agent 技术_,并将其融入 80% 的新业务系统开发中,无论是…...

ResNet18在MNIST手写数字数据库上的深度学习网络识别及Matlab仿真实验研究

ResNet18深度学习网络的mnist手写数字数据库识别matlab仿真MNIST手写数字识别算是深度学习界的"Hello World"了,不过这次咱们用ResNet18来整点不一样的。别看ResNet本来是给ImageNet设计的,拿来折腾下28x28的小图片还挺有意思。先说说数据准备…...

第十五届蓝桥杯c++B组:宝石组合

蓝桥杯真题&#xff1a;宝石组合#include<bits/stdc.h> // 万能头文件&#xff0c;包含了C所有标准库 using namespace std; // 自定义函数&#xff1a;求三个数的最小公倍数&#xff08;LCM&#xff09; int LCM(int x, int y, int z) {int maxx max(…...

香橙派 5 的 Ubuntu 22.04 安装中文输入法

在 Orange Pi 5 (RK3588S) 的 Ubuntu 22.04 (ARM64) 系统上安装中文输入法&#xff0c;推荐使用 Fcitx5 框架 拼音输入法&#xff08;对 ARM64 支持完善、资源占用低、社区维护活跃&#xff09;。以下是完整步骤&#xff1a;&#x1f527; 安装步骤&#xff08;终端执行&#…...

探索相场锂枝晶:形状、形核与生长的奇妙旅程

相场锂枝晶—形状形核生长枝晶在锂电领域&#xff0c;相场锂枝晶的研究可是个热门话题。锂枝晶的形状、形核与生长&#xff0c;直接关系到锂电池的性能与安全&#xff0c;就像建筑物的基石&#xff0c;影响着整个“锂电大厦”的稳固。 相场法简述 相场法是研究这类问题的得力工…...

《创业之路》-904- 人间清醒:故事在开始时,结局就已注定——从“党指挥枪”到华为“力出一孔”,破解组织分裂的千年宿命

我党成功的关键&#xff1a;在组织架构上&#xff0c;实现了党、政、军领导的分离的情况下&#xff0c;开创性的创造了"党"指挥军、"党"领导政&#xff0c;当党"到连部等制度&#xff0c;用“党”、思想和愿景协同军、政&#xff1b;在利益上&#xf…...

动态规划DP经典例题

一、定义 动态规划&#xff08;Dynamic Programming&#xff0c;简称 DP&#xff09;&#xff0c;一种将答案过程性存储的优化算法。核心就是“空间换时间”&#xff0c;通常可以理解为将算过一遍的答案存起来&#xff0c;下次计算时直接调用&#xff0c;省再次计算的时间。 二…...

交错并联BUCK变换器仿真之旅

交错并联BUCK变换器仿真 输入电压范围&#xff1a;36~70V&#xff1b;输出电压&#xff1a;28.5V&#xff1b;电压电流双闭环PI控制 可 单片机芯片型号&#xff1a;dsPIC33FJ32MC204 仿真平台&#xff1a;proteus8.9&#xff1b;编译软件&#xff1a;MPLAB X IDE在电源管理领域…...

【3GPP LTE】【Release 16】基于R16的eMTC GWUS(Group Wake-Up Signal)简要方案解析

摘要 LTE Cat-M(eMTC)作为物联网主流技术之一,其终端功耗是核心性能指标。3GPP在Rel-15/16中引入了唤醒信号(WUS)及其增强方案——组唤醒信号(GWUS),以进一步降低UE在空闲态下的功耗。本文将从背景原理、协议定义、实现方案到参数配置,系统阐述GWUS的简要技术方案,并…...

高频注入Simulink模型在50r/min工况下的电角度观测对比

此为高频注入simulink模型用于电角度观测。 模型为在d轴注入正弦波电压信号&#xff0c;经过低通&#xff0c;带通滤波器之后得到角度信息。 图一为高频注入观测电角度与实际电角度的对比在50r/min时的工况&#xff0c;图像表明观测电角度与实际电角度几乎重合。高频注入这玩意…...

MySql自用

一、语法 1.左连接 left join ...on... left左边的表的行全保留 2.子嵌套需要给别名 3.基础函数框架 Create Function 函数名(N INT) Returns Int 函数返回值类型 BeginReturn(--函数体); End N INT&#xff1a;入参&#xff0c;参数名为 N&#xff0c;类型为整数 INT&a…...

50个 filter相关的公共函数

这里给你50 个纯 JS、Vue3 通用、可直接复制使用的 filter 过滤工具函数&#xff0c;覆盖业务 99% 场景&#xff0c;包含&#xff1a;基础过滤、搜索、数组、对象、时间、真假值、去重、区间、正则、树形、空值、多条件等。 全部即拿即用&#xff0c;不依赖任何库&#xff01;5…...

ABAQUS有限元分析软件在隧道开挖模型中的应用:从CD法到CRD法、台阶法、双侧壁导坑法、环...

abaqus隧道CD法开挖&#xff0c;CD法开挖模型&#xff0c;step by step&#xff0c;过程演示&#xff1b;abaqus隧道CRD法开挖模型&#xff0c;abaqus隧道台阶法开挖&#xff0c;abaqus隧道双侧壁导坑法开挖&#xff0c;abaqus隧道环形开挖预留核心土法开挖&#xff0c;模型&am…...

Spring全局异常处理拦截器JWT令牌使用

一、全局异常处理使用步骤step1&#xff1a;创建异常处理器类注意&#xff1a;要确保能扫描到异常处理器类| RestControllerAdvice用于标识当前类为REST风格对应的异常处理器 ExceptionHandler(Exception.class)标识处理哪些异常RestControllerAdvice public class ProjectExce…...

手把手教你学Simulink——基于Simulink的滞环电压控制(Bang-Bang)Buck仿真

目录 手把手教你学Simulink ——基于Simulink的滞环电压控制(Bang-Bang)Buck仿真 一、问题背景 二、Buck 电路与滞环控制原理 1. Buck 主电路 2. 滞环控制逻辑 三、Simulink 建模步骤 第一步:搭建 Buck 主电路(使用 Simscape Electrical) 第二步:实现滞环控制器 …...

聊聊 GitHub CLI,以及我为什么不再手动配 SSH 了

传统认证方式到底哪里难受&#xff1f; 说实话&#xff0c;在接触 gh 之前&#xff0c;我一直觉得 GitHub 的认证这块挺烦的。不是说它不能用&#xff0c;而是用起来总有点别扭。 先说用 HTTPS 加令牌这条路。GitHub 要求你去网页端生成一串很长的字符串&#xff0c;复制下来&a…...

RHEL9.7虚拟机部署及后续优化

一、搭建环境前的准备工作首先在搭建环境前将安装包提前解压到电脑D:\RHCSA文件夹(一定不要下载到C盘&#xff01;&#xff01;&#xff01;&#xff09;二、创建新的虚拟机二、RHEL后续优化从阅读模式进入编辑者模式从编辑模式退回阅读模式按ESC键并按住shift&#xff1a;输入…...

前沿科技一——5G/6G

一、概念 1、5G&#xff1a;万物互联的基石 &#xff08;1&#xff09;定义与特点&#xff1a; 5G&#xff0c;即第五代移动通信技术&#xff0c;具有高速率、低时延和大连接的特点。它实现了多种新型无线接入的状态&#xff0c;是真正意义上的通信技术与互联网的融合。 &a…...

手把手教你学Simulink——基于Simulink的主从式多机器人协同搬运控制仿真

目录 手把手教你学Simulink ——基于Simulink的主从式多机器人协同搬运控制仿真 一、问题背景 二、系统建模基础 1. 协同搬运系统结构 2. 运动学约束 3. 动力学耦合 三、主从式控制架构设计 1. 主机器人控制律(阻抗控制) 2. 从机器人控制律(导纳控制) 四、Simuli…...

南北阁Nanbeige 4.1-3B行业方案:数据库课程设计智能辅导系统

南北阁Nanbeige 4.1-3B行业方案&#xff1a;数据库课程设计智能辅导系统 1. 引言&#xff1a;当课程设计遇上AI&#xff0c;会发生什么&#xff1f; 如果你是计算机专业的学生&#xff0c;大概率逃不过“数据库课程设计”这门课。我还记得当年自己做的那个“学生信息管理系统…...

乐高兼容ESP32对讲机:模块化嵌入式音频通信设计

1. 项目概述乐高兼容积木对讲机是一个面向教育与趣味交互场景的嵌入式音频通信系统&#xff0c;其核心设计目标是将专业级无线语音通信能力封装为可拼搭、可扩展、可定制的模块化硬件平台。该项目并非传统意义上的消费级对讲设备&#xff0c;而是一种融合了硬件工程实践、音频信…...

霜儿-汉服-造相Z-Turbo开发环境配置:从零开始搭建Python与PyTorch环境

霜儿-汉服-造相Z-Turbo开发环境配置&#xff1a;从零开始搭建Python与PyTorch环境 想自己动手研究“霜儿-汉服-造相Z-Turbo”这类AI模型的源码&#xff0c;或者想基于它做些二次开发&#xff0c;第一步也是最关键的一步&#xff0c;就是搭建一个稳定、兼容的开发环境。很多朋友…...

springboot基于网络爬虫的热门图书推荐系统

&#x1f345; 作者主页&#xff1a;Selina .a &#x1f345; 简介&#xff1a;Java领域优质创作者&#x1f3c6;、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行交流合作。 主要内容&#xff1a;SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据…...

springboot基于人脸识别的互联网课堂考勤系统

&#x1f345; 作者主页&#xff1a;Selina .a &#x1f345; 简介&#xff1a;Java领域优质创作者&#x1f3c6;、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行交流合作。 主要内容&#xff1a;SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据…...

Qwen2.5-VL-7B-Instruct新手入门:从安装到第一个图文对话

Qwen2.5-VL-7B-Instruct新手入门&#xff1a;从安装到第一个图文对话 1. 环境准备与快速部署 1.1 硬件要求 Qwen2.5-VL-7B-Instruct是专为RTX 4090显卡优化的多模态大模型&#xff0c;需要满足以下硬件条件&#xff1a; 显卡&#xff1a;NVIDIA RTX 4090&#xff08;24GB显…...

AudioSeal Pixel Studio代码实例:Python调用PyTorch实现水印生成与识别

AudioSeal Pixel Studio代码实例&#xff1a;Python调用PyTorch实现水印生成与识别 1. 音频水印技术概述 音频数字水印技术是一种将特定信息嵌入到音频信号中的技术&#xff0c;这些信息对人类听觉系统几乎不可感知&#xff0c;但可以通过专用算法检测提取。AudioSeal是Meta(…...