Redis - 存储对象信息是用 Hash 还是 String
日常工作中存储对象信息时,一般有两种做法,一种是用 String存储,另一种是Hash 存储。既然两种数据结构都可以存储结构体信息。到底哪种更加合适呢?
String 和 Hash 占用内存的比较
首先用代码先插入 10000 条数据,然后用可视化工具来看看内存的占用情况。
const Redis = require("ioRedis");
const Redis0 = new Redis({port: 6370});
const Redis1 = new Redis({port: 6371});
const user = {
name: 'name12345',
age: 16,
avatar: 'https://dss3.bdstatic.com/70cFv8Sh_Q1YnxGkpoWK1HF6hhy/it/u=256767015,24101428&fm=26&gp=0.jpg',
phone: '13111111111',
email: '1111111@11.email',
lastLogon: '2021-04-28 10:00:00',
}
async function main() {
for (let i = 0; i < 10000; i++) {
await Redis0.set(`String:user:${i}`, Json.Stringify(user));
await Redis1.hmset(`Hash:user:${i}`, user);
}
}
main().then(process.exit);
先看 Redis0:(String)
再来看看 Redis1:(Hash)
可以看到还是有点差距的,但是差距并不明显。
结论:
适合用 String 存储的情况:
- 每次需要访问大量的字段
- 存储的结构具有多层嵌套的时候
适合用 Hash 存储的情况:
- 在大多数情况中只需要访问少量字段
- 自己始终知道哪些字段可用,防止使用 mget 时获取不到想要的数据
总结
本文主要介绍了 Redis 存储对象信息是用 Hash 还是 String,建议是大部分情况下使用 String 存储就好,毕竟在存储具有多层嵌套的对象时方便很多,占用的空间也比 Hash 小。当需要存储一个特别大的对象时,而且在大多数情况中只需要访问该对象少量的字段时,可以考虑使用 Hash。
适合用 String 存储的情况:每次需要访问大量的字段存储的结构具有多层嵌套;
适合用 Hash 存储的情况:在大多数情况中只需要访问少量字段,自己始终知道哪些字段可用,防止使用 mget 时获取不到想要的数据。
String存数据注重的是整体性,要么一次性更新,要么一次性获取,以读为主。
Hash可以把属性隔离开,讲究的是更新操作会比较灵活便利。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」
2022-04-27 Git -git入门介绍、常用技巧(合并分支)
2022-04-27 数据结构 - 游戏开发中的帧同步与状态同步
2022-04-27 Golang - 如何读取YAML、JSON、INI等配置文件