redis常见的面试题

redis的五种数据类型:
string
list
hash
set
sort set


redis的优势:
    速度快
    支持丰富的数据类型
    支持事务 multi / exec(提交) / discard(回滚)
    丰富的特性 可用于缓存 消息队列 按key设置过期时间 过期自动删除


redis的单点吞吐量:
    QPS: 应用系统每秒最大能接受用户访问量 8W/s
    TPS: 每秒最大能处理的请求数 10W/s


redis相比于memcache的优势:
    1,memcached所有的值 均是简单的字符串 redis作为其替代者 支持更丰富的数据类型
    2,redis比memcache更快
    3,redis支持数据持久化
    4,redis支持事务
    5,redis支持数据的备份,支持master-slave模式 slaveof masterif masterport


redis的数据淘汰机制:
    1,lru 已经设置了过期时间的数据 最近最少使用
    2,ttr 已经设置了过期时间的数据 过期数据淘汰
    3,random 已经设置了过期时间的数据 随机淘汰
    4,allkeys - lru 从所有数据集中删除最近最少使用的数据
    5,allkeys - random 从所有数据集中 随机删除数据
    6,禁止淘汰机制


redis的持久化方式:
    1,rdb:指在指定的时间间隔内 能对数据进行快照存储  
        save 60 10000 1s内修改1W次
        save 300 1000 5分钟内修改1K次
        save 900 1 15分钟内修改1次
    2,AOF:记录每次对服务器的写操作 当服务器重启的时候 会将这些命令重新执行一次 重启的速度比rdb慢 但是数据的安全性比较高



如何选择redis的数据持久化的方式:
    rdb:是默认的数据持久化方式 但是有可能造成数据的丢失 数据安全性不是很高 过程:将当前父进程的数据复制到子进程的内存中,然后由子进程将数据写入到临时文件 需要注意的是,每次快照的持久化都会将主进程中的数据全部复制一遍

    AOF:以日志的形式,记录每一次的写操作 redis在重启的时候,会根据日志从头到尾将日志的内容重新执行一遍 以完成数据的恢复
    触发方式:1,有写操作就写 2,每秒定时写(有可能会丢失数据)
    因为AOF是采用追加的方式 记录日志的,所以相对于当前redis中的数据 会有大量冗余的记录 因此在新增的重写机制下 当日志文件达到一定程度的时候(64M) 就会fork一个新的进程来遍历redis中的数据 记录每一条对应的set语句 并将记录写到一个临时文件中 遍历完成后 会替换当前的日志文件
    默认触发条件是:当aof的文件是上次重写后大小的一倍 且文件大于64M

    Tip: 当两种方式同时开启的时候,redis优先选择AOF的方式恢复数据



redis集群之间是如何复制的:
    语法:slaveof masterIp masterPort



redis如何做内存优化:
    尽可能使用散列表(即hash类型) 如:当你的web系统中有一个用户对象 不要为这个用户的名称,姓氏,邮箱,密码等信息单独设置key,而是将这个用户的所有信息作为一个对象,然后存储成hash类型即可


redis回收进程:
    一个客户端运行了新的命令 如添加了新的数据,redis会检查内存的使用情况,如果大于maxmemory的限制,则根据设定好的策略进行回收


redis的分布式锁:
    先用setnx来争抢锁,抢到之后,在用expire给锁加一个过期时间,防止锁忘记被释放,set本身也有一个很复杂的命令来讲setnx和expire揉合到一起来使用的 这样可以防止在过期之前 进程被crash 然后锁未被释放的问题



如何在1亿个key里面找到指定前缀的key:
    redis是单线程的 所以在线上是无法使用keys命令的 因为这会阻碍线程为其他需求提供服务,建议使用scan指令 scan指令可以无阻塞的提取值指定模式的key 但是会有一定的重复率 需要对结果做一次去重 缺点是:相对应keys命令会比较耗时


redis实现异步队列:
    一般是使用list结构来存储队列 rpush / lpush:生产消息 lpop / rpop: 消费消息 没新消息的时候 搭配sleep函数
    bplop:在没有消息的时候 会阻塞住 直到新的消息到来


如何实现延时消息队列:
    使用sort set格式 来存储数据 把时间戳作为score


如果有大量的key需要设置在同一时间过期 一般需要注意什么:
    有可能造成缓存雪崩 redis会出现短暂的卡顿 一般都是在过期时间后面加上一个随机值 来避免这种情况

posted @ 2021-03-22 20:21  幸福捕手  阅读(30)  评论(0)    收藏  举报