在 Redis 中,数据压缩与解压通常是“应用层行为”,而不是 Redis 内核自动完成的。Redis 本身是内存数据库,关注性能,因此不会自动对 value 进行通用压缩。下面从原理、常见方案、示例、优缺点几个方面系统说明。
因此:
✅ Redis 只负责存储字节数据
✅ 压缩由客户端或中间件完成
思路:
| 算法 | 特点 |
|---|---|
| GZIP | 压缩率高,速度一般 |
| Snappy | 速度快,压缩率一般 ✅ |
| Zstd | 压缩率 & 速度均衡 ✅✅ |
| LZ4 | 极快,压缩率一般 |
byte[] data = "{'name':'redis','type':'cache'}".getBytes();
byte[] compressed = Snappy.compress(data);
jedis.set("user:1".getBytes(), compressed);
byte[] value = jedis.get("user:1".getBytes());
byte[] result = Snappy.uncompress(value);
System.out.println(new String(result));
✅ 优点:
❌ 缺点:
例如:
⚠️ 使用较少,适合特定场景
App → Proxy(压缩/解压) → Redis
常见方案:
✅ 适合:
Redis 内部使用:
这些:
| 结构 | 是否压缩 | 说明 |
|---|---|---|
| String | ❌ | 原始字节 |
| Hash(小) | ✅(编码优化) | ziplist/listpack |
| ZSet(小) | ✅(编码优化) | listpack |
| Set(int) | ✅ | intset |
| Stream | ✅ | 内部压缩 |
⚠️ 这些只是 内存编码优化,不是 GZIP/Zstd 那种压缩。
| 算法 | 压缩率 | 速度 | 推荐 |
|---|---|---|---|
| GZIP | 高 | 慢 | ❌ |
| Snappy | 中 | 快 | ✅ |
| Zstd | 高 | 快 | ✅✅ |
| LZ4 | 低 | 极快 | ✅ |
✅ 推荐方案
✅ 设计建议
Redis 不做数据压缩,压缩由客户端或 Proxy 完成;String 类型最常用压缩,Hash/ZSet 等结构依赖内部编码优化。
如果你愿意,我可以:
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。