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.hqwc.cn/news/623389.html

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

相关文章

栈的解释和实现

目录 1.栈的基本概念&#xff1a; 2. 栈的基本功能&#xff1a; 3.栈的实现&#xff1a; 3.1 存储结构&#xff1a;&#xff08;顺序表&#xff09; 3.2 初始化&#xff1a;&#xff08;void StackInit(stack*tmp)&#xff09; 3.3 栈的销毁&#xff1a;&#xff08;void …

ObjectiveC-第一部分-基础入门-学习导航

专题地址:MacOS一站式程序开发系列专题 第一部分:基础入门学习导航 OSX-01-Mac OS应用开发概述:简单介绍下MacOS生态、Xcode使用以及使用Xcode创建app的方法OSX-02-Mac OS应用开发系列课程大纲和章节内容设计:介绍下此系列专题的文章内容组织形式以及此系列专题的覆盖内容…

Midjourney简明教程 - 合集

Midjourney简明教程&#xff08;一&#xff09;&#xff1a;有关Midjourney的基本信息 AI绘画 绘画是人类一门很古老的艺术门类&#xff0c;人类通过实体的器具、画笔、颜色、颜料等反映客观世界和表达主观世界。 而AI绘画则是通过借助就计算机机器学习算法和模型来生成绘画…

Docker篇(三)— Docker的基本操作

目录 镜像操作镜像名称镜像命令案例1-拉取、查看镜像案例2-保存、导入镜像 镜像操作 镜像名称 首先来看下镜像的名称组成&#xff1a; 镜名称一般分两部分组成&#xff1a;[repository]:[tag]。在没有指定tag时&#xff0c;默认是latest&#xff0c;代表最新版本的镜像 如图…

便宜的ov ssl证书推荐

SSL证书是由正规证书颁发机构(CA)颁发的数字证书产品&#xff0c;它可以为网络中明文传输的数据增加一个安全套接层&#xff0c;佳明传输信息&#xff0c;还能对服务器身份进行认证&#xff0c;防止信息传输对象错误。OV企业型SSL证书是一种受到广泛认可的证书类型&#xff0c;…

代码随想录阅读笔记-回溯【分割回文串】

题目 给定一个字符串 s&#xff0c;将 s 分割成一些子串&#xff0c;使每个子串都是回文串。 返回 s 所有可能的分割方案。 示例: 输入: "aab" 输出: [ ["aa","b"], ["a","a","b"] ] 思路 本题这涉及到两个关…

OLAP引擎优缺点简单对比

总结&#xff1a; 数据压缩率Clickhouse好&#xff1b;ClickHouse单表查询性能优势巨大&#xff1b;Join查询两者各有优劣&#xff0c;数据量小情况下Clickhouse好&#xff0c;数据量大Doris好&#xff1b;Doris对SQL支持情况要好&#xff1b;

PHP婚恋小程序开发源码支持微信+公众号+APP

随着社会的发展和人们生活节奏的加快&#xff0c;传统的相亲方式已经不能满足现代人的需求。在此背景下&#xff0c;有人想到通过线上小程序的方式来满足更多的人进行相亲&#xff0c;所以在此情况下&#xff0c;婚恋相亲小程序由此出现。婚恋相亲小程序的功能有会员功能&#…

科技云报道:AI大模型疯长,存储扛住了吗?

科技云报道原创。 AI大模型正在倒逼数字基础设施产业加速升级。 过去一年半&#xff0c;AI大模型标志性的应用相继出现&#xff0c;从ChatGPT到Sora一次次刷新人们的认知。震撼的背后&#xff0c;是大模型参数指数级的增长。 这种数据暴涨的压力&#xff0c;快速传导到了大模…

Web前端-JavaScript

黑马程序员JavaWeb开发教程 文章目录 一、js引入方式1、内部脚本2、外部脚本 二、js基础语法1、书写语法&#xff08;1&#xff09;基本语法&#xff08;2&#xff09;输出语句 2、变量&#xff08;1&#xff09;变量&#xff08;2&#xff09;注意事项 3、数据类型、运算符、流…

利驰软件亮相第二届全国先进技术成果转化大会

4月8日&#xff0c;第二届全国先进技术成果转化大会在苏开幕。省长许昆林出席大会开幕式并致辞。国家国防科工局局长张克俭&#xff0c;省委常委、苏州市委书记刘小涛分别致辞。 本次转化大会由江苏省国防科学技术工业办公室、苏州市人民政府、先进技术成果长三角转化中心主办…

暴力破解密码自动阻断

1 re模块 re 模块是 Python 中用于正则表达式操作的模块。正则表达式&#xff08;Regular Expression&#xff09;是一种强大的文本处理工具&#xff0c;它使用一种特殊的字符序列来表示字符串中的模式&#xff0c;并可以通过模式匹配、查找、替换等操作对文本进行高效处理。 …