Redis 的 key 清理,也就是内存回收的时候主要分为:过期删除策略与 内存淘汰策略两部分。
过期删除策略
删除到达过期时间的 key 。
第一种:定时检查删除
对于每一个设置了过期时间的 key 都会创建一个定时器,一旦达到过期时间都会删除。这种方式立即清除过期数据,对内存比较好,
但是有缺点是:占用了大量 CPU 的资源去处理过期数据,会影响 redis 的吞吐量 和 响应时间。
Redis 的 key 清理,也就是内存回收的时候主要分为:过期删除策略与 内存淘汰策略两部分。
删除到达过期时间的 key 。
对于每一个设置了过期时间的 key 都会创建一个定时器,一旦达到过期时间都会删除。这种方式立即清除过期数据,对内存比较好,
但是有缺点是:占用了大量 CPU 的资源去处理过期数据,会影响 redis 的吞吐量 和 响应时间。
Redis因为Redis是基于内存的数据库,一旦断电,所有实例都会关机,所有数据都会丢失,在运行期间,可以通过开启Redis的持久化功能,将数据写入磁盘,供实例重启时恢复数据。Redis的持久化主要通过AOF和RDB实现持久化。
对于使用 InnoDB 作为存储引擎的表来说,不管是用于存储用户数据的索引,还是各种系统数据,都是以页的形式存放在表空间中的,而所谓的表空间只是 InnoDB 对文件系统上一个或几个实际文件的抽象,也就实际数据说到底还是存储在磁盘上的。
磁盘的速度很慢,怎么能配得上“快如闪电”的CPU 呢?
InnoDB 存储引擎在处理客户端的请求时,当需要访问某个页的数据时,就会把完整的页的数据全部加载到内存中。
也就是说即使我们只需要访问一个页的一条记录,那也需要先把整个页的数据加载到内存中。
每一种解决方案都是为了解决某一类问题而产生,所以在问为什么使用某种方案的时候,其本质就是在探索该方案是用来满足什么样的需求,解决什么样的问题。
所以探究 InnoDb 为什么使用 B+ 树这个问题,就是要弄清楚 B+ 树是用来满足什么的需求,解决什么样的问题。
一句话总结:在 InnoDB 里,一个索引就是一棵 B+ 树。
那么这个 B+ 树是什么样子的呢?
数据存储在叶子节点,中间节点存目录项。
那么,
叶子节点啥样的?
中间节点啥样的?
要知道节点的结构,就得先知道 InnoDB 管理存储空间的基本单位 —— 页。
InnoDB 引擎将数据划分为若干个页,以页作为磁盘和内存之间交互的基本单位,页的大小一般为 16 KB。InnoDB 设计了许多种不同类型的页,比如存放表数据记录的页,存放表空间头部信息的页,存放 Insert Buffer 信息的页,存放 undo 日志的页等等,而这之中存放表中索引数据记录的页即数据页就是 B+ 数的叶子节点。
就是对整个数据库加锁,让整个数据库处于只读状态,所有更新操作停止。(如果是主库就不能执行更新语句,从库也不能执行同步过来的bin log)
最常用的场景是对数据库加锁,让数据库只能读,然后对整个数据库做逻辑备份(就是将所有数据生成SQL写入备份文件。)
最近在读 Nginx 相关的书籍,做一下读书笔记。
Nginx 作为业界知名的高性能服务器,被广泛的应用。它的高性能正是由于其优秀的架构设计,其架构主要包括这几点:模块化设计、事件驱动架构、请求的多阶段异步处理、管理进程与多工作进程设计、内存池的设计,以下内容依次进行说明。
在工作中,我们与 Nginx 打交道更多的是通过其配置文件来进行。那么掌握这些配置项各自的作用就很有必要了。
首先,nginx.conf 的内容通常是这样的:
1 | ... |