zoukankan      html  css  js  c++  java
  • redis 面试相关

    1.redis锁的机制  什么时候会死锁  设计一个死锁的情景
     
        存在风险:SETNX和EXPIRE 为两个指令,如果设置了SETNX后程序崩溃,EXPIRE未成功执行则会出现资源锁死的情况。
        key不存在,将 key 设置为 value.如果 key 已存在,则不做任何操作
        原子 – Redis的所有操作都是原子性的
     
    2. 为什么redis快? (redis是单进程单线程 由C语言编写)
        1.完全基于内存,绝大部分请求是纯粹的内存操作
        2.数据结构简单,对数据操作也简单
        3.采用单线程,避免了不必要的上下文切换和竞争条件,不存在锁的问题.
        4.Redis直接自己构建了VM 机制 
     
    3. redis 过期时间的机制?
     
        1.定期删除:定期删除指的是Redis默认每隔100ms就随机抽取一些设置了过期时间的key,检测这些key是否过期,如果过期了就将其删掉。
        2.惰性删除:惰性删除不再是Redis去主动删除,而是在客户端要获取某个key的时候,Redis会先去检测一下这个key是否已经过期 
        3.定期删除会耗费CPU因为key太多,如果全盘扫描所有的key会非常耗性能,所以是随机抽取一些key来删除。这样就有可能删除不完,需要惰性删除配合。 
     
    4. redis集中过期会发生什么事情?
        CPU会升高
        如果大量的key过期时间设置的过于集中,到过期的那个时间点,redis可能会出现短暂的卡顿现象。一般需要在时间上加一个随机值,使得过期时间分散一些。 
     
     
     5.redis持久化
     
    redis是一个内存数据库,数据保存在内存中,但是我们都知道内存的数据变化是很快的,也容易发生丢失。幸好Redis还为我们提供了持久化的机制,
    分别是
    1.RDB(Redis DataBase)
     
    2.AOF(Append Only File)
     
    RDB

    RDB其实就是把数据以快照的形式保存在磁盘上。什么是快照呢,你可以理解成把当前时刻的数据拍成一张照片保存下来。

    RDB持久化是指在指定的时间间隔内将内存中的数据集快照写入磁盘。也是默认的持久化方式,这种方式是就是将内存中数据以快照的方式写入到二进制文件中,默认的文件名为dump.rdb。

    ①、优势

    (1)RDB文件紧凑,全量备份,非常适合用于进行备份和灾难恢复。

    (2)生成RDB文件的时候,redis主进程会fork()一个子进程来处理所有保存工作,主进程不需要进行任何磁盘IO操作。

    (3)RDB 在恢复大数据集时的速度比 AOF 的恢复速度要快。

    ②、劣势

    RDB快照是一次全量备份,存储的是内存数据的二进制序列化形式,存储上非常紧凑。当进行快照持久化时,会开启一个子进程专门负责快照持久化,子进程会拥有父进程的内存数据,父进程修改内存子进程不会反应出来,所以在快照持久化期间修改的数据不会被保存,可能丢失数据。

    AOF

    全量备份总是耗时的,有时候我们提供一种更加高效的方式AOF,工作机制很简单,redis会将每一个收到的写命令都通过write函数追加到文件中。通俗的理解就是日志记录。

    优点

    (1)AOF可以更好的保护数据不丢失,一般AOF会每隔1秒,通过一个后台线程执行一次fsync操作,最多丢失1秒钟的数据。(2)AOF日志文件没有任何磁盘寻址的开销,写入性能非常高,文件不容易破损。

    (3)AOF日志文件即使过大的时候,出现后台重写操作,也不会影响客户端的读写。

    (4)AOF日志文件的命令通过非常可读的方式进行记录,这个特性非常适合做灾难性的误删除的紧急恢复。比如某人不小心用flushall命令清空了所有数据,只要这个时候后台rewrite还没有发生,那么就可以立即拷贝AOF文件,将最后一条flushall命令给删了,然后再将该AOF文件放回去,就可以通过恢复机制,自动恢复所有数据

    缺点

    (1)对于同一份数据来说,AOF日志文件通常比RDB数据快照文件更大

    (2)AOF开启后,支持的写QPS会比RDB支持的写QPS低,因为AOF一般会配置成每秒fsync一次日志文件,当然,每秒一次fsync,性能也还是很高的

    (3)以前AOF发生过bug,就是通过AOF记录的日志,进行数据恢复的时候,没有恢复一模一样的数据出来。

     
     
     
     
     
  • 相关阅读:
    HDU 1010 Tempter of the Bone(DFS剪枝)
    HDU 1013 Digital Roots(九余数定理)
    HDU 2680 Choose the best route(反向建图最短路)
    HDU 1596 find the safest road(最短路)
    HDU 2072 单词数
    HDU 3790 最短路径问题 (dijkstra)
    HDU 1018 Big Number
    HDU 1042 N!
    NYOJ 117 求逆序数 (树状数组)
    20.QT文本文件读写
  • 原文地址:https://www.cnblogs.com/zhaoyingjie/p/14020445.html
Copyright © 2011-2022 走看看