annidy / notes

0 stars 0 forks source link

Understand Redis data types #325

Open annidy opened 3 months ago

annidy commented 3 months ago

Understand Redis data types

核心类型

Strings

虽然是字符串,但是存储数字也是可以的,可以用于实现计数器。 由于String是其它复合类型的基础,所以其它类型也支持值的数值操作,比如Hash有HINCRBY。除了整数,也提供浮点数的累加器INCRBYFLOAT

Lists

内部实现是双向链表,所以链表的很多操作的支持(POP、PUSH、LEN、RANGE、TRIM)

Sets

底层实现是Hash表。支持数学集合操作,如并集(UNION)、交集(INTERSECT)、差集(DIFFERENCE)等

Hashes

Hash的值不能是复杂结构,只能是Plain类型,因此Hash不能嵌套使用。 支持的操作有基本GET、SET操作,获取键值列表 HKEYS、HVALS,但是不支持范围查找。

Sorted sets

  1. 排行榜类应用的最佳选择
  2. 延迟队列(定时器)。生产者将任务ID和期望执行的时间(Score)插入set,消费者轮询小于或等于当前时间戳的任务。hdt3213/delayqueue

复杂数据类型

泛化普通SQL数据库的数据类型

Streams

消息队列,支持消费组的概念(但没有Partition)。 可以O(n)查找,n为Key的长度。原理是每条插入的数据都有一个Key,而Key是通过前缀树方式排序,查找就是遍历前缀树。 Streams的插入的值是Hash类型。

HyperLogLog

使用Hash碰撞算法,检测数据集中不重复元素的数量。类似set,但它对内存占用是固定大小(几十kb)。常见的场景是统计UV这类数据。