nosql
- 介绍
分布式缓存:解决单机容量有限,解决本地缓存不互通
- 优点
高性能
高并发
- 作用
缓存
分布式锁
限流
消息队列
- Redis 单线程模型
基于Reactor模式设计的事件处理模型
I/O 多路复用技术的使用让 Redis 不需要额外创建多余的线程来监听客户端的大量连接,降低了资源的消耗
Redis 基于 Reactor 模式开发了自己的网络事件处理器:这个处理器被称为文件事件处理器(file event handler)。文件事件处理器使用 I/O 多路复用(multiplexing)程序来同时监听多个套接字,并根据套接字目前执行的任务来为套接字关联不同的事件处理器。
当被监听的套接字准备好执行连接应答(accept)、读取(read)、写入(write)、关 闭(close)等操作时,与操作相对应的文件事件就会产生,这时文件事件处理器就会调用套接字之前关联好的事件处理器来处理这些事件。
虽然文件事件处理器以单线程方式运行,但通过使用 I/O 多路复用程序来监听多个套接字,文件事件处理器既实现了高性能的网络通信模型,又可以很好地与 Redis 服务器中其他同样以单线程方式运行的模块进行对接,这保持了 Redis 内部单线程设计的简单性。
- Redis6.0为什么要引入多线程呢
之前不引入是因为
- 多线程会使得并发读写可能存在问题,线程切换、加锁解锁、死锁问题会带来性能损耗;
- 单线程编程容易并且更容易维护;
- Redis 的性能瓶颈不在 CPU ,主要在内存和网络
Redis6.0 引入多线程主要是为了提高网络 IO 读写性能
- 过期数据的删除策略
惰性删除(对CPU友好)+定期删除(对内存友好)
- 内存淘汰机制
volatile-lru,volatile ttl,volatile random
allkeys lru,allkeys random,no eviction
volatile-lfu,allkeys-lfu
- 持久化机制
- 快照 RDB
通过创建快照来获得存储在内存里面的数据在某个时间点上的副本
- AOF(append-only file)持久化
主流,比RDB持久化实时性更好。开启AOF后每执行一条修改命令,Redis 就会将该命令写入到内存缓存 server.aof_buf 中,然后再根据 appendfsync 配置来决定何时将其同步到硬盘中的 AOF 文件。AOF 文件的保存位置和 RDB 文件的位置相同,都是通过 dir 参数设置的,默认的文件名是 appendonly.aof
- Redis事务不具有ACID,不支持roll back
- 三种常用的缓存读写策略
- Cache Aside Pattern(旁路缓存模式)
写 : 先更新DB,再删除Cache
读 :由应用程序来更新Cache
- Read/Write Through 读写穿透
由cache 服务完成与DB的通信,类似代理
- Write Behind 异步缓存写入
和b一样都是由 cache 服务来负责 cache 和 DB 的读写。
Read/Write Through 是同步更新 cache 和 DB,而 Write Behind Caching 则是只更新缓存,不直接更新 DB,而是改为异步批量的方式来更新 DB(场景:浏览量、点赞量)