Geo
Geo 命令用来把经纬度转换成 Geohash。
一般用途:
- 获得地图上一个点附近 x米内的所有点
Hashes
哈希表。以前会把数据序列化后作为字符串存储,现在可以直接存进 hash 里。缺点是只有一级,所以多级的情况还是要序列化。
一般用途:
- 数据库里的数据原封不动存进 hash
HyperLogLog
HyperLogLog 的用途是输入大量的字符串,最后得到去重字符串的数量。和 Sets 的区别是速度飞快,而且空间小很多,可能只有千分之一。缺点是数据存入后会做不可逆运算,因此只能统计数量,不能再取出数据。
一般用途:
- 统计 UV
Lists
列表。以前会用来作为消息队列,现在推荐使用 Streams。
一般用途:
- 有序的队列
Sets
去重的无序列表。如果要维护一个去重的列表。缺点是无序。
一般用途:
- 分布式的情况下,维护一个去重表
Sorted Sets
有序的去重列表。同样是去重的列表,可以给每个值加一个权重,得到一个顺序。
一般用途:
- 按照需要的顺序存储数据库的主键。作为数据库索引的补充。
Streams
专门的消息队列,比 List 快很多,用来代替 Kafka, RabbitMQ 等。
一般用途:
- 消息队列
Strings
最基本的字符串
一般用途:
- 加锁 SET key value EX 5 NX。SET 和 EX 一起操作,保证锁超时的原子性。
- 存储序列化的数据,比如 json
Bitmap
图是建立在 String 上的,提供直接对每一位的操作。图的操作直观上就是 offset 上的值是 0 还是 1
一般用途:
- 统计用户一年登录了哪些天 SETBIT $uid $day 1。$offset 是一年中的第几天
- 查看用户是否在线 SETBIT KEY $uid 1。这里 $uid 只能是数字
- 布隆过滤器。旧版可以找插件来实现
隐藏结构:Radix
Radix 是 redis 内部用来存储 key 的数据结构,类似 trie 字典树,但是经过压缩(字母合并)。因此可以直接拿 redis 的 key 做字典树来用。