Redis数据类型详解

Redis (Remote Dictionary Server) 是一个开源的内存数据结构存储系统,可用作数据库、缓存和消息中间件。

核心数据类型概览

String (字符串)

二进制安全的字符串,最大支持512MB

List (列表)

基于双向链表实现的有序字符串列表

Hash (哈希)

字符串字段和字符串值之间的映射表

Set (集合)

无序的字符串集合,元素不重复

Sorted Set (有序集合)

带有分数的有序字符串集合

内部实现机制

graph TD A[Redis Object] --> B[String] A --> C[List] A --> D[Hash] A --> E[Set] A --> F[Sorted Set] B --> G[Simple Dynamic String] C --> H[Doubly Linked List] D --> I[Hash Table] E --> J[Hash Table for Unique Elements] F --> K[Skip List + Hash Table]

数据结构实现细节

typedef struct redisObject {
    unsigned type:4;    // 数据类型
    unsigned encoding:4;// 编码方式
    void *ptr;         // 数据指针
    int refcount;      // 引用计数
    unsigned lru;      // 最后访问时间
} robj;
                        

应用场景分析

String应用场景

  • 缓存用户信息
  • 计数器(文章阅读量)
  • 分布式锁

List应用场景

  • 消息队列
  • 最新文章列表
  • 社交网络动态流

Hash应用场景

  • 用户信息字段存储
  • 购物车商品管理
  • 配置信息存储

Set应用场景

  • 标签系统
  • 用户关注/粉丝集合
  • 独立IP统计

性能对比分析

数据类型 时间复杂度 空间复杂度 适用场景
String O(1) O(n) 简单KV存储
List O(1)头尾操作 O(n) 队列
Hash O(1) O(n) 对象存储
Set O(1) O(n) 去重统计
Sorted Set O(log n) O(n) 排行榜

最佳实践总结

数据类型选择原则

  • 根据数据特征选择合适的类型
  • 考虑数据访问模式
  • 评估内存使用效率

性能优化建议

  • 合理设置过期时间
  • 避免大key
  • 使用批量操作提升性能