首页 > 数据库 >redis自学(46)键值设计

redis自学(46)键值设计

时间:2024-06-11 13:54:27浏览次数:24  
标签:key 46 Redis redis BigKey 键值 内存 Key

Redis键值设计

优雅的key结构

Redis的Key虽然可以自定义,到但是最好遵循下面的几个最佳实践约定:

l 遵循基本格式:[业务名称]:[数据名]:[id]

l 长度不超过44字节(长度越小,占用的内存越少)

l 不包含特殊字符

 

 

优点:

① 可读性强

② 避免key冲突

③ 方便管理

④ 更节省内存:key是string类型,底层编码包含int、embstr和raw三种。embstr在小于44字节使用,采用连续内存空间,内存占用更小。

拒绝BigKey

BigKey通常以Key的大小和Key中成员的数量来综合判定,例如:

l Key本身的数据量过大:一个String类型的Key,它的值为5MB。

l Key中的成员数过多:一个ZSET类型的Key,它的成员数量为10000个。

l Key中成员的数据量过大:一个Hash类型的Key,它的成员数量虽然只有1000个但这些成员的Value(值)总大小为100MB。

判断Key的大小

 

 

上面的命令对CPU的使用率比较高

 

 

通过字符串长度判断大小

 

 

集合通过集合中元素数量的方式来衡量

 

推荐值:

l 单个Key的value小于10KB

l 对于集合类型的Key,建议元素数量小于1000

 

BigKey的危害

n 网络阻塞

对BigKey执行读请求时,少量的QPS就可能导致带宽使用率被占满,导致Redis实例,乃至所在物理机变慢

n 数据倾斜

BigKey所在的Redis实例内存使用率远超其他实例,无法使用数据分片的内存资源达到均衡

n Redis阻塞

对元素较多的hash、list、zset等做运算会耗时较久,使主线程被阻塞

n CPU压力

对BigKey的数据序列化和反序列化会导致CPU的使用率飙升,影响Redis实例和本机其它应用

 

如何发现BigKey

n redis-cli-bigkeys

利用reids-cli提供的--bigkeys参数,可以遍历分析所有key,并返回Key的整体统计信息与每个数据的Top1的big key

n scan扫描

自己编程,利用scan扫描Redis中所有key,利用strlen、hlen等命令判断key的长度(此处不建议使用MEMORY USAGE)

 

 

 

 

 

 

n 第三方工具

利用第三方工具,如Redis-Rdb-Tools分析RDB快照分析,全面分析内存使用情况

n 网络监控

自定义工具,监控进出Redis的网络数据,超出预警值时主动告警

 

如何删除BigKey

BigKey内存占用较多,即便是删除这样的key也需要耗费很长时间,导致redis主线程阻塞,引发一系列问题。

Reids3.0及以下版本

如果是集合类型,则遍历BigKey的元素,先逐个删除子元素,最后删除BigKey

Redis4.0以后

Redis在4.0后提供了异步删除的命令:unlink

 

 

恰当的数据类型

如何选择合适的数据类型

 

 

 

 

 

 

标签:key,46,Redis,redis,BigKey,键值,内存,Key
From: https://www.cnblogs.com/bulesea/p/18241924

相关文章

  • Redis面试题、知识点总结,一篇文章让Redis成为面试加分项
    Redis面试题、知识点总结,一篇文章让Redis成为面试加分项前言参与了几次中大厂的面试,你会发现一面时对于八股文的考察也具有侧重点(MySQL=Redis>网络>系统>设计模式>java集合>JVM>spring)本文的目标就是通过这一篇文章让你能在面试时将Redis相关的问题回答漂亮。......
  • Redis之持久化
    Redis持久化Redis是内存数据库,如果不将内存中的数据库状态保存到磁盘,那么一旦服务器进程退出,服务器中的数据库状态也会消失。所以Redis提供了持久化功能!RDB(RedisDataBase)在指定的时间间隔内将内存中的数据集快照写入磁盘,也就是Snapshot快照,它恢复时是将快照文件直接......
  • Redis在微服务架构中的角色:服务间通信与数据共享
    I.引言A.介绍微服务架构的概念和特点 微服务架构是一种设计模式,它将一个大型的单体应用分解成一组小的服务,每个服务都运行在其自身的进程中,独立地进行部署和扩展。这些服务之间通过轻量级的通信机制(如HTTPRESTfulAPI)进行交互,每个服务都围绕一个特定的业务功能进行组......
  • Redis的监控与调优:工具使用和性能提升技巧
    I.引言A.介绍Redis的重要性,以及为什么需要对Redis进行监控和调优 Redis是一种内存数据结构存储系统,它支持多种数据类型,如字符串、列表、集合、哈希表等,并提供了丰富的操作命令。Redis的高性能和灵活性使其在许多场景中都发挥了重要作用,例如,作为缓存降低数据库的访问压......
  • redis-benchmark 基准测试
    我们可以通过redis自带工具redis-benchmark来对redis服务器进行性能测试。我们可以通过简单的redis-benchmark命令直接对本地部署的redis进行性能测试,不用输入任何的参数。默认情况下,redis-benchmark会向redis服务器使用50个并发连接发送共100000个请求。......
  • 牛客周赛 Round 46 题解 C++
    目录 A 乐奈吃冰B 素世喝茶C 爱音开灯D 小灯做题E 立希喂猫F 祥子拆团 A 乐奈吃冰#include<iostream>#include<cstring>#include<algorithm>#include<cmath>#include<queue>#include<set>#include<vector>#include<unordered_map>......
  • 运维系列:redis.conf“ E212: 无法打开并写入文件
    redis.conf"E212:无法打开并写入文件redis.conf"E212:无法打开并写入文件Redis配置文件的E212错误解决方法介绍E212错误的原因E212错误表示无法打开并写入文件,这通常是由于以下几个原因造成的:解决方法1.权限问题2.文件不存在3.文件被锁定4.重启Redis服务流程图......
  • Redis 面试热点(一)
    Redis是一个高性能的内存数据库,广泛应用于缓存、会话管理、实时数据分析等场景。掌握Redis的常见问题和高级用法对于面试非常有帮助。本文将介绍5个Redis面试热点,帮助你在面试中脱颖而出。1.Redis数据类型及其应用场景常见数据类型String(字符串):最基本的类型,可......
  • 【Redis】Redis实现高性能的原因
    Redis作为一个单线程的数据库,能够达到高性能的关键在于其设计上的几个方面。以下是Redis快速的几个主要原因:1.内存存储Redis是一个内存数据库,所有数据都存储在内存中。内存的访问速度远远快于磁盘,所以这使得读写操作非常快速。2.简单的数据结构Redis提供了一些基......
  • 【Redis】Redis的数据过期策略有哪些
    Redis提供了多种数据过期策略,用于管理存储在其中的数据的生命周期。数据过期策略决定了何时以及如何删除过期的数据。主要的策略有以下几种:1.定时删除(TimedDeletion)在设置键的过期时间时,Redis会创建一个定时器,当过期时间到达时自动删除该键。这种方法的优点是删除操作......