Redis Key 命名规范文档

server/2024/11/27 1:03:19/

开发过程中为确保 Redis 键名的一致性、可读性和易维护性,本规范旨在指导开发团队在使用 Redis 时设计合理的键名格式。


1. 命名格式

采用 模块:子模块:业务描述:标识 的分层格式,明确数据来源和用途。

  • 层次清晰:从全局到具体逐步细化。
  • 唯一性:标识符确保键名在全局范围内唯一。
格式模板:
<module>:<submodule>:<description>:<identifier>
示例:
  • 用户信息:user:profile:id:12345
  • 订单状态:order:status:order_id:98765
  • 商品库存:product:inventory:item_id:67890

2. 具体规范

2.1 小写命名
  • Redis 键名必须使用 小写字母,避免大小写混淆问题。
  • 小写命名与 Redis 社区实践保持一致,方便管理和排查。
2.2 使用冒号分隔层级
  • 使用冒号(:)作为分隔符表示逻辑层次关系。
  • 每个部分表述一个独立的含义,冒号分隔便于阅读和自动化解析。
2.3 标识符命名
  • 唯一标识符部分(如 id, order_id 等)应明确表达其意义。
  • 使用 下划线(_ 分隔复合单词,而非驼峰命名(camelCase)。

3. 数据类型扩展命名

针对不同的数据结构(如 list, set, hash),可以在业务描述部分或标识符后添加类型信息:

数据类型格式示例
字符串(String)user:profile:id:12345
列表(List)chat:messages:list:room_id:56789
哈希(Hash)user:profile:hash:id:12345
集合(Set)product:categories:set:item_id:67890
有序集合(ZSet)leaderboard:score:zset:game_id:11111

4. 时间敏感型键名

对于有时间属性或需要自动过期的数据,可在键名中包含时间信息:

  • 日期信息:<description>:date:<YYYYMMDD>
    示例:order:summary:date:20241122
  • 时间戳信息:<description>:ts:<timestamp>
    示例:session:token:uid:abc123:ts:1692806400

5. 规范总结

5.1 推荐的键名风格
  • 使用小写字母。
  • 冒号分隔逻辑层次。
  • 下划线分隔单词,清晰表达数据意义。
5.2 避免的问题
  • 避免过长的键名:键名越长,内存占用越多,效率越低。
    • 不推荐:user:profile:personal:information:unique:identifier:12345
    • 推荐:user:profile:id:12345
  • 避免缩写模糊:缩写可能导致键名难以理解。
    • 不推荐:usr:prf:id:12345
    • 推荐:user:profile:id:12345
  • 避免使用驼峰命名:小写和下划线分隔的风格更适合 Redis 键名。
    • 不推荐:orderStatusOrderId98765
    • 推荐:order:status:order_id:98765

6. 实际应用示例

6.1 Java 中的 Redis Key 工具类
public class RedisKeyUtil {// 用户资料键名public static String userProfileKey(String userId) {return String.format("user:profile:id:%s", userId);}// 订单状态键名public static String orderStatusKey(String orderId) {return String.format("order:status:order_id:%s", orderId);}// 聊天记录列表键名public static String chatMessagesKey(String roomId) {return String.format("chat:messages:list:room_id:%s", roomId);}
}
6.2 常见 Redis 键名
用途键名
用户资料user:profile:id:12345
用户登录状态user:session:uid:abc123
商品库存product:inventory:item_id:67890
订单状态order:status:order_id:98765
聊天消息队列chat:messages:list:room_id:12345
排行榜leaderboard:score:zset:game_id:1

7. FAQ

为什么推荐小写和下划线分隔?
  • 小写命名避免大小写混淆。
  • 下划线分隔的风格更易读,尤其是复合单词。
键名长度如何控制?
  • 避免超过 128 字符。
  • 在确保键名含义清晰的前提下,尽量简洁。
是否需要统一团队风格?
  • 是。制定和遵循统一的命名规范,便于团队协作和后期维护。

通过以上规范,团队可以提高 Redis 数据的可读性和可维护性,同时避免常见的命名问题。建议结合实际业务情况,适当调整以满足具体需求。


http://www.ppmy.cn/server/145196.html

相关文章

构建 Java Web 应用程序:从 Servlet 到数据库交互(Eclipse使用JDBC连接Mysql数据库)

第 1 部分&#xff1a;环境设置 安装 Java Development Kit (JDK)&#xff1a;下载并安装 JDK。设置 IDE&#xff1a;安装并配置 IDE&#xff08;如 IntelliJ IDEA 或 Eclipse&#xff09;。安装数据库&#xff1a;下载并安装 MySQL 数据库。配置数据库&#xff1a;创建数据库…

基于matlab的电力系统潮流计算

1、内容简介 略 94-可以交流、咨询、答疑 2、内容说明 电力系统潮流计算是最基本、最常用的计算。根据系统给定的运行条件、网络及元件参数&#xff0c;通过电力系统潮流计算可以确定各母线上的电压&#xff08;幅值及相角&#xff09;、网络中的功率发布以及功率损耗等。电力…

Spring Boot 应用开发:构建高效、可扩展的 Java 微服务

以下是一个简单的 Spring Boot 小项目示例&#xff0c;该项目是一个基于 Spring Boot 的博客系统后端部分。这个项目将展示如何使用 Spring Boot 框架来创建一个基本的 RESTful API 服务&#xff0c;以管理博客文章。 项目结构 spring-boot-blog ├── src │ ├── main…

Claude Opus MetaPrompt 系统详解

Claude Opus MetaPrompt 系统详解 简介 MetaPrompt系统是由Anthropic提出的&#xff0c;旨在帮助用户为AI助手Claude生成高质量的提示。它指导用户定义任务和变量、结构化指令和细化输出。 具体内容 特点 主要针对Claude 3 Opus版本&#xff0c;并且适用于单轮对话。 核心…

基于开源 AI 智能名片 2+1 链动模式 S2B2C 商城小程序源码的社交新零售利益共同体构建与发展研究

摘要&#xff1a;本论文聚焦于社交新零售这一新兴商业模式&#xff0c;深入探讨其在开源 AI 智能名片 21 链动模式 S2B2C 商城小程序源码支撑下&#xff0c;如何构建并发展人与人之间的利益共同体。通过对相关概念的剖析、模式的解析以及案例的研究&#xff0c;揭示了这种创新模…

transformer.js(三):底层架构及性能优化指南

Transformer.js 是一个轻量级、功能强大的 JavaScript 库&#xff0c;专注于在浏览器中运行 Transformer 模型&#xff0c;为前端开发者提供了高效实现自然语言处理&#xff08;NLP&#xff09;任务的能力。本文将详细解析 Transformer.js 的底层架构&#xff0c;并提供实用的性…

Kingfisher 下载ENA、NCBI SRA、AWS 和 Google Cloud)序列数据和元数据

Kingfisher 是一个灵活高效的工具&#xff0c;用于从公共数据仓库&#xff08;如 ENA、NCBI SRA、AWS 和 Google Cloud&#xff09;下载序列数据和元数据。它有两个主要模式&#xff1a;获取序列数据&#xff08;get&#xff09;和获取元数据&#xff08;annotate&#xff09;。…

《用Python画蔡徐坤:艺术与编程的结合》

简介 大家好&#xff01;今天带来一篇有趣的Python编程项目&#xff0c;用代码画出知名偶像蔡徐坤的形象。这个项目使用了Python的turtle库&#xff0c;通过简单的几何图形和精心设计的代码来展示艺术与编程的结合。 以下是完整的代码和效果介绍&#xff0c;快来试试看吧&…