Redis
开源、C、k-v、单线程
特征
- 速度快 10w_QPS
- 多数据结构
- 持久化
- 功能丰富
- 高可用
1 | keys * #O(n)级别,不要在生成环境用。单线程会扫描、形成阻塞 |
基本数据类型内部编码
String
- raw <39
- int
- embstr >39
Hash
- hashtable
- ziplist
List
- linkdelist
- ziplist
Set
- hashtable
- intset
Zset
- skiplist
- ziplist
操作
时间复杂度
String
1 | SETNX k v #存入一个不存在的 kv |
Hash
Hash 的优缺点
缺点:不能过期
优点:省、归类
1 | HSET |
List
灵活
1 | # L左 R 右 B 阻塞 ,没有元素则等待 |
Set
1 | SMEMBERS k # 别在生产环境 单线程 |
1 | SINTER k [k ...] #交集 共同好友 |
ZSET
把 SET 里操作的 S 改成 Z 雷同
1 | ZRANGE k start stop [WITHSCORES] # 正序 |
Bitmaps
Bitmaps 只能设置标志位 0 或 1
365天内,是否上过 2 次课
1 | 127.0.0.1:6379> |
HyperLogLog
不够精确
Geo
地理位置 redis3.2
内存策略
高可用
- VIP 主从漂移
- 集群
- 信号隔离、线程池
- 压测、限流
热 key 重建
- 加锁重建
热 key 不过期
高可用
批量操作
减少 Socket IO 时间、执行命令开销、资源竞争、系统调用开销
m 操作
优点:原子
缺点:单线程有延迟
pipeline
优点:灵活,可控
缺点:无原子性,只能作用到一个节点
事务
保证原子的批量操作
优点 原子 乐观锁
缺点 效率最低