展开菜单
首页 精品内容 本月促销 装机必备 Windows PDF教程 macOS软件 IOS软件 Android AI 专题
全部分类

当前位置:

首页 > 编程开发 > Redis键值设计使用的方法是什么

Redis键值设计使用的方法是什么

Redis Assistant
Redis Assistant

Redis Assistant 是一款为Redis设计的高效可视化管理与监控工具,提供多种操作模式,高效处理服务器数据。日常使用里的持续防护和信息管理会更突出,适合把安全控制放进长期使用流程中的场景。

¥19
Windows/macOS/Linux 2026-08-22
正版软件 Windows macOS软件 Linux 数据库管理工具
立即下载

Redis使用中不规范的现象Redis存储的key命名不规范,比较随意;Redis被当成存储库使用,存在数据丢失风险,且无重新加载方案;Redis缓存key,未设置过期时间,缓存低频数据占用大量内存,进而导致服务崩溃;Redis缓存大量bigkey,应用获取时会占用大量网络带宽,删除也容易造成阻塞;Redis客户端使用不当,导致其它客户端连接timeout,原因可能客户端密码错误,且没有使用连接池,大量连接重试导致系统端口资源耗光;Redis客户端命令使用不当,导致大量的慢查询,影响其它应用业务,比如在业

本文目录

      Redis使用中不规范的现象

      • Redis 存储的key命名不规范,比较随意;

      • Redis 被当成存储库使用,存在数据丢失风险,且无重新加载方案;

      • Redis 缓存key,未设置过期时间, 缓存低频数据占用大量内存, 进而导致服务崩溃;

      • Redis 缓存大量big key, 应用获取时会占用大量网络带宽,删除也容易造成阻塞;

      • Redis 客户端使用不当,导致其它客户端连接timeout, 原因可能客户端密码错误,且没有使用连接池,大量连接重试导致系统端口资源耗光;

      • Redis 客户端命令使用不当,导致大量的慢查询,影响其它应用业务,比如在业务高峰期时使用 keys* 或flushall 这样的命令;

      Redis 使用业务场景推荐与建议

      • 高并发场景:热点数据缓存, 可提升系统整体响应速度,降低数据库IO压力 ;

      • 限时场景:利用Redis expire命令设置session过期和续期、手机验证码等;

      • 排行榜: 利用Redis list 和 sorted sets 数据结构能实现各种复杂的排行榜应用;

      • 数据集合操作:利用Redis list、set、sorted set, 方便进行数据计算, 如交集、并集、差集等;

      • 连续签到:可以利用redis的bitmap数据结构实现签到相关的业务;

      • 计数器:利用Redis incr、incrby命令实现api调用次数统计, api限流等场景;

      • 分布式锁:利用 Redis 的 setnx 功能来编写分布式的锁, 典型开源组件比如redisson;

      如何设计出优雅的key

      可以这么说,线上关于redis的性能优化这个问题上,不合理的key的设计经常是引发问题的根因,究其本质,就个人看到的情况来说,大多数同学在对redis使用过程中,对于key的设计几乎是没有什么概念的,因为大多数同学使用的场景就是 key/val ,对应的数据结构就是 字符串key/字符串val;

      稍微对redis有更深入的了解的同学,在进行存储时,可能会知道 key的设计尽量短一点,中间最好有层次感,最好以 : 进行分割 ......

      那么如何才能设计出比较优雅的key呢?下面结合小编实际使用中的经验以及踩过的坑,来具体谈谈;

      一、遵循如下几个最佳实践约定

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

      2. key的长度不超过44字节;

      3. 不要包含特殊字符;

      关于上面几条建议,这样做有如下几点好处:

      • 可读性强,比如当我们设计这样的key结构, order:user:10,一眼看过去就知道这是关于用户订单相关的key;

      • 方便维护管理,不同的应用,或者不同的业务采用不同的前缀,在可视化客户端工具或者命令行中很方便进行key的查找定位;

      • 避免key冲突,避免在使用过程中多个人都用userId这样的值作为key引发的缓存key冲突;

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

      推荐值:

      • 单个key的value小于10KB;

      • 对于集合类型的key,建议元素数量小于1000;

      二、尽量避免bigkey

      1、什么是bigkey呢

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

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

      • Key中的成员数过多:一个ZSET类型的Key,它的成员数量为10,000个;

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

      2、BigKey的危害

      网络阻塞

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

      数据倾斜

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

      Redis阻塞

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

      CPU压力

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

      3、如何发现BigKey

      在安装的机器上执行 redis-cli --bigkeys命令

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

      通过scan扫描

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

      使用第三方工具

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

      使用网络监控

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

      三、使用恰当的数据类型

      正如上面所说,很多初次使用redis的同学,对于很多业务场景,都是一个key/val的简单的结构搞定,而不会深入思考这样做是否合理,或者说这样做以后会不会引发相关的性能方面的问题;

      对于这个问题,从根本上来说,需要深入了解并掌握redis的常用的数据类型,在这个基础上,才能针对不同的业务场景,设计出高效的存储存储结构数据;

      让我们思考一下,如何缓存用户对象列表这样的数据呢?

      • 方案1:key为usrId,value为对象的序列化字符串,数据结构类似下面这样; 

      Redis键值设计使用的方法是什么

      优点:存取方便,简单粗暴,存取时只需要做下json和对象的互转即可;

      缺点:数据耦合,不够灵活,一旦对象新增了字段或删减了字段,缓存重建的成本非常大;

      • 方案2:使用一个list结构,缓存用户ID列表,数据结构如下;

      Redis键值设计使用的方法是什么

      优点:对内存的占用小,操作高效;

      缺点:获取到val之后,需要进一步查库才能得到完整的对象;

      方案3:使用hash结构,缓存对象,数据如下所示;

      Redis键值设计使用的方法是什么

      优点:底层使用ziplist,空间占用小,可以灵活访问对象的任意字段;

      缺点:编码上相对复杂;

      Redis 缓存在实际应用中的使用建议

      • 【推荐】对缓存进行预热。在访问数据前,应先对缓存进行预热,避免大量请求直接进入数据存储层;应根据业务情况划分合适的冷热数据,对热点数据进行预热。如许可授权信息, apikey等;

      • 【推荐】配合使用本地缓存。使用本地缓存能更稳定、更快速地访问到数据,但在分布式架构下,要慎用本地缓存,避免造成服务器节点带状态。同时由于本地缓存直接占用应用服务器的资源,要避免过度占用资源导致应用节点崩溃;

      • 【推荐】缓存变更策略,应先更新数据库,再更新缓存;

      • 【推荐】一次业务调用需要访问多次redis服务端,可采用pipleline或其它批量操作方式;

      • 【推荐】大List,Set,Hash,存储的数量巨大。获得大量元素时延迟较大阻塞其他命令.建议切割成多个小的list,set,hash;

      使用业务规范

      不管是redis,还是其他开发中使用到的中间件,具体到开发使用时,最好都应该提前制定出一套合理的规范,这个规范应该是大多数开发人员认可并在实践中得到检验,且能有效规避一些问题的,一旦指定为规范,应该成为指导内部开发人员日常的规则,这里提如下几点:

      • Redis 应该定位为缓存数据, 不可用于存储大规模数据(不可替代数据库);

      • Redis 适合读多写少场景,如存在高频写入,低频查询场景,则不推荐使用;

      • 在不确定key的存活时间时,最好设置过期时间,控制 key 的生命周期;

      • 应该考虑冷热数据分离,对于查询, 高频次业务查询走Redis,低频查询考虑走数据库;

      • Redis 有数据丢失风险,程序处理数据时,应该考虑数据丢失后能自动从数据库加载并缓存到Redis;

      • 谨慎使用O(N)命令, 如list, set, hash 数据结构操作时, hgetall、lrange、smembers、zrange等并非不能使用,优先考虑使用 hscan、sscan、zscan 代替。

      本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系bd@zhengruan.com
      作者最新文章
      编程开发
      相关文章 更多
      精品专题 更多
      装机必备

      正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

      Windows

      正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

      PDF教程

      正软商城PDF教程频道提供PDF编辑、转换、合并、拆分、压缩及格式处理方法,同时介绍常用PDF软件和工具的使用技巧。

      macOS软件

      正软商城macOS软件专区,精选适用于Mac电脑的办公、设计、影音、效率、开发和系统工具,提供软件功能介绍、macOS兼容版本、正版授权及购买下载服务。

      IOS软件

      正软商城iOS软件专区,精选适用于iPhone和iPad的办公、学习、影音、设计、效率及AI应用,提供功能介绍、适用设备、系统要求和正版获取方式等信息。

      AI

      正软商城AI软件专区,汇集AI写作、AI绘画、AI视频、AI办公、AI编程、AI翻译、智能客服和数据分析等人工智能工具,提供功能介绍、适用平台、收费方式及正版购买信息。

      Mac软件 更多
      Aperty macOS版
      Aperty macOS版

      Aperty 是 Skylum 推出的 AI 人像修图软件,支持自然肤质修饰、瑕疵处理、面部与身体调整、预设及批量同步。

      火山引擎 网页版
      火山引擎 网页版

      火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

      立刻MV 网页版
      立刻MV 网页版

      立刻MV 面向音乐人、内容创作者和品牌团队,帮助用户低成本完成歌曲 MV、歌词视频、AI 分镜、图生视频与最终合成。

      蛙蛙写作 网页版
      蛙蛙写作 网页版

      蛙蛙写作 AI 创作工具,覆盖小说、剧本、文案,一键生成文稿,打通文字转视频全流程,高效解决创作难题。

      讯飞智作 网页版
      讯飞智作 网页版

      讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

      超级简历WonderCV 网页版
      超级简历WonderCV 网页版

      超级简历WonderCV是面向应届生和AI小白的智能求职平台,覆盖简历、面试与职业规划。

      音述AI 网页版
      音述AI 网页版

      音述AI,是一个以“用声音述说故事”为核心的 AI 音乐创作与声音分享社区。

      AionClaw macOS版
      AionClaw macOS版

      AionClaw 是可在桌面端运行的任务型 AI 助手,通过数字专家与技能市场组合办公、创作、数据和开发能力。

      Loomy macOS版
      Loomy macOS版

      Loomy 是科大讯飞推出的桌面 AI 助手,可通过对话、任务与工作目录协助处理办公、内容创作和资料整理。

      AirBuddy 3 macOS版
      AirBuddy 3 macOS版

      AirBuddy 3 是面向 macOS 的蓝牙外设增强工具,可集中查看 AirPods、Beats 与苹果设备电量,提供快速连接、播放控制、电量提醒、桌面小组件和多台 Mac 外设接力等功能。

      AirServer macOS版
      AirServer macOS版

      AirServer macOS版可把 Mac 转换为无线投屏接收端,通过 AirPlay 或 Google Cast 接收手机、平板和电脑画面,并支持多设备同时连接、高清镜像及会话录制,适合家庭娱乐、课堂教学、会议演示和应用展示。

      AnyDesk macOS版
      AnyDesk macOS版

      AnyDesk macOS版是一款适用于远程办公、设备维护和客户支持的远程桌面工具,可连接并操作异地计算机,支持文件传输、无人值守访问、会话权限控制及跨平台协作。

      WINDOWS 更多
      讯飞绘文 网页版
      讯飞绘文 网页版

      讯飞绘文网页版是科大讯飞推出的AI图文创作与内容运营工具,覆盖热点选题、文章生成、稿件校对、智能配图、排版发布和数据复盘等环节,适合自媒体创作者及内容团队在线使用。

      Maya(Autodesk Maya) Windows版
      Maya(Autodesk Maya) Windows版

      Autodesk Maya 是面向影视、电视、动画和游戏行业的专业三维制作软件,集多边形与 NURBS 建模、角色绑定、关键帧和动作捕捉动画、Bifrost 特效模拟、材质开发及 Arnold 渲染于一体,

      Aperty Windows版
      Aperty Windows版

      Aperty 是 Skylum 推出的 AI 人像修图软件,支持自然肤质修饰、瑕疵处理、面部与身体调整、预设及批量同步。

      火山引擎 网页版
      火山引擎 网页版

      火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

      立刻MV 网页版
      立刻MV 网页版

      立刻MV 面向音乐人、内容创作者和品牌团队,帮助用户低成本完成歌曲 MV、歌词视频、AI 分镜、图生视频与最终合成。

      蛙蛙写作 网页版
      蛙蛙写作 网页版

      蛙蛙写作 AI 创作工具,覆盖小说、剧本、文案,一键生成文稿,打通文字转视频全流程,高效解决创作难题。

      讯飞智作 网页版
      讯飞智作 网页版

      讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

      超级简历WonderCV 网页版
      超级简历WonderCV 网页版

      超级简历WonderCV是面向应届生和AI小白的智能求职平台,覆盖简历、面试与职业规划。

      音述AI 网页版
      音述AI 网页版

      音述AI,是一个以“用声音述说故事”为核心的 AI 音乐创作与声音分享社区。

      AionClaw Windows版
      AionClaw Windows版

      AionClaw 是可在桌面端运行的任务型 AI 助手,通过数字专家与技能市场组合办公、创作、数据和开发能力。

      Loomy Windows版
      Loomy Windows版

      Loomy 是科大讯飞推出的桌面 AI 助手,可通过对话、任务与工作目录协助处理办公、内容创作和资料整理。

      AirServer Windows版
      AirServer Windows版

      AirServer Windows版可把电脑变成AirPlay、Google Cast和Miracast无线投屏接收端,适合会议演示、课堂教学及家庭大屏分享。发送设备通常无需另装客户端,并可同时接收和智能排列多个镜像会话。

      即将离开本站
      您即将前往第三方网站,请确认是否继续?