redis
nosql
Memcache
Redis
MongoDB
redis简介
单线程+多路IO复用
应用场景:
缓存、session共享、持久化
五大常用数据类型
String
List
Set
Hash
Zset
三大新数据类型
redis配置文件
网络连接:心跳检测、连接时长
通用:日志级别、库
存储策略
reids的发布和订阅
Bitmaps:统计
HyperLogLog:基数计算:不重复数据个数的计算
Geographic:地理
Jedis、RedisTemplate
事务、锁机制、秒杀
事务:
Multi、Exec、discard
悲观锁、乐观锁
监视key
特点:单独的隔离操作、没有隔离级别的概念、不保证原子性
秒杀:
乐观锁 + 连接池 + LUA脚本(原子化) 解决库存遗留问题
持久化RDB、AOF
RDB:临时文件 –> 覆盖
AOF:只记录写的操作,只能追加,redis读取这些操作重写构建数据
写操作追加到缓存区,根据策略进行持久化同步,根据重写策略进行重写压缩
主从复制
一主二仆
薪火相传:分组传递
宕机上位
连接时:全量复制
同步时:增量复制
主从复制原理
哨兵模式:
Master down ,sentinel自动监控 —> 选举某从机作为主机
Master 再次上线后 变为从机
选举规则:
1、Priority最小
2、偏移量最全
3、Runid最小的(随机生成)
Redis集群
无中心化
集群节点的插槽计算:计算key所属的插槽,平均分摊压力
哈希槽分区
应用问题
缓存穿透
解决方案:
缓存空值(设置过期时间)、设置白名单(bitmaps)
布隆过滤器(底层bitmap)、实时监控redis(设置黑名单)
缓存击穿
解决方案:
预先设置热门key(增加时长)、实时调整(频繁访问key增加时长)
锁(先上锁,查完数据库放锁)
缓存雪崩
构建多层缓存(多级缓存处理)、锁和队列(不适合高并发)
设置过期标志(更新时长)、分散缓存失效时间(过期时间不同)
分布式锁
reids分布式锁:
setnx 同时设置过期时间
Redisson
总结:
Uuid + 过期时间 + 加锁
Lua释放锁(uuid比较)
Redis6新功能
Acl用户权限
Io多线程:网络数据读写和协议解析
工具支持cluster