Redis 数据结构

字符串(String)

最基础的数据类型:

SET name "BookStack"
GET name
INCR counter          # 原子自增
INCRBY counter 50     # +50
MSET k1 v1 k2 v2     # 批量设置
MGET k1 k2           # 批量获取

应用场景

  • 缓存数据
  • 计数器
  • 分布式锁

列表(List)

基于双向链表实现:

LPUSH queue task1    # 左侧插入
RPUSH queue task3    # 右侧插入
RPOP queue           # 右侧弹出
LRANGE queue 0 -1    # 查看全部
LLEN queue           # 列表长度

应用场景

  • 消息队列
  • 最新消息列表
  • 时间线

集合(Set)

无序、不重复的字符串集合:

SADD users:online "user1"
SMEMBERS users:online
SISMEMBER users:online "user1"  # 判断存在
SCARD users:online       # 成员数量

# 集合运算
SINTER set1 set2         # 交集
SUNION set1 set2         # 并集
SDIFF set1 set2          # 差集

应用场景

  • 标签系统
  • 共同好友
  • 去重操作

有序集合(Sorted Set)

带分值的集合,自动排序:

ZADD leaderboard 100 "player1"
ZADD leaderboard 200 "player2"
ZREVRANGE leaderboard 0 -1 WITHSCORES  # 排行榜
ZRANK leaderboard "player1"            # 排名
ZINCRBY leaderboard 50 "player1"       # 加分

应用场景

  • 排行榜
  • 延时队列
  • 范围查询

哈希(Hash)

适合存储对象:

HSET user:1001 name "Alice" age 30
HGET user:1001 name
HGETALL user:1001
HINCRBY user:1001 age 1    # 年龄+1

应用场景

  • 对象缓存
  • 购物车
  • 用户信息

高级数据结构

Bitmap

SETBIT login:20260101 1001 1
BITCOUNT login:20260101    # 统计登录人数

HyperLogLog

PFADD unique:visits "ip1"
PFCOUNT unique:visits      # 基数估计

GEO

GEOADD locations 116.39 39.91 "天安门"
GEORADIUS locations 116.40 39.90 5 km