Redis 学习笔记
1. 核心特征
- 键值型:以 Key-Value 形式存储
- 单线程:命令执行是单线程的(但持久化等有后台线程)
- 基于内存:低延迟,速度快
- 数据持久化:支持 RDB 和 AOF
- 集群架构:支持主从集群、分片集群
- 多语言客户端:支持主流开发语言
2. 基本数据结构类型
| 类型 | 示例 | 备注 |
|---|---|---|
| String | hello world | 基础字符串/整数/浮点数 |
| Hash | {name: "Jack", age: 21} | 类似 Map/字典 |
| List | [A -> B -> C -> D] | 双向链表,有序可重复 |
| Set | {A, B, C} | 无序,元素唯一 |
| SortedSet | {A:1, B:2, C:3} | 可排序,元素唯一,带 score 属性 |
3. 通用命令
KEYS pattern:查看匹配的 key(生产环境禁用,会阻塞)DEL key:删除指定 keyEXISTS key:判断 key 是否存在EXPIRE key seconds:设置 key 的过期时间(自动删除)TTL key:查看 key 的剩余有效期(-1 永久,-2 已过期)
提示:可使用
help [command]查看具体命令用法
4. Key 的设计规范
采用层级结构设计,通过冒号分隔:
项目名:业务名:类型:id
例如:students:user:1
5. String 类型详解
常见命令
| 命令 | 作用 |
|---|---|
SET key value | 添加或修改键值对 |
GET key | 获取 String 类型的 value |
MSET key1 value1 key2 value2 | 批量添加 |
MGET key1 key2 | 批量获取 |
INCR key | 整型值自增 1 |
INCRBY key increment | 整型值自增指定步长 |
INCRBYFLOAT key increment | 浮点型值自增 |
SETNX key value | 不存在时才添加(分布式锁常用) |
SETEX key seconds value | 添加并指定有效期 |
String 存储对象的不足
用 String 存对象常用JSON 序列化(如{"name":"Jack", "age":21}),但修改对象中某个字段时很不方便(需整个替换)。
6. Hash 类型详解
特征:无序字典,类似 Java 的HashMap。可以将对象中的每个字段独立存储,支持对单个字段做 CRUD。
常见命令
HSET key field value:添加/修改 hash 中的字段HGET key field:获取 hash 中的字段值HMSET key field1 value1 field2 value2:批量添加字段HMGET key field1 field2:批量获取字段值HGETALL key:获取所有字段和值HDEL key field:删除指定字段HINCRBY key field increment:指定字段自增
7. List 类型详解
特征:类似 Java 的LinkedList(双向链表)。有序、元素可重复、插入和删除快、查询一般。
使用场景:朋友圈点赞列表、评论列表等。
常见命令
LPUSH key element ...:向列表左侧插入一个或多个元素LPOP key:移除并返回列表左侧第一个元素(无则返回 nil)RPUSH key element ...:向列表右侧插入一个或多个元素RPOP key:移除并返回列表右侧第一个元素LRANGE key start end:返回指定范围内的元素(支持负数索引)BLPOP / BRPOP key timeout:阻塞式弹出,无元素时等待指定时间,而非直接返回 nil
8. Set 类型详解
特征:类似 Java 的HashSet(Value 为 null 的 HashMap)。无序、元素不可重复、查找快,天然支持交集、并集、差集。
使用场景:社交软件的共同好友、标签计算。
常见命令
SADD key member ...:向集合中添加一个或多个元素SREM key member ...:移除集合中的指定元素SCARD key:返回集合中元素的个数SISMEMBER key member:判断元素是否存在于集合中SMEMBERS key:获取集合中所有元素SINTER key1 key2 ...:求多个集合的交集SDIFF key1 key2 ...:求集合的差集(key1 - key2)SUNION key1 key2 ...:求多个集合的并集
9. SortedSet 类型详解
特征:可排序的 Set 集合,每个元素有一个score属性,根据score值排序,底层是跳表(SkipList)+ Hash表。元素不重复、查询快。
使用场景:各类排行榜。
常见命令
ZADD key score member:添加/更新元素及其 scoreZREM key member:删除指定元素ZSCORE key member:获取指定元素的 scoreZRANK key member:获取指定元素的排名(按 score 升序)ZCARD key:获取集合中元素个数ZCOUNT key min max:统计 score 在给定区间内的元素个数ZINCRBY key increment member:指定元素自增指定步长ZRANGE key start end:按 score 排序,获取排名范围内的元素ZRANGEBYSCORE key min max:按 score 排序,获取 score 范围内的元素ZDIFF / ZINTER / ZUNION:求集合的差集、交集、并集
注意:默认排名为升序(从小到大)。如需降序,在命令的
Z后面添加REV即可,如ZREVRANGE、ZREVRANK。