Redis高级篇之bigKey理论介绍以及优化

文章目录

  • 0 前言
  • 1.MoreKey案例
  • 2.BigKey案例
    • 2.1多大算BigKey
    • 2.1.1 string和二级结构
    • 2.2 Bigkey危害、产生与发现
      • 2.2.1 bigkey的危害
      • 2.2.2 如何产生
      • 2.2.3 如何发现
  • 2.2.4 大key如何删除
  • 3.BigKey生产调优
    • 3.1 redis.conf配置文件 LAZY FREEING相关说明
  • 结语

0 前言

  bigKey是面试经常问到的问题,而且在实际工作中也会经常出现big问题亟待解决。所以本文将详细描述bigkey的优化过程,以及系统学习redis big可以优化的详细教程。在大厂面试中经常遇到的面试题,本文总结如下:
  1. 阿里广告平台,海量数据里查询某一个固定前缀的key。
  2.小红书,你如何生产上限制 keys* /flushdb/flushall等危险命令以防止阻塞或误删数据?
  3.美团,memory usage命令你用过吗?
  4.BigKey问题,多大算big?你如何发现?如何删除?如何处理?
  5.BigKey你做过调优吗?惰性释放lazyfree了解过吗?
  6.morekey问题,生产上redis数据库有1000W记录,你如何遍历数据? keys *可以吗?

1.MoreKey案例

  1.大批量往redis里面插入2000W测试数据key。
  Linux Bash下面执行,插入100W数据。​ 生成100W条redis批量设置kv的语句(key=kn,value=vn)写入到/tmp目录下的redisTest.txt文件中。

for((i=1;i<=100*10000;i++)); do echo “set ksi v$i” >> /tmp/redisTest.txt ;done;

  ​ 通过redis提供的管道-pipe命令插入100W大批量数据。

	cat /tmp/redisTest.txt | /opt/redis-7.0.0/src/redis-cli -h 127.0.0.1 -p 6379-a 111111 --pipe

  2.某快递巨头真实生产案例新闻
  keys * 这个指令有致命的弊端,在实际环境中最好不要使用。

这个指令没有offset、limit 参数,是要一次性吐出所有满足条件的key,由于redis,是单线程的,其所有操作都是原子的,而keys算法是遍历算法,复杂度是O(n),如果实例中有千万级以上的 key,这个指令就会导致Redis服务卡顿,所有读写Redis 的其它的指令都会被延后甚至会超时报错,可能会引起缓存雪崩甚至数据库宕机。

生产上限制 keys * /flushdb/flushall等危险命令以防止误删误用?通过配置设置禁用这些命令,redis.conf在SECURITY这一项中。
  不用keys *避免卡顿,那该用什么呢?
  ;Scan命令登场

SCAN cursor [MATCH pattern] [COUNT count] [TYPE type]

2.BigKey案例

2.1多大算BigKey

  通常我们说的BigKey,不是在值的Key很大,而是指的Key对应的value很大。具体可以参考阿里开发手册《阿里云Redis开发规范》。
在这里插入图片描述

2.1.1 string和二级结构

  1.string是value,最大512MB但是≥10KB就是bigkey。
  2.list、hash、set和zset,value个数超过5000就是bigkey。
  list:一个列表最多可以包含2^32-1个元素(4294967295,每个列表超过40亿个元素)。
  hash:Redis中每个hash可以存储2^32-1个键值对(40多亿)。
  set:集合中最大的成员数为2^32-1(4294967295,每个集合可存储40多亿个成员.。

2.2 Bigkey危害、产生与发现

2.2.1 bigkey的危害

  主要有危害有如下三点:
  1.内存不均,集群迁移困难。
  2.超时删除,大key删除作梗。
  3.网络流量阻塞。

2.2.2 如何产生

  • 社交类
    明星粉丝列表,典型案例粉丝逐步递增
  • 汇总统计
    某个报表,日月年

2.2.3 如何发现

  • redis-cli --bigkey
    好处
    见最下面总结 给出每种数据结构Top 1 bigkey。同时给出每种数据类型的键值个数+平均大小
    不足
    想查询大于10kb的所有key,–bigkeys参数就无能为力了,需要用到memory usage来计算每个键值的字节数
    redis-cli --bigkeys -a 111111 redis-cli -h 127.0.0.1 -p 6379 -a 111111 --bigkeys

加上 -i 参数,每隔100 条 scan指令就会休眠0.1s.ops就不会剧烈抬升,但是扫描的时间会变长 redis-cli -h
127.0.0.1 -p 7001 --bigkeys -i 0.1

  • memory usage 键
    英文官网:点击此处
    中文官网:点击此处
    计算每个键值的字节数

2.2.4 大key如何删除

  如何删除big请参考《阿里巴巴开发手册》。具体如下:
在这里插入图片描述
  1.String
  一般用del,如果过于庞大使用unlink key删除。
  2.hash
  使用hscan每次获取少量field-value,再使用hdel删除每个field。

  • 基本命令
HSCAN key cursor [MATCH pattern] [COUNT count]
  • 阿里手册
    在这里插入图片描述
     &#81953.list
  • 使用ltrim渐进式逐步删除,直到全部删除
  • 命令
      Redis Ltrim 对一个列表进行修剪(trim),就是说,让列表只保留指定区间内的元素,不在指定区间之内的元素都将被剧除,下标0表示列表的第一个元素,以1表示列表的第二个元素,以此类推。 你也可以使用负数术标,以-1表示列表的最后一个元素,-2 表示列表的倒数第二个元素,以此类推。
    语法
redis 127.0.0.1:6379> LTRIM KEY NAME START STOF
  • 阿里手册
    在这里插入图片描述
      4.set
      使用sscan每次获取部分元素,在使用srem命令删除每个元素。

  • 命令

  • 在这里插入图片描述

  • 阿里巴巴手册

在这里插入图片描述
  5.zset
  使用zscan每次获取部分元素,在使用zremrangebyrank命令删除每个元素.

  • 命令
    在这里插入图片描述
  • 阿里巴巴手册
    在这里插入图片描述

3.BigKey生产调优

3.1 redis.conf配置文件 LAZY FREEING相关说明

  • 阻塞和非阻塞命令

在这里插入图片描述
在这里插入图片描述

  • 优化配置
    在这里插入图片描述

结语

  Bigkey到此已经告一段落了,这部分对我们在开发中使用到Redis避免Bigkey的出现,以及出现了以后如何进行调优有很大的帮助,与此同时,在日常的面试中,如果遇到优化问题完全可以说你做过Redis调优,而不仅仅是JVM调优。这块也算忙完了!!!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

云计算平台上的DevOps实践

文章目录 什么是DevOps云计算平台上的DevOps优势自动化部署弹性伸缩地理分布 实施DevOps的关键组件版本控制系统持续集成/持续交付工具配置管理工具监控和日志管理 实践案例使用AWS CodePipeline进行持续集成/持续交付利用AWS Auto Scaling实现弹性使用AWS CloudFormation进行基…

【小白学机器学习29】 概率统计与图形 ( hist, bar, pie , box ,scatter ,line)

目录 1 频度/次数 1.1 频度统计表&#xff1a;频度分布表 1.2 频数分布图直方图 histogram / hist 1.3 对比&#xff0c;柱状图 bar graph /column chart 2 饼图 pie chart 2.1饼图特点 3 南丁格尔玫瑰图 4 茎叶图 stem-and-leaf display 5 箱型图 box plot 6 …

Zookeeper分布式锁实现

1、zk分布式锁的实现原理 Zookeeper 就是使用临时顺序节点特性实现分布式锁的&#xff0c;官网。 获取锁过程 &#xff08;创建临时节点&#xff0c;检查序号最小&#xff09;释放锁 &#xff08;删除临时节点&#xff0c;监听通知&#xff09; 1_获取锁过程 1、当第一个客…

Kafka社区KIP-500中文译文(去除ZooKeeper)

原文链接&#xff1a;KIP-500: Replace ZooKeeper with a Self-Managed Metadata Quorum - Apache Kafka - Apache Software Foundation 译者&#xff1a;关于Kafka3.x版本最大的一个变化即是解除了对ZooKeeper的依赖&#xff0c;而本文的作者是大神Colin&#xff0c;他高屋建瓴…

clickhouse运维篇(二):多机器手动部署ck集群

熟悉流程并且有真正部署需求可以看一下我的另一篇简化部署的文章&#xff0c;因为多节点配置还是比较麻烦的先要jdk、zookeeper&#xff0c;再ck&#xff0c;还有各种配置文件登录不同机器上手动改配置文件还挺容易出错的。 clickhouse运维篇&#xff08;三&#xff09;&#x…

我的电视 左侧列表内置版 | 非常高清,频道丰富的电视直播应用

我的电视是一款专注于电视直播的应用程序&#xff0c;提供丰富且全面的电视频道&#xff0c;包括央视及各大卫视。无论您是想看新闻、体育、电影还是综艺节目&#xff0c;都可以在这里找到。应用支持高清画质播放&#xff0c;确保流畅无卡顿的观看体验。简洁的界面设计和智能推…

Android开发教程viewpager2点击指示标也能切换

Android开发教程viewpager2点击指示标也能切换 viewpager2的使用范例&#xff0c;关键是点击指示标也能切换 一、思路&#xff1a; 用viewpager2加两个imageview 二、效果图&#xff1a; 三、关键代码&#xff1a; public class MainActivity extends AppCompatActivity {…

荣耀独立四周年:以己之名,终至海阔天空

“多少次&#xff0c;迎着冷眼与嘲笑&#xff0c;从没有放弃过&#xff0c;心中的理想……” 10月30日晚&#xff0c;原Beyond成员黄贯中充满激情的《海阔天空》歌声&#xff0c;在荣耀Magic7系列AI旗舰新品发布会上空飘扬。 如歌词所唱&#xff0c;荣耀独立四年以来&#xf…

pytest高版本兼容test_data[“log“] = _handle_ansi(“\n“.join(logs))错误

一、问题现象&#xff1a; 执行seleniumpytest结束时报: INTERNALERROR> File "D:\workspace\pytestframe\.venv\Lib\site-packages\pytest_html\report_data.py", line 141, in add_test INTERNALERROR> test_data["log"] _handle_ansi(&q…

OpenCV 学习笔记

OpenCV 环境安装 pip install opencv-python -i https://pypi.tuna.tsinghua.edu.cn/simple 显示窗口 cv2.namedWindow 是 OpenCV 库中的一个函数&#xff0c;用于创建一个命名窗口&#xff0c;以便在该窗口中显示图像或进行其他图形操作。这个函数在处理图像和视频时非常…

JavaEE初阶---网络原理/UDP服务器客户端程序

文章目录 1.网络初识2.网络编程2.1TCP/UDP区别介绍2.2UDP的socket api使用2.3UDP协议里面的服务器客户端程序 1.网络初识 网络和计算机类似&#xff1a;都是属于军用》民用&#xff1b; 网络诞生于美苏争霸时期&#xff0c;当时就感觉核战争一触即发&#xff0c;形式非常严峻…

【skywalking】监控 Spring Cloud Gateway 数据

使用Spring Cloud 开发&#xff0c;用Skywalking 监控服务&#xff0c;但是Skywalking 默认是不支持 Spring Cloud Gateway 网关服务的&#xff0c;需要手动将 Gateway 的插件添加到 Skywalking 启动依赖 jar 中。 skywalking相关版本信息 jdk&#xff1a;17skywalking&#x…

开源协议类型及长安链开源协议介绍

截至目前&#xff0c;我国参与国际开源社区协作的开发者数量排名全球第二并推出了众多社区活跃度较高的高质量开源项目&#xff0c;是全球开源生态的重要贡献力量&#xff0c;但在开源治理方面我国还处于发展初期&#xff0c;大部分开发者对开源的印象还限于开放代码、免费使用…

胡壮麟《语言学教程》第五版PDF英文版+中文版翻译

胡壮麟《语言学教程》中文版&#xff1a;https://pan.quark.cn/s/9491130ec572 《语言学教程》&#xff08;英文版&#xff09;是一部经典的语言学教材&#xff0c;自 1988 年面世以来&#xff0c;被众多高校广泛采用&#xff0c;长销不衰。该教材自出版以来不断修订&#xff…

AI产品经理实战手册:策略、开发与商业化指南

通过《AI产品经理手册》&#xff0c;将可以了解不同类型的AI&#xff0c;如何将AI整合到产品或业务中&#xff0c;以及支持创建AI产品或将AI集成到现有产品所需的基础设施。熟悉实践管理AI产品开发流程、评估和优化AI模型&#xff0c;以及应对与AI产品相关的复杂伦理和法律问题…

31.安卓逆向-抓包-实战4

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 内容参考于&#xff1a;图灵Python学院 本人写的内容纯属胡编乱造&#xff0c;全都是合成造假&#xff0c;仅仅只是为了娱乐&#xff0c;请不要盲目相信。第一…

FMC ADDA子卡 2 通道 14bit 2 通道 3GS/s ADC +16bit 2 通道 12.6GS/s DAC AD9208/AD9172/AD9689

14bit 2 通道 3/2.6/2GS/s ADC 16bit 2 通道 12.6GS/s DAC FMC AD/DA 子卡 是一款高分辨率、高采样率的 ADCDAC FMC 子板。它同时支持 2 路 14 位 3.0/2.6/2.0GS/s 的 A/D 通道输入和 2 路 16 位 12.6GS/s 的 D/A 通道输出&#xff0c; 全功率模拟 -3dB 输入带宽可达 9GHz。A 为…

红米k50电竞版修复“NV损坏” 刷写工程固件操作步骤解析 去除校验电阻图示

Redmi K50电竞版。机型代码:ingres,高通 骁龙8 Gen1。八核处理器。适用于以下型号的小米机型:21121210C, 21121210G,国外型号称为POGO F4 GT。 通过博文了解 1💝💝💝-----此机型工程固件的资源刷写注意事项 2💝💝💝-----此机型刷写工程固件预览界面 3💝�

CSRF与SSRF

csrf(跨站请求伪造)的原理: csrf全称是跨站请求伪造(cross-site request forgery)&#xff0c;也被称为one-click attack 或者 session riding scrf攻击利用网站对于用户网页浏览器的信任&#xff0c;劫持用户当前已登录的web应用程序&#xff0c;去执行分用户本意的操作。 利…

2024版最新Metasploit安装及使用教程(非常详细)从零基础入门到精通,看完这一篇就够了。

通过本篇文章&#xff0c;我们将会学习以下内容&#xff1a; 1、在Windows上安装Metasploit 2、在Linux和MacOS上安装Metasploit 3、在Kali Linux中使用 Metasploit 4、升级Kali Linux 5、使用虚拟化软件构建渗透测试实验环境 6、配置SSH连接 7、使用SSH连接Kali 8、配…