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

Redis的性能优化一些方案

Redis性能优化

客户端优化

  • Pipeline批量操作
  • 连接池的应用

设置合理的淘汰机制

  • 设置合理的内存大小
  • 设置合理的过期时间 (设置的太久,久而久之内存空间不够用了,设置的太短,key失效就会频繁的出现淘汰策略)
  • 选择合适的淘汰策略

key与value的优化

Key设计

  • 可读性和可管理性,以业务名(或数据库名)为前缀(防止key冲突),用冒号分隔,比如 业务名:表:id
  • 简洁性,保证语义的前提下,控制key的长度,当key较多时,内存占有也不容忽视
  • 不要包含特殊字符,比如:包含空格、换行、单双引号以及其他转义字符

Value设计

  • 拒绝Bigkey(防止网卡流量、慢查询),string类型控制在10kb以内,hash、list、set、zset元素个数不要超过5000。
  • 选择合适的数据类型
  • 控制key的生命周期(设置有效时间),redis不是垃圾桶

BigKey的优化

什么样的Key才算是Big Key呢?

一般情况下,当key的值大于10Kb时就可以算是Big Key了。如下场景都是可能遇到Big key,比如:

  • 粉丝列表
  • 统计数据,比如PV或者UV统计
  • 使用不当的数据缓存,比如通过String保存序列化后的用户数据等

出现了Big Key你也不用非常紧张,因为某些场景下不得不使用,下面我们看下如何进行发现与优化

发现Big Key

常规做法:redis-cli-bigkeys

优点:简单的扫描,不阻塞服务

缺点:信息量太少了 (只能看到元素的个数)

客户端访问cli

#无密码
./redis-cli --bigkeys

#有密码
./redis-cli -a 123456 --bigkeys

会返回两部分的内容,分别是: 上半部分的“扫描部分” 下面的是“统计部分”。
在这里插入图片描述

扫描区:会扫描当前redis最大的Key,(注意:但是并不代表它就是BigKey) ,只是告诉你当前环境最大的Key是比较大的。

比如上面的user:sign:202206 占了1个字节 。

Redis4.0之后的memory usage

命令 memory usage 给出
在这里插入图片描述
一个key和它值在RAM中占有的字节数,返回的结果是key的值以及为管理该key分配的内存总字节数。

所以查询Big key的手段就可以使用脚本进行查询,大概思路就是时使用scan游标查询key,然后使用memeory usage key 获取这个key与value的字节数,这样就能很方便的得出结论进行优化

相关文章:

  • 你可能不知道的CSS特征查询
  • 【pygame】之小球基础
  • C++ Reference: Standard C++ Library reference: C Library: cstdarg: va_arg
  • Eclipse技巧(一):快速定位文件的层级位置 | 快速查找文件在工程根目录的位置
  • 汇编笔记[04][内存寻址方式]
  • 开发行业门槛越来越高,Android 开发者的未来之路到底在哪里?
  • Java如何为函数定义一个可变长度的参数呢?
  • 【数字设计】哲库科技_2023届_笔试面试题目分享
  • Java中this关键字的相关说明
  • (附源码)计算机毕业设计SSM基于java的云顶博客系统
  • ARM 指令流水线
  • 天冷就要大口吃肉肉~python采集周边烤肉店数据【附代码】
  • 网络地址转换(NAT)(二)
  • 【目标检测】56、目标检测超详细介绍
  • 【PyTorch深度学习项目实战100例】—— 基于RNN实现微博热点新闻分类 | 第27例
  • 【附node操作实例】redis简明入门系列—字符串类型
  • Bootstrap JS插件Alert源码分析
  • bootstrap创建登录注册页面
  • export和import的用法总结
  • gf框架之分页模块(五) - 自定义分页
  • IE报vuex requires a Promise polyfill in this browser问题解决
  • JS进阶 - JS 、JS-Web-API与DOM、BOM
  • KMP算法及优化
  • Laravel 菜鸟晋级之路
  • Linux编程学习笔记 | Linux多线程学习[2] - 线程的同步
  • oldjun 检测网站的经验
  • RxJS: 简单入门
  • scala基础语法(二)
  • Spring核心 Bean的高级装配
  • Traffic-Sign Detection and Classification in the Wild 论文笔记
  • windows下mongoDB的环境配置
  • 个人博客开发系列:评论功能之GitHub账号OAuth授权
  • 用Visual Studio开发以太坊智能合约
  • 正则表达式
  • 《天龙八部3D》Unity技术方案揭秘
  • $ git push -u origin master 推送到远程库出错
  • $.ajax()
  • (175)FPGA门控时钟技术
  • (32位汇编 五)mov/add/sub/and/or/xor/not
  • (6)STL算法之转换
  • (C++)八皇后问题
  • (cos^2 X)的定积分,求积分 ∫sin^2(x) dx
  • (Matlab)使用竞争神经网络实现数据聚类
  • (webRTC、RecordRTC):navigator.mediaDevices undefined
  • (二)windows配置JDK环境
  • (附源码)计算机毕业设计SSM基于健身房管理系统
  • (三分钟)速览传统边缘检测算子
  • (算法)Game
  • (算法)前K大的和
  • (五)网络优化与超参数选择--九五小庞
  • (一)ClickHouse 中的 `MaterializedMySQL` 数据库引擎的使用方法、设置、特性和限制。
  • (转)可以带来幸福的一本书
  • .cfg\.dat\.mak(持续补充)
  • .NET Core 控制台程序读 appsettings.json 、注依赖、配日志、设 IOptions
  • .NET 解决重复提交问题