Redis-键值设计

Redis-键值设计

1.设置key的规范

  1. 遵循基本格式:【业务名称】:【数据名】:【id】 可读性强,在客户端的情况下使用:如果前缀相同会分目录层级
  2. 长度不超过44字节 string数据结构的三种类型,在44字节之内是embstring 内存占用小
  3. 不包含特殊字符

优点

  • 可读性强
  • 避免key冲突
  • 方便估计案例
  • 更节省内存

2.BigKey

什么是BigKey

在redis中存储的value空间大,导致效率变低。

BigKey的危害
  1. 网络阻塞
    对BigKey执行读请求时,少量的QPS就可能导致带宽使用率被占满,网络速度变慢

  2. 数据倾斜
    BigKey所在的Redis示例内存使用率远超其他示例

  3. Redis阻塞

    对元素较多的hash,list,zset,set做运算会耗时

  4. CPU压力
    对BigKey的数据序列化和反序列化会导致cpu的使用飙升

如何排查BigKey
  1. redis-cli-bigkeys

  2. scan扫描 Java代码示例
    引入pom

    <dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>3.8.0</version> <!-- 替换为最新的稳定版本 --></dependency>
    
    /*** 排查大key**/
    @SpringBootTest
    public class RedisScanBigKey {/*** 字符串的大key*/final static int STR_MAX_LEN = 10 * 1024;/*** 集合的大key*/final static int HASH_MAX_LEN = 500;@Testpublic void scanBigKey() {Jedis jedis = new Jedis("localhost", 6379);int maxLen = 0;long len = 0;// 开始游标,首次调用传入0String cursor = "0";do {// 执行SCAN命令,传入游标、匹配模式(可选)和COUNT(可选)ScanResult<String> scanResult = jedis.scan(cursor);cursor = scanResult.getCursor();// 处理本次扫描返回的元素List<String> list = scanResult.getResult();if (CollectionUtil.isEmpty(list)) {break;}// 遍历for (String key : list) {String type = jedis.type(key);switch (type) {case "string":len = jedis.strlen(key);maxLen = STR_MAX_LEN;break;case "hash":len = jedis.hlen(key);maxLen = HASH_MAX_LEN;break;case "list":len = jedis.llen(key);maxLen = HASH_MAX_LEN;break;case "set":len = jedis.scard(key);maxLen = HASH_MAX_LEN;break;case "zset":len = jedis.zcard(key);maxLen = HASH_MAX_LEN;break;default:break;}if (len >= maxLen) {System.out.printf("大Key的值 : %s, type: %s, length or size: %d %n", key, type, len);}// 检查是否已遍历完所有元素}}while (!"0".equals(cursor));}
    }
    
  3. 第三方工具

  4. 网络监控

如何删除大BigKey

bigkey内存占用较多,即使删除也需要占用非常多的时间,导致redis主线程阻塞

  • redis3.0以下版本:如果是集合类型则遍历bigkey的元素,逐个删除.建议使用scan扫描然后以此删除
  • redis4.0以后:提供了异步删除命令:unlink

3.使用恰当的数据类型

在这里插入图片描述

在这里插入图片描述

/*** 给大key瘦身 拆分成小hash*/@Testvoid smallHash(){Jedis jedis = new Jedis("localhost", 6379);int hashSize = 100;Map<String, String> map = new HashMap<>(hashSize);for (int i = 0; i < 100000; i++) {int k = (i -1) / hashSize;int v = i % hashSize;map.put("key_" + v , "value_" + v);if (v == 0){jedis.hmset("test:small:hash_" + k, map);}}}

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

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

相关文章

【零基础学数据结构】链表

目录 1.链表的概念 ​编辑 2.链表的雏形 ​编辑 3.链表的组成 ​编辑 4.链表代码 4.1创建节点 4.2链表的打印 4.3链表的尾插 4.4链表的头插 4.5链表的尾删 4.6链表的头删 4.7链表的查找 4.8链表在指定位置之前插⼊数据 4.9链表在指定位置之后插⼊数据 4.9-1删除pos节点 4.9…

做抖音小店保证金可以不交吗?不交保证金,会有什么后果?

哈喽~我是电商月月 说到最赚钱的软件&#xff0c;大家第一个想的就是抖音了&#xff0c;很多不想直播&#xff0c;但又想在抖音上赚钱的人就选择了抖音小店 但普通人创业&#xff0c;开店遇到的第一个困难就是类目保证金的缴纳 几千块钱虽然能拿的出来&#xff0c;但怕就怕在…

数据结构 -- 二分查找

本文主要梳理了二分查找算法的几种实现思路&#xff0c;基本概念参考 顺序、二分、哈希查找的区别及联系_生成一个大小为10万的有序数组,随机查找一个元素,分别采用顺序查找和二分查找方式-CSDN博客 1、基本概念 &#xff08;1&#xff09;前提条件&#xff1a;待查找数据必须…

java--包装类

目录 1、包装类的定义 2、意义 3、八大基本类型的包装类 4、转换 5、自动拆箱和自动装箱 6、面试问题&#xff1a;请阐述128陷阱以及出现的原因 1、包装类的定义 把基本类型包装--包装类 2、意义 1、在面向对象中&#xff0c;“一切皆为对象”&#xff0c;但是基本类型不…

手机移动端网卡信息获取原理分析

有些场景我们需要获取当前手机上的网卡信息&#xff08;如双卡双待、Wifi等&#xff09;。本文准备研究一下这块的原理&#xff0c;以便更好的掌握相关技术原理。 1、底层系统接口 getifaddrs 使用 getifaddrs 接口可以达到我们的目的&#xff0c;该接口会返回本地所有网卡的信…

fiddler使用(三)-工具栏介绍

Fiddler是一个强大的网络调试工具&#xff0c;它可以帮助用户捕获HTTP和HTTPS请求和响应&#xff0c;从而进行调试和分析。在Fiddler的用户界面中&#xff0c;工具栏是一个非常重要的组成部分&#xff0c;它提供了许多常用的操作和功能&#xff0c;方便用户进行网络调试。以下是…

3d max快捷键命令大全

文章目录 3dmax快捷键汇总一、主界面快捷键1、菜单快捷键2、主工具栏和浮动工具栏快捷键3、视口快捷键4、关键点和时间控制项快捷键5、视口导航控制项快捷键6、方形菜单快捷键7、虚拟视口快捷键8、次对象快捷键9、层次快捷键10、可编辑网格快捷键11、可编辑多边形快捷键12、NUR…

分组带给了我们哪些?

在我们的班级里&#xff0c;你们可能已经注意到我们最近进行了一项特别的举措——分组学习。你们可能会想&#xff0c;为什么我们要这样做&#xff1f;今天&#xff0c;我想与大家分享一些关于分组学习的见解和想法。请读下面的两个故事。 --- 故事一&#xff1a;亚马逊团队创…

布局香港之零售中小企篇 | 传承之味,迈向数字化经营的时代

随着内地与香港两地经贸合作日渐紧密&#xff0c;越来越多内地消费品牌将目光投向香港这片充满机遇的热土&#xff0c;纷纷入驻香港市场。「北店南下」蔚然成风&#xff0c;其中不乏已在内地市场深耕多年的传统老字号。数字化经营时代&#xff0c;老字号焕新刻不容缓&#xff0…

蓝队面试经验总结

Sql注入 1、sql注入漏洞原理 开发者没有在网页传参点做好过滤&#xff0c;导致恶意 sql 语句拼接到数据库进行执行 2、sql注入分类 联合注入 、布尔盲注 、时间盲注 、堆叠注入 、宽字节注入 、报错注入 3、堆叠注入原理 在 mysql 中&#xff0c;分号 代表一个查询语句的…

Git-常规用法-含解决分支版本冲突解决方法

目录 前置条件 已经创建了Gitee账号 创建一个远程仓库 Git的优点 版本控制 Git 下载 Git的使用 检查Git的是否安装成功 git的常用命令 常用流程 Git 分支 分支流程 Git 远程仓库 远程仓库流程 特殊 可能遇到的问题 前置条件 已经创建了Gitee账号 创建一个远程仓…

求1000以内正整数的平方根(C语言)

一、运行结果&#xff1b; 二、源代码&#xff1b; # define _CRT_SECURE_NO_WARNINGS # include <stdio.h> # include <math.h>int main() {//初始化变量值&#xff1b;int number 0;int result 0;//提示用户&#xff1b;printf("请输入1000以内求平方根的…

【c++leetcode】14. Longest Common Prefix

问题入口 解决方案 class Solution { public:string longestCommonPrefix(vector<string>& v) {string ans "";sort(v.begin(), v.end());int n v.size();string first v[0],last v[n - 1];for(int i 0; i < min(first.size(),last.size()); i){…

密码学 | 椭圆曲线数字签名方法 ECDSA(下)

目录 10 ECDSA 算法 11 创建签名 12 验证签名 13 ECDSA 的安全性 14 随机 k 值的重要性 15 结语 ⚠️ 原文&#xff1a;Understanding How ECDSA Protects Your Data. ⚠️ 写在前面&#xff1a;本文属于搬运博客&#xff0c;自己留着学习。同时&#xff0c;经过几…

树莓派安装Nginx服务结合内网穿透实现无公网IP远程访问

文章目录 1. Nginx安装2. 安装cpolar3.配置域名访问Nginx4. 固定域名访问5. 配置静态站点 安装 Nginx&#xff08;发音为“engine-x”&#xff09;可以将您的树莓派变成一个强大的 Web 服务器&#xff0c;可以用于托管网站或 Web 应用程序。相比其他 Web 服务器&#xff0c;Ngi…

centos8 安装 jenkins

配置centos8 yum源 cd /etc/yum.repos.d mkdir bak mv *.repo bak wget https://mirrors.aliyun.com/repo/Centos-8.repo 安装java11 dnf install java-11-openjdk-devel 启用 Jenkins 源仓库 sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-s…

CentOS7.9上安装Oracle11g详解

目录 一、环境准备1.安装依赖2.查看libaiobaio版本3.修改host&#xff0c;绑定主机名4.关闭selinux 二、安装配置1.创建组、用户2.修改内核参数3.配置Oracle用户参数4.修改/etc/pam.d/login 文件5.修改/etc/profile 文件6.创建数据库相关目录7.安装包上传、解压8.添加环境变量 …

修改element-ui中el-calendar(日历)的样式

效果图如下&#xff1a; <template><div class"dashboard-container"><el-card style"width: 350px; height: auto; border-radius: 8px"><div class"custom-style"><p class"new-data">{{ newDate }}&…

macbook怎么录屏幕视频?两款实用工具推荐!

在数字化时代&#xff0c;录制屏幕视频已成为我们日常生活和工作中不可或缺的一部分。MacBook作为一款广受欢迎的电脑品牌&#xff0c;为我们提供了高效且便捷的屏幕录制方式&#xff0c;可是很多用户不知道macbook怎么录屏幕视频。本文将介绍两种在Mac上录制屏幕视频的方法&am…

OpenCV——SUSAN边缘检测

目录 一、SUSAN算法二、代码实现三、结果展示 OpenCV——SUSAN边缘检测由CSDN点云侠原创&#xff0c;爬虫自重。如果你不是在点云侠的博客中看到该文章&#xff0c;那么此处便是不要脸的爬虫。 一、SUSAN算法 Susan边缘检测是一种经典的边缘检测算&#xff0c;它由Susan Smith…