开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 1 天,点击查看活动详情
String
Redis基本数据类型,存储单个数据,最常用的数据类型,一个key对应一个value,适用于大多数的缓存业务。
推荐
- 可用做缓存。第一次查询数据库后,将查询结果存入Redis中,后续查询可以直接从Redis中获取。
- 用做计数功能,统计访问量、点赞数等。
注意
-
存入大key,例如一个kv的字节数超过10KB,就会被识别会大key,业务设计上尽量避免有大key
-
对于批量命令,需注意一个批次操作的命令个数或key个数,数量越大越容易导致超时以及Redis服务负载问题。
| 命令 | 备注 | |
|---|---|---|
| APPEND | - | |
| BITCOUNT | - | |
| BITPOS | - | |
| DECR | - | |
| DECRBY | - | |
| GET | - | |
| GETBIT | - | |
| GETRANGE | - | |
| GETSET | - | |
| INCR | - | |
| INCRBY | - | |
| INCRBYFLOAT | - | |
| MGET | - | |
| MSET | - | |
| PSETEX | - | |
| SETNX | - | |
| SETRANGE | - | |
| STRLEN | - |
List
-
双向链表特征,有序,允许重复,不会进行排序
-
头尾插入O(1)、查找O(n)
| 命令 | 备注 |
|---|---|
| LINDEX | - |
| LINSERT | - |
| LLEN | - |
| LPOP | - |
| LPUSH | |
| LPUSHX | - |
| LRANGE | - |
| LREM | - |
| LSET | |
| LTRIM | - |
| RPOP | - |
| RPUSH | - |
| RPUSHX | - |
推荐
-
简单列表类(xx列表等)
-
扩展为队列(LPUSH、LPOP)、堆栈使用(RPUSH、RPOP), 插入删除尽量操作队头、队尾元素
注意
-
超大拉链,例如元素个数过多
-
频繁的O(N)操作,例如:
- LRANGE 0
- LINDEX x
- LTRIM
Hash
-
存储键值对,格式为:key → [filed, value],可以简单理解为一个named-hashmap。
-
插入、查找、删除均为O(1)
推荐
-
存放结构化的数据,例如带属性信息,但filed个数有限不能无限多,value也不可过大
-
方便查询子field
注意
-
单个hash的field数量过多,造成大key问题
-
同质化key的大量增删改查操作,造成数据倾斜、热点key等问题
-
频繁O(N) range类操作,例如:
- Hmget
- Hgetall
- Hscan
| 命令 | 备注 |
|---|---|
| HDEL | - |
| HEXISTS | - |
| HGET | - |
| HGETALL | - |
| HINCRBY | - |
| HINCRBYFLOAT | - |
| HKEYS | - |
| HLEN | - |
| HMGET | - |
| HMSET | - |
| HSCAN | - |
| HSET | - |
| HSETNX | - |
| HSTRLEN | - |
| HVALS | - |
Set
-
相当于HashSet, 内部用Hash结构存储(value为NULL)
-
集合的差、并、补适合单机使用,分布式场景下需要配合Hash Tag 使用
推荐
存放简单无序关系
注意
-
单个Set的Field数量不可过多,会造成大key问题
-
利用HashTag做差、并、补场景,不注意出现数据倾斜与热点问题
-
频繁O(N) range类操作,例如:SMEMBERS
| 命令 | 备注 |
|---|---|
| SADD | - |
| SCARD | - |
| SDIFF | - |
| SDIFFSTORE | - |
| SINTER | - |
| SINTERSTORE | 此命令需要操作的key在同一个分片上,因此需要配合Hashtag使用 |
| SISMEMBER | - |
| SMEMBERS | SMEMBERS是O(N)命令,特别消耗资源,执行的时候请注意有多少个元素,建议超过1000个元素或者整个set大于100KB的就不要执行,若有需求请使用SSCAN分批读取 |
| SMOVE | 此命令需要操作的key在同一个分片上,因此需要配合Hashtag使用 |
| SPOP | - |
| SRANDMEMBER | - |
| SREM | - |
| SSCAN | - |
| SUNION | 此命令需要操作的key在同一个分片上,因此需要配合Hashtag使用 |
| SUNIONSTORE | 此命令需要操作的key在同一个分片上,因此需要配合Hashtag使用 |
Ordered Set(ZSet)
-
带排序功能的Set,Set中每个成员都有一个权重,成员根据权重顺序排列
-
插入删除O(logn),查找O(1)
推荐
-
排行榜(TopN)
-
时序数据
注意
-
大拉链,单个zset的Field数量不可过多,造成大key问题
-
大量使用扫全集的操作,例如:Zrange
| 命令 | 备注 |
|---|---|
| ZADD | - |
| ZCARD | |
| ZCOUNT | - |
| ZINCRBY | |
| ZRANGE | - |
| ZRANGEBYSCORE | - |
| ZRANK | - |
| ZREM | - |
| ZREMRANGEBYRANK | - |
| ZREMRANGEBYSCORE | - |
| ZREVRANGE | - |
| ZREVRANGEBYSCORE | - |
| ZREVRANK | - |
| ZSCAN | |
| ZSCORE | - |
| ZUNIONSTORE | 此命令需要操作的key在同一个分片上,因此需要配合Hashtag使用 |
| ZINTERSTORE | 此命令需要操作的key在同一个分片上,因此需要配合Hashtag使用 |
| ZLEXCOUNT | - |
| ZPOPMAX | - |
| ZPOPMIN | - |