• 【Redis】面试常见问题


    1.redis有哪些基本数据类型?

    整数、字符串、hash表、链表、跳表、压缩表

    2.redis有哪些数据结构?

    string、list、hash、set、zset除此之外还有HyperLogLog(大数据基数估算)、Geo(地理位置信息)和BloomFilter(布隆过滤器)

    3.一个请求进来的时候,Redis 怎么找到对应的数据的?

    请求会由一个socket监听接收,进入循环等待上一个socket执行完成,唤醒,在子线程中开始执行,获取到数据后,写入缓存,写入socket,关闭socket输出

    4.单线程的redis为什么这么快?

    (1)表结构为散列表,时间复杂度为O(1)
    (2)存在内存中,不需要磁盘IO
    (3)采用多路复用

    5.redis持久化策略

    RDB快照,AOF增量
    RBD快照首先fork出一个子进程在后台拷贝一份快照,采用的方式是被动监听,一旦有数据变动,系统会执行COW(Copy on write)持久化到快照中,保证快照的实时更新
    AOF增量:将操作步骤先经过逻辑处理后写入缓存中,等到一定容量或者到达1s中时,异步刷入AOF日志中,更安全

    6.redis的过期策略以及内存淘汰机制

    redis采用定期删除+惰性删除策略。
    定期删除:redis每过100ms会抽样调取一部分数据检查是否过期,过期则删除。
    惰性删除:每次获取key时,会再检查一遍是否过期,过期则删除。
    如果长时间不调用,定期删除又没有检查出来,会导致内存占用不断变大,这时需要内存淘汰机制
    (1)不淘汰:noeviction
    (2)定期时间:volitale-random(随机)、volitale-ttl(过期时间)、volitale-lru(最近最少)、volitale-lfu(最小访问频率)
    (3)所有:allkeys-random(随机)、allkeys-lru(最近最少)、allkeys-lfu(最小访问频率)

    7.Redis 集群的时候怎么存放数据?我要扩容怎么办?

    根据不同的业务场景有不同的路由算法存放数据:一致性hash算法、取模hash算法、区域hash算法
    根据算法路由到对应的Node节点,再存放数据。
    扩容时:如果是一致性hash算法直接添加节点,如果是取模或区域最好按倍扩容

    8.手撕LRU算法

    public class LRUCache extends LinkedHashMap {
        private int capacity;
    
        public LRUCache(int capacity){
            //accessOrder设为true意为按照访问的顺序排序
            super(16,0.75f,true);
            this.capacity = capacity;
        }
    
        // 当前大小大于等于容量
        @Override
        protected boolean removeEldestEntry(Map.Entry eldest) {
            return super.size()>=capacity;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
  • 相关阅读:
    猿创征文|【深度学习前沿应用】文本生成
    在电脑上怎么分类管理笔记?支持分类整理的电脑云笔记软件
    后端php项目和数据库启动
    简单解说思科命令大全
    <Linux>(极简关键、省时省力)《Linux操作系统原理分析之Linux 进程管理 1》(5)
    基于vue+node+MySQL的导航可视化系统webapp设计
    SOA架构概述
    0递归中等 LeetCode306. 累加数
    [附源码]JAVA毕业设计抗击新冠疫情专题宣传网站(系统+LW)
    计算机毕业设计Java毕业生离校管理系统(源码+系统+mysql数据库+lw文档)
  • 原文地址:https://blog.csdn.net/qq_36015612/article/details/126847405