1、redis 支持的数据类型
类型 | 结构 |
string | 常用 |
hash | key value 型的对象 |
list | 压缩列表(类似数组) 双向链表 |
set | hash表 整数数组 |
zset | 压缩列表 调表 |
2、存储隐患
现象 | 解决方式 | |
缓存雪崩 | 大量缓存同一时间失效 | 设置一定时间内的随机值 |
缓存击穿 | 某一热点缓存失效 | 1、使用分布式锁 2、热点数据用不过期 |
缓存穿透 | 缓存和数据库中无此数据 | 1、设置空值,并设置简单的过期时间 2、布隆过滤器 存储所有可以访问的key |
3、redis 值久化策略
方式 | 优缺点 | |
RDB | 缓存快照 | 1、宕机会发生数据丢失 2、恢复数据快 |
AOF | 记录所有写入命令 | 反之 |
4、分布式
方式 | 模式 | 缺点 |
setnx | 操作数据前先创建锁
| 在缓存失效之间内未做完数据修改 |
redisson.getlock | 在缓存时间time内,会有一个 每1/3 time 执行定时线程去更新该缓存的存储时间
| 集群情况下, master 未能同步到 salver ,master 节点挂了,导致数据不一致问题 |
redisson.redlock | 新增 zookeeper 一样的,同步半数以上的机器才会返回成功 | 性能逐步下降 |
5、淘汰策略
volatile-lru | 在设置过期时间内最近最少使用 |
volatile-ttl | 在设置过期时间内即将过期 |
volatile-random | 在设置过期时间内随机 |
allkeys-lru | 从数据集中挑选最近最少使用的数据淘汰 |
allkeys-random | 从数据集中任意选择数据淘汰 |
no-enviction | 永不删除 |
6、查询速度
1、基于内存查询
2、单线程操作较少内核态和用户态的切换,同时节省无效线程的轮询
3、nio 多路复用
epoll 主要实现是底层语言 epoll_create 创建epoll 实例 epoll_ctl 注册事件 epoll_wait 监听事件发生
7、主备数据同步
1、master 会启动一个备份进程同步数据,备份进程调用 rdbsave()将数据保存到rdb 文件中。
2、redis 有一个定时/任务 serverCron,检测备份是否完成, 同时更新备份状态: 成功失败、备份时间。
如果成功则将数据发送给slave(slave 创建socket 与master 连同,然后master 发送rdb 文件到slave)。