• Redis


    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 LRU 算法最近最少使用算法**Redis 没有使用真正实现严格的 LRU 算是的原因是,因为消耗更多的内存。然而对于使用 Redis 的应用来说,使用近似的 LRU 算法,事实上是等价的。**

    如何保证热点数据不要被淘汰

    访问符合幂律分布,也就是存在相对热点数据

    Redis 回收进程如何工作的?

    • 一个客户端运行了新的写命令,添加了新的数据。

    • Redis 检查内存使用情况,如果大于 maxmemory 的限制, 则根据设定好的策略进行回收。

    • Redis 执行新命令

    如果有大量的 key 需要设置同一时间过期,一般需要注意什么?

    Redis可能会出现短暂的卡顿现象,一般添加一个随机值,使得过期时间分散一些。

    还需要防备出现缓存雪崩的问题。

  • 相关阅读:
    面向对象(2)
    毕业季面试题(7)
    面向对象(class0420)
    ASP.NET入门(class0612)
    数据结构与算法(二叉树)
    算法总结(2)数据结构
    毕业季面试题(6)
    常规页生命周期(class0620)
    (三) 语句
    (二) 运算符
  • 原文地址:https://www.cnblogs.com/gushiye/p/13986369.html
Copyright © 2020-2023  润新知