【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;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值