Redis 键名的设计

别再只会用MySQL了!用PHPStudy+Redis给你的本地开发环境加个‘内存缓存’Buff 本文详细介绍了如何在PHPStudy集成环境中部署Redis,为MySQL数据库添加高性能内存缓存层。通过Redis的安装配置、缓存策略选择及实战案例演示,帮助开发者显著提升本地开发环境的查询性能,实现毫秒级响应。文章还涵盖了高级技巧如缓存雪崩预防和连接池优化,是Redis入门教程的实用指南。 阅读详情

一.前言

结构化数据库的特点在于,需要事先严格定义好字段名,字段类型,长度,缺省值,取值范围,约束条件等,而且必须保证所有记录的所有字段都严格按结构设计来保存数据,否则不允许保存。关系型数据库在入库前进行了大量的检查和处理工作,如 SQL Server, Oracle, MySQL, PostgerSQL。

半结构化数据库则没有这些限制,可以较灵活地保存数据,入库时数据库本身不做严格检查,而是到客户端应用程序使用时,再检查数据的正确性和可用性,这样可极大提高数据的读写性能,如 MongoDB, Hbase ,Redis。

非结构化数据无明显的数据库结构可言,可作为一个整体数据进行保存,如文档,图像,音视频等。

Redis数据库是一个键值对数据库,提供了5种基本数据类型 (String, List, Hash, Set, ZSet),利用键名对数据内容进行保存和读取。Redis的业务处理逻辑,包含在键值的设计中,一般是利用实际的业务数据,动态拼装键名,来进行相关数据的保存和读取。因此客户端应用程序需要有一个统一的键值设计方案,才能有效实现相应的业务逻辑。

 

二.键名设计规则

本文提供了一种对Redis键名(没有包含值类型的设计)进行结构化设计的方案。键名的长度:可达512M, 但键名越长,越占资源,需要权衡

       以下提供的命名项目,中间用冒号(:)分隔,其中(2,3,4,6)项是基本的,其他项目可以根据需要进行取舍使用。

序号

条目

说明

举例

1

实体族

也可理解为命令空间,Schema等

sys

2

实体名

表名,包括系统表

user

3

查询字段名

查找字段,或用于定位相关业务信息

缺省字段可以省略不写,如主键字段

userid

4

查询字段值

具体业务内容,跟查询字段名对应

888

5

数据值对应的列族名

字段族,参考Hbase的结构设计

base

6

数据值对应的列名

当前键要保存的数据值对应的数据列名

即当 【查询字段名】= 【查找字段值】时, 获得的内容对应的数据列名

username

7

数据值的版本号

参考Hbase的结构设计,可保留值的多个版本信息

 

8

数据值的时间戳

参考Hbase的结构设计

 

 

三.举例说明

  • 结构化数据库的表设计:

表名: user

序号

字段名

说明

1

userid

用户id

2

username

用户名称

3

userole

用户角色

4

password

用户密码

5

isactive

用户是否有效

表名: role

序号

字段名

说明

1

roleid

关系型数据库的表物理主键,在Redis中,若没有引用,则可不要

2

rolename

角色名称,固定值为 visitor, admin

表名:loginlog :登录历史表

序号

字段名

说明

1

loginlogid

关系型数据库的表物理主键,在Redis中,若没有引用,则可不要

2

userid

用户名称

3

logintime

登录时间

4

logouttime

退出时间

表名:online :在线人员

序号

字段名

说明

1

onlineid

关系型数据库的表物理主键,在Redis中,若没有引用,则可不要

2

userid

用户id

3

logintime

登录时间

4

token

令牌

 

  • Redis 键名设计:

序号

键名设计

(包含的内容)

举例

1

1:2:3:4:5:6:7:8

key = sys:user:userid:888:base:username:1:217453

value = username的值

 

说明:通过userid, 保存、读取 username 信息

2

2:3:4:6

实体名:查询字段名:字段值:列名

key = user:userid:888:username:

value = username的值

说明:通过userid, 获得username

 

key = user:username:edwin:userid

value = userid

说明:通过username 找到 userid

3

2:4:6

实体名:字段值:列名

key = user:888:username (对应主键字段名为 userid)

value = username的值

 

只适合主键字段(或每个实体的缺省字段),开发过程中应该非常明确,没有歧义

不建议根据数据类型来区别不同字段,代码容易混

4

2:4

实体名: 字段值

key = user:888   (对应缺省主键字段: userid)

value = 跟当前userid 相关的值列表

5

2:3

实体名:字段名

key = online:userid

value = userid列表

 

说明:所有在线用户的userid列表

6

2:

实体名:

key = loginlog:

value = 日志列表

7

扩展用法

结合多个列,甚至多个实体的组合键设计

 

  • 特别说明

       在redis 中,所有键名都是唯一的,且都在同一个物理结构级别,不分层级;但不同的键值,保存的业务信息各不相同,业务层级结构各不相同

  1. 保存整个数据库的系统信息
  2. 保存某个 entity的整体信息,
  3. 保存entity的一条记录;
  4. 保存entity的一条记录的一个字段的值
  5. 保存一对多的关系,
  6. 保存多对多的关系,等等

 

Redis 数据库的键值设计 文档描述了Redis 数据库的键值设计,个人感觉很好! 立即下载

相关推荐

U24时钟信号上升下降沿出现非单调性--简单分析

交换机U24时钟信号上升下降沿出现非单调性--简单分析

qq_45185504的博客 1132

Redis里面的Key设计

本文讲解Redis里面的Key设计。

jakelihua 1374

Eplan2022 复制已有的宏文件生成新的原理图宏文件

Eplan2022 新建原理图宏文件

haier123888的博客 1万+

【Redis】Redis最佳实践:键值设计

无论是哪种数据类型, key都是string类型,string类型的底层编码包含int、embstr和raw三种。如果key中全是数字,那么就会直接以int类型去存储,而int占用的空间也是最小的,当然出于业务需求,我们不可能将key设计为一个全数字的,而如果不是纯数字,底层存储的就是SDS内容,如果小于44字节,就会使用embstr类型,embstr在内存中是一段连续的存储空间,内存占用相对raw来说较小,而当字节数大于44字节时,会转为raw模式存储,在raw模式下,内存空间不是连续的,而是采用一个指针

qq_50675319的博客 4081

细胞膜电学特性的分数阶微积分建模

分数阶微积分在细胞膜电学特性建模中的应用主要体现在对细胞膜的电容行为和神经元放电活动的更精确描述上。

冰河世纪20的博客 623

基于FPGA进位链的TDC高精度延时链设计与实现

本文详细介绍了基于FPGA进位链的高精度TDC延时链设计与实现方法。通过利用FPGA的CARRY4硬件资源,构建了理论分辨率达13.25ps/级的延时链,并提供了Verilog代码实现、物理布局约束技巧以及温度补偿策略。文章还涵盖了标定方法、数据转换处理和系统验证方案,为激光测距、高能物理等需要精确时间测量的应用提供了实用解决方案。

weixin_28731223的博客 487

Redis高级——键值对设计

Key的最佳实践固定格式:[业务名]:[数据名]:[id]足够简短:不超过44字节不包含特殊字符Value的最佳实践:合理的拆分数据,拒绝BigKey选择合适数据结构Hash结构的entry数量不要超过1000设置合理的超时时间。

康小庄的博客 1820

Apollo学习笔记(4)坐标系

百度Apollo项目用到了多种坐标系,其中帮助文档提及的坐标系包括: 全球地理坐标系(The Global Geographic coordinate system ) 局部坐标系—东-北-天坐标(The Local Frame – East-North-Up,ENU) 车身坐标系—右-前-天坐标(The Vehicle Frame —Right-Forward-Up,RFU) 车身坐标系—前-左-天坐标(The Vehicle Frame —Front-Left-Up,FLU) 还有一种Frenet坐标

qq_24649627的博客 5798

【Redis最佳实践】优雅的键值设计

分享Java相关技术、数据库、Python、职场、感悟、视频资源等干货和学习心得。如:kettle、ES、redis\mongoDB、springboot、Zookeeper、高并发多线程、中间件、JVM、程序员攻略等。:一个Hash类型的Key,它的成员数量虽然只有1,000个但这些成员的Value(值)总大小为100MB。2、对于集合类型的key,建议元素数量小于1000。:一个ZSET类型的Key,它的成员数量为10,000个。:一个String类型的Key,它的值为5MB。",会持续更新优秀文。

竹林幽深 238

【windows】【系统还原】亦是美kms执行一键关闭defender 之后,windows defender 被卸载了,无论如何都打不开

还是执行 都没有明显效果 那么,我最后是怎么解决得呢? 一、打开控制面板(任务栏搜索kzmb)

weixin_41899098的博客 6908

ChatGPT启蒙之旅:弟弟妹妹的关键概念入门

本文主要介绍了ChatGPT启蒙之旅:弟弟妹妹的关键概念探险,希望能对初学大模型的同学们有所帮助。 文章目录 1. 背景 2. GPT是个什么样的人? 3. GPT使用的核心思维 4. GPT使用的场景介绍

herosunly的博客 16万+

规范:Redis规范

在公司项目中,redis属于高频使用,在使用中,我们遇到了各种各样的redis问题,于是针对自身情况梳理了一个redis使用规范。

为无为,事无事,味无味。 1904

智能家居系统设计:基于MATLAB的智能家居系统设计和仿真,包括智能家居控制、家庭能源管理和家庭安全监控

基于 MATLAB 的智能家居系统设计方法可以有效地解决各类智能家居问题。

走向CTO的路上... 1775

Redis缓存设计精髓:高并发系统键名与TTL优化

Redis作为高性能缓存数据库,其核心原理基于内存存储与高效数据结构,通过键值对实现快速数据访问。在分布式系统中,合理的键名设计和TTL设置直接影响缓存命中率和系统稳定性。从技术实现来看,结构化键名需包含业务标识、实体隔离等层级,而TTL时间需结合查询频率和主从同步延迟动态计算。这些优化手段特别适用于电商秒杀、票务系统等高并发场景,能有效预防缓存雪崩和热点Key问题。通过12306等实际案例可见,Redis的setex命令配合多级缓存策略,可支撑10万级QPS的余票查询需求。

weixin_33491377的博客 130

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Redis键命名规范与实战技巧:设计清晰高效的键名,提升运维效率

原则说明示例可读性键名应自解释,避免模糊或缩写一致性统一分隔符、大小写和模块划分使用,全小写命名空间通过前缀隔离业务模块,避免冲突长度控制建议≤150字节,平衡可读性与性能动态适配结合时间戳、版本标识支持业务扩展在Redis的日常运维中,键名设计看似是一个微小的细节,却承载着系统长期稳定与高效运行的重要使命。通过前文的探讨,我们深入剖析了键命名规范的核心原则、常见模式、实战技巧以及工具支持,不难发现,合理的键名设计不仅能显著提升数据操作的效率,还能极大增强系统的可维护性与扩展性。

zuiyuelong的博客 862

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Redis 开发运维踩坑与优化心得:从键名到持久化的实战总结

Redis 是内存数据库,一旦宕机,数据全靠持久化恢复,这一块可不能马虎。之前有个项目没做好持久化,服务器断电后,近 30 秒的数据全丢了,还好不是核心业务,不然损失就大了。Redis 有两种基础的持久化方式:RDB 和 AOF。RDB 是生成全量快照,优点是文件小、恢复快,但可能丢失快照后的所有数据;AOF 是记录所有修改指令,重启时重放,数据安全性高,最多丢 1 秒的数据(fsync 设为 everysec),但文件大、恢复慢。

2202_75578365的博客 1303

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

阿里云Redis开发规范

阿里云Redis开发规范 https://developer.aliyun.com/article/531067#slide-12 Redis开发规范解析(一)–键名设计 https://mp.weixin.qq.com/s?spm=a2c6h.12873639.0.0.69991feewaC06W&__biz=Mzg2NTEyNzE0OA==&mid=2247483663&idx=1&sn=7c4ad441eaec6f0ff38d1c6a097b1fa4&chksm

Eistert 1219

Redis缓存设计陷阱,90%的PHP程序员都踩过的坑,你中招了吗?

掌握高效PHP缓存策略:Redis集成方法,避免常见性能陷阱。适用于高并发场景,通过持久连接、序列化优化和键值设计提升响应速度。揭秘90%开发者忽略的关键细节,显著增强应用稳定性与负载能力,值得收藏。

DeepLens的博客 757

毕业一年多,整理了下Redis使用规范

Redis使用规范 在项目中,redis属于高频使用,在使用中,遇到了各种各样的redis问题,针对自身情况梳理了一个redis使用规范。 键名设计 key名设计 禁止包含特殊字符(比如空格、换行、单双引号以及其他转义字符) 建议风格一致 这里指的是key的书写风格,建议同时大驼峰、同时小驼峰或者下划线;是项目级别的统一 eg:userAdmin UserAdmin user_admin key不能太长也不能太短,键名越长越占资源,太短可读性太差 key 单词与单词之间以:分开

Rong姐姐好可爱 863

为什么你的游戏缓存总失效?深度剖析Redis+Python常见误区

解决游戏缓存频繁失效难题,深入解析Redis+Python应用误区。涵盖高并发场景下的连接管理、数据过期策略与序列化方案,提升缓存稳定性与读写效率。结合实战经验,优化游戏服务性能,值得收藏。

LogicGap的博客 996

你必须知道的Redis使用规范

java零基础自学,点击了解:https://how2j.cn本文章转载自(如有侵权,联系删除):https://my.oschina.net/kenblog/blog/3196207Redis使用规范在公司项目中,redis属于高频使用,在使用中,我们遇到了各种各样的redis问题,于是针对自身情况梳理了一个redis使用规范。一、键名设计1、key名设计禁止包含特殊字符(比...

java_zdc的博客 477

【Redis】 String 类型的介绍和常用命令

Redis 中的 key 都是字符串类型Redis 中存储字符串是完全按照二进制流的形式保存的,所以 Redis 是不处理字符集编码的问题,客户端传入的命令中使用的是什么编码就采用什么编码,使得 Redis 能够处理各种类型的数据,包括文本、图片、音频等二进制数据。

2202_76097976的博客 1245

*Redis MCP

本文介绍了在TRAE国际版中集成RedisMCP的最佳实践。主要内容包括:1)正确配置Redis连接;2)根据数据类型选择合适的数据结构;3)为数据设置合理的过期时间;4)使用事务和管道确保原子性和性能;5)采用规范的键名命名规则;6)设计容错和降级方案。文章强调RedisMCP作为AI外部记忆体的重要性,建议通过合理的数据结构设计、过期策略和故障预案,构建高效稳定的应用系统。

leohu0723的博客 534

面试必备:Redis缓存设计规范与性能优化

本文梳理了在使用Redis过程需要遵循的一些最佳实践,包括针对架构维度的一些深入性能优化的知识,如果面试官问你:“说下在使用Redis的过程中,需要注意哪些规范?”,如果你按照本文的思路回答,肯定能让面试官眼前一亮,offer自然就到手了。在线求赞,加个关注我会非常感激!最近无意间获得一份阿里大佬写的刷题笔记,一下子打通了我的任督二脉,进大厂原来没那么难。这是大佬写的,7701页的BAT大佬写的刷题笔记,让我offer拿到手软本文,已收录于,我的技术网站。

程序员江小北 1650

redis namespace

工作中发现redis 中存储的数据过多,看起来很不方便,无意中看到了session在redis中存的方式: 索性就想将自己的存入redis中的数据像这样展示,一来方便查找,二来也比较美观,查询了资料原来是redis key命名的方式导致的。如果你的key命名为XX:XX:XX 你就会得到这样一个key ,当然关于redis namesapce的命名方式还有很多,先放上两个链接以后整理 https://blog.youkuaiyun.com/songhuiqiao/article/details/50263017

m0_67392182的博客 2158
上一篇: 系统架构设计的核心要素
下一篇: Python 类的基本定义详解
快乐清风客
博客等级 码龄19年 191粉丝 12原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值