- 什么是redis(remote dictionary server)
开源、非阻塞I/O机制、运行于内存、nosql(非关系系)、键值对 - 优点
1.读写快(原因:运行于内存)(速度:10w/s)
2.支持持久化(rdb [默认]、aof)
3.多种数据机构(string、list、hash、有序set、无序set)
4.多种特性(过期策略、淘汰机制、事务、pub/sub、计数)
5.非阻塞I/O - 缺点
1.容量受限于内存
2.不具备容错和恢复功能(主节点宕机且未同步数据到从节点时,从节点代替新节点为主节点后未同步数据将丢失且不能恢复)
redis不易在线扩容 - 过期策略
1.定期删除:定时器监测是否过期,过期则自动删除
2.惰性删除:获取key时判断是否过期,如过期则删除 - 淘汰机制(内存不足时写入)
1.报错
2.移除较为少用的key
3.随机移除某个key
4.在设计过期时间的key中随意移除
5.在设计过期时间的key中移除最少使用的
6.在设计过期时间的key中移除最先过期的 - 引用场景
1.计数器(incr、decr)
2.缓存
3.会话缓存(保存session)
4.分布式锁(setnx)
5.过滤器(sadd) - 持久化类型
1.RDB(默认):是redis一种的缩写快照,通过快照周期将数据写入磁盘中且生成 .rdb文件。
优点:是方便,一个文件实现持久化,且是利用子线程进心持久化,还原数据效率较高。
缺点:周期性的持久化,容易发生数据丢失
2.AOP:类似于mysql的log_bin,生成.aop文件,记录每次操作的命令
优点:安全级别较高,不会发生数据丢失
缺点:一定层度上占用资源,还原数据时效率较低 - 事务
1.事务的阶段:multi > 命令行 > exec/discard
2.注意事项
redis不支持回滚
事务中如有命令行错误则全不命令不执行
事务中如发生运行错误则不影响之后命令的正常执行
事务中如修改监控的键值对,剩余的事务将不再执行
3.事务的特性:一致性、隔离性、持久性(ACID)
redis的事务具备一定的原子性、但不支持回滚
不完全具备事务的一致性(参照注意事项第3条)
redis为单线程,具备隔离性
通过RDB或AOP可以保证持久性 - 集群 - 哨兵模式
哨兵为redis的组件,实现集群的高可用性,主要监控各节点状态,如主节点宕机将转移至新节点且通知客户端主节点地址
- 集群 - Redis Cluster
1.流程
保存数据时,通过hash算法对数据进行分片,将分片存储到对应的主从节点上(同一分片多节点数据保持一致,保证主节点宕机后数据不丢失),读取数据时,如数据分片不存储于该节点时则转向下一个节点
2.注意事项
redis采用了槽的概念(16384个槽),每个节点对应相应的哈希值区间
扩容时需将其他节点对应的的数据发复制至新的节点
只能使用0号数据库 - redis常见问题
1.雪崩(缓存大面积过期)
解决:过期时间避免设施相同,甚至过期标志,高并发时加锁排队
2.击穿(缓存中无对应数据)
解决:互斥锁
3.穿透(缓存和数据库均无数据)
解决:参数校验,布隆过滤器
4.保持热点数据(过期策略、淘汰机制)
解决:加锁排队
redis知识点
最新推荐文章于 2024-07-11 11:52:18 发布