过期时间
setex key second value
互斥
nx
为什么redis快
- 基于内存存储实现
- 高效的数据结构
- 合理的数据编码
- 合理的线程模型
- 虚拟内存机制
缓存击穿 穿透 雪崩
缓存穿透: 查询一个一定不存在的数据
解决:
- api对参数进行校验
- 缓存一个空值
- 布隆过滤器
缓存雪崩: 数据大批量过期
解决: 随机过期时间
缓存击穿: 热点key在某个时间点过期
解决: 过期时间
redis的过期策略
定时过期
惰性过期
定期过期
redis采用的是惰性过期和定期过期
redis8种内存淘汰策略
redis的应用场景
- 缓存
- 排行榜
- 计数器应用
- 共享session
- 分布式锁
- 社交网络
- 消息队列
- 位操作
redis的持久化机制
RDB(redis database): 默认,把内存数据以快照的形式保存到磁盘,适合大规模的数据恢复场景,备份
AOF(append only file): 采用日志的形式来记录写操作
怎么实现redis的高可用
3种部署模式: * 主从模式, 哨兵模式, 集群模式*
主从模式: 全量复制,增量复制
哨兵模式: 主服务宕机, 自动切换子服务
mysql和redis如何保证双写一致性
- 缓存延时双删
- 删除缓存重试机制
- 读取biglog异步删除缓存
redisson分布式锁
setnx setex 加锁,加过期时间
setnx的不足:
- 不可重入: 同一个线程无法多次获取同一把锁
- 不可重试: 获取锁只尝试一次就返回false,没有重试机制
- 超时释放
- 主从一致