Redis
一、概述
Redis是一个基于内存的高性能key_value数据库
二、优点
2.1、速度快
数据存储在内存中,类似于HashMap,HashMap的优势就是查找和操作的时间复杂度都是O(1)(常量级,时间最短)
Redis本质是一个key_value类型的内存数据库
2.2、支持丰富数据类型
五种基本数据类型:String、List、Set、ZSet、Hash
而且单个Value的最大限制是1GB。
2.3、丰富的特性
Key过期策略、事务、支持多个DB、计数等
2.4、持久化存储
AOF和RDB两种数据的持久化存出方案。
2.5、高可用
Redis Sentinel提供高可用方案,实现主从故障自动转移
Redsi Cluster,提供集群方案,实现基于槽的分片方案,从而支持更大的Redis规模
三、Redis的线程模型
Redis是非阻塞IO,多路复用的模型
Redis的文件时间处理器是单线程,同时使用IO多路复用机制同时监听多个Socket。Socket并发产生不同操作时,会将Socket产生的时间放入队列中排队。
四、为什么Redis单线程模型也能效率这么高?
4.1、C语言实现
C语言的执行速度非常快
4.2、存内存操作
Redis将数据读到内存中,并通过异步的方式将数据写入磁盘。
4.3、基于非阻塞的IO多路复用机制。
4.4、单线程,避免了多线程的频繁上下文切换问题。
Redis利用队列技术,将并发访问变为串行访问,消除了传统数据库串行控制的开销。
4.5、丰富的数据结构
丰富的数据结构,可以对数据进行优化。
五、RDB和AOF详解
1、全量RDB持久化,是指在指定的时间间隔内将内存中的数据集快照写入磁盘。实际操作是,fork一个子进程,先将数据写入临时文件,写入成功后,再替换之前的文件。用二进制压缩存储。
2、增量AOF持久化,以日志的形式记录服务器所处理的每一个写、删除操作,查询操作不会记录,以文本的方式记录,可以打开文件看到详细的操作记录,也就是数据发生改变,我就持久化。
5.1、RDB优缺点
优点:
灵活设置备份频率和周期,一旦系统出现灾难性故障,可以非常容易的进行恢复
适合冷备份,可以将完整数据备份到远程的安全存储上,可以应对灾难性恢复
性能最大化。可以避免服务进行执行IO操作。
恢复更快
缺点:
无法保证数据的高可用性,即最大限度的避免数据丢失。
如果数据较大时,可能会导致整个服务器停止服务几百毫秒,甚至是1秒钟
5.2、AOF优缺点
优点:
更高的数据安全性,有三种同步策略
每秒同步(可能丢失一秒数据)、每修改同步(效率最低)、不同步
该机制对日志文件的写入操作采用的是append,所以写入过程中即使出现宕机,也不会破会日志文件已经存在的内容
写入性能高,不怕写一半崩溃,因为redis有解决的方案。
AOF日志过大,Redis对其有优化,即使后台出现重写操作,也不会影响客户端的读写。
AOF有一个清晰的日志文件,我们甚至可以通过该文件完成数据的重建。
缺点:
相同数量的数据集而言,AOF文件通常大于RDB文件,恢复速度比RDB的恢复速度要慢
我们应当如何选择:
不要仅仅使用RDB,因为那样会丢失很多数据
也不要仅仅使用AOF,这样会有两个问题。
RDB冷备恢复起来更快,AOF出过bug。
Redis支持同时开启两种持久化方式。用AOF保证数据不会丢失,用RDB来做冷备,当AOF文件丢失或损坏用RDB来进行快速的数据恢复
如果同时使用两种持久化机制,那么redis重启的时候,会使用AOF来重新构建数据
如果突然停电会怎样?一般来说使用每秒一次保存比较好,大概率会丢失1-2秒的数据。
redis有几种数据过期策略
有六种
从已设置过期时间的数据集中挑选数据少使用淘汰
从已设置过期时间的数据集中挑选数据快过期淘汰
从已设置过期时间的数据集中任意挑选
从数据集中挑选最近最少使用的数据淘汰
从数据集中任意选择数据淘汰
不淘汰任何数据,不可写入任何数据集
最近最少使用算法
如何保证热点数据不要被淘汰
访问符合幂律分布,也就是存在相对热点数据
-
-
Redis 检查内存使用情况,如果大于 maxmemory 的限制, 则根据设定好的策略进行回收。
-
Redis 执行新命令