Hash类型实战:对象存储的最佳选择
引言 上一篇我们学习了String类型,可以用JSON序列化存储对象。但是有一个问题: 如果只想修改用户的一个字段(比如年龄),需要怎么做? // String方式:读取→反序列化→修改→序列化→写入 String json = redis.get("user:1001"); User user = JSON.parseObject(json, User.class); user.setAge(26); // 只改了年龄 redis.set("user:1001", JSON.toJSONString(user)); 这样做有几个问题: ❌ 需要整个对象序列化/反序列化 ❌ 网络传输整个对象(浪费带宽) ❌ 并发修改容易出现覆盖问题 Hash类型就是为了解决这个问题而生的。 一、Hash的本质 1.1 什么是Hash? Hash就是一个键值对集合(类似Java的HashMap、Python的dict): Hash对象 ├── field1: value1 ├── field2: value2 └── field3: value3 在Redis中: 外层键(Key):对象的唯一标识 内层字段(Field):对象的属性名 值(Value):属性值 示例: # 用户对象 user:1001 ├── name: "张三" ├── age: "25" ├── email: "zhangsan@example.com" └── city: "北京" 1.2 Hash vs String 维度 String (JSON) Hash 存储方式 整个对象序列化为JSON 每个字段单独存储 修改单个字段 需要整体读写 直接修改该字段 内存占用 略高(JSON格式化) 略低(原生存储) 可读性 好(JSON可读) 一般(需遍历) 性能 读写整个对象 按需读写字段 适用场景 整体读写 频繁修改部分字段 选择原则: ...