InnoDB崩溃恢复机制

概述数据库系统与文件系统大的区别在于数据库能保证操作的原子性,一个操作要么不做要么都做,即使在数据库宕机的情况下,也不会出现操作一半的情况,这个就需要数据库的日志和一套完善的崩溃恢复机制来保证。下面简单介绍一下InnoDB的崩溃恢复流程。 相关概念 lsn: 可以理解为数据库从创建以来产生的redo日志量,这个值越大,说明数据库的更新越多,也可以理解为更新的时刻。此外,每个数据页上也有一...

信号与信号量的区别

信号由用户、系统或者进程发送给目标进程的信息,以通知目标进程某个状态的改变或系统异常。 信号量信号量是一个特殊的变量,它的本质是计数器,信号量里面记录了临界资源的数目,有多少数目,信号量的值就为多少,进程对其访问都是原子操作(pv操作,p:占用资源,v:释放资源)。它的作用就是,调协进程对共享资源的访问,让一个临界区同一时间只有一个进程在访问它。 区别信号是通知进程产生了某个事件,信号...

UDP如何实现可靠传输

概述UDP不属于连接协议,具有资源消耗少,处理速度快的优点,所以通常音频,视频和普通数据在传送时,使用UDP较多,因为即使丢失少量的包,也不会对接受结果产生较大的影响。 传输层无法保证数据的可靠传输,只能通过应用层来实现了。实现的方式可以参照tcp可靠性传输的方式,只是实现不在传输层,实现转移到了应用层。 最简单的方式是在应用层模仿传输层TCP的可靠性传输。下面不考虑拥塞处理,可靠UDP...

Redis过期数据删除策略

如果假设你设置了一批 key 只能存活 1 分钟,那么 1 分钟后,Redis 是怎么对这批 key 进行删除的呢? 常用的过期数据的删除策略就两个(重要!自己造缓存轮子的时候需要格外考虑的东西): 惰性删除: 只会在取出 key 的时候才对数据进行过期检查。这样对 CPU 最友好,但是可能会造成太多过期 key 没有被删除。 定期删除: 每隔一段时间抽取一批 key 执行删除过期 ...
NoSQL

Redis和memcached的区别和使用场景

共同点 都是基于内存的数据库,一般都用来当做缓存使用。 都有过期策略。 两者的性能都非常高。 区别 Redis和Memcache都是将数据存放在内存中,都是内存数据库。不过memcache还可用于缓存其他东西,例如图片、视频等等; Redis不仅仅支持简单的k/v类型的数据,同时还提供list,set,hash等数据结构的存储; 虚拟内存–Redis当物理内存用完时,可以将一些很久...
NoSQL

==和 equals 的区别

对于基本数据类型来说,==比较的是值。对于引用数据类型来说,==比较的是对象的内存地址。

Java

海量数据Top K问题

问题引入:10亿个数中找出最大的10000个数(top K问题)

进程调度算法

介绍无论是在批处理系统还是分时系统中,用户进程数一般都多于处理机数、这将导致它们互相争夺处理机。另外,系统进程也同样需要使用处理机。这就要求进程调度程序按一定的策略,动态地把处理机分配给处于就绪队列中的某一个进程,以使之执行。 7种调度算法先来先服务调度算法(FCFS)先来先服务(FCFS)调度算法是一种最简单的调度算法,该算法既可用于作业调度,也可用于进程调度。当在作业调度中...

Redis6.0 相关问题

Redis6.0之前的版本真的是单线程吗?Redis在处理客户端的请求时,包括获取 (socket 读)、解析、执行、内容返回 (socket 写) 等都由一个顺序串行的主线程处理,这就是所谓的“单线程”。但如果严格来讲从Redis4.0之后并不是单线程,除了主线程外,它也有后台线程在处理一些较为缓慢的操作,例如清理脏数据、无用连接的释放、大 key 的删除等等。 Redis6.0之前为...
NoSQL

Redis 单线程模型

Redis单线程模型文件事件处理器 Redis基于Reactor模式开发了网络事件处理器,这个处理器就叫做文件事件处理器(file event handler).这个文件事件处理器是单线程的,所以Redis才叫做单线程的模型,文件事件处理器采用了IO多路复用机制同时监听多个socket,根据socket上的事件来选择对应的事件处理器来处理这个事件; 如果被监听的socket准备好执行a...
NoSQL