Redis 是以键值对(key-value)储存数据的,这里的数据类型指的是值的数据类型,而键都是 String

常见的有 5 种:

  • String(字符串)
    • 缓存对象、常规计数、分布式 session、分布式锁
  • List(列表)
    • 栈和队列、消息队列(有两个问题:生产者需要自行实现全局唯一 ID;不能以消费组形式消费数据)
  • Hash(哈希、散列)
    • 缓存对象、Map(映射)和 Dict(字典)
  • Set(集合)
    • 无序且不可重复、聚合计算(并集、交集、差集)
  • Zset(有序集合)
    • 排序

随着 Redis 版本的更新,后面又支持了 4 种数据类型:

  • BitMap(位图):2.2 版新增
    • 二值状态统计
  • HyperLogLog(基数统计):2.8 版新增
    • 海量数据基数统计
  • GEO(地理信息):3.2 版新增
    • 地理位置信息
  • Stream(流):5.0 版新增
    • 消息队列

键值对

Redis 使用一个「 哈希表 」保存所有键值对,哈希表的最大好处就是通过键来查找和新增的时间复杂度是 O(1)

键是 String,值是 redisObject

  • type:标识该对象是什么类型的对象(String、 List、Hash、Set、Zset 等)
  • encoding:标识该对象使用了哪种底层的数据结构(SDS、哈希表、跳表等)
  • ptr:指向底层数据结构的指针

Redis 键值对数据库全景图: