Redis
开源、C、k-v、单线程
特征
- 速度快 10w_QPS
- 多数据结构
- 持久化
- 功能丰富
- 高可用
1 2 3 4 5 6 7 8 9
| keys * #O(n)级别,不要在生成环境用。单线程会扫描、形成阻塞 # 用 scan 看所有的 key scan 0 # scan 返回游标 0 时说明遍历完了 127.0.0.1:6379> scan 0 match rank* count 1 1) "4" 2) 1) "rank:m" type key # 数据结构 OBJECT encoding key # 编码
|
基本数据类型内部编码
String
Hash
List
Set
Zset
操作
时间复杂度
String
1 2
| SETNX k v #存入一个不存在的 kv MGET k #multi get
|
Hash
Hash 的优缺点
缺点:不能过期
优点:省、归类
1 2 3 4 5 6 7
| HSET HSETNX HMGET HMSET HGETALL k# hash-k 中所有 k-v HLEN k# hash-k-中field 的数量 HINCRBY k field increment # has-k 中 field键 的值 +increment
|
List
灵活
1 2 3 4
| # L左 R 右 B 阻塞 ,没有元素则等待 BLPOP BRPOP LRANGE key start stop #获取区间
|
Set
1 2 3
| SMEMBERS k # 别在生产环境 单线程 SPANDMEMBER k [cnt] # 列出 cnt 个 SPOP key [cnt] # 抽(删)cnt 个
|
1 2 3 4 5 6
| SINTER k [k ...] #交集 共同好友 SINTERSTORE target key [k ...] # 交集存入 target SUNION #并 SUNIONSTORE SDIFF #差 SDIFFSTORE
|
ZSET
把 SET 里操作的 S 改成 Z 雷同
1 2
| ZRANGE k start stop [WITHSCORES] # 正序 ZREVRANGE k start stop [WITHSCORES] # 倒序
|
Bitmaps
Bitmaps 只能设置标志位 0 或 1
365天内,是否上过 2 次课
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| 127.0.0.1:6379> 127.0.0.1:6379> SETBIT xuanshan 0 1 # 第 0 天标记为 1 (integer) 0 127.0.0.1:6379> SETBIT xuanshan 6 1 (integer) 0 127.0.0.1:6379> SETBIT xuanshan 364 1 (integer) 0 127.0.0.1:6379> STRLEN xuanshan (integer) 46 127.0.0.1:6379> BITCOUNT xuanshan 0 365 (integer) 3 127.0.0.1:6379> BITCOUNT xuanshan 0 -1 (integer) 3 127.0.0.1:6379> BITCOUNT xuanshan -2 -1 (integer) 1
|

HyperLogLog
不够精确

Geo
地理位置 redis3.2

内存策略
高可用
- VIP 主从漂移
- 集群
- 信号隔离、线程池
- 压测、限流
热 key 重建

热 key 不过期


高可用
批量操作
减少 Socket IO 时间、执行命令开销、资源竞争、系统调用开销
m 操作
优点:原子
缺点:单线程有延迟
pipeline
优点:灵活,可控
缺点:无原子性,只能作用到一个节点
事务
保证原子的批量操作
优点 原子 乐观锁
缺点 效率最低