日常工作中存储对象信息时,一般有两种做法,一种是用 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: '[email protected]', 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可以把属性隔离开,他讲究的是更新操作会比较灵活一些。更新操作会遍历一些。
标签:存储,const,String,Redis,user,Hash From: https://www.cnblogs.com/beatleC/p/17358633.html