zoukankan      html  css  js  c++  java
  • Redis面试题

    1.redis基本数据类型及常用客户端命令

     string、list、set、zset、hash。相关指令见 redis常用客户端命令

    2.redis过期key删除策略

    Redis中过期key的删除策略,分为三种:定时删除、定期删除、惰性删除。其中,定时删除和定期删除是主动删除策略,惰性删除是被动删除策略。
    1、定时删除
    定时删除是在设置key的过期时间的同时,会创建一个定时器(timer)。定时器在key的过期时间来临时,立即执行对key的删除操作。缺点是消耗CPU,基本不使用
    2、定期删除
    定期删除是每隔一段时间,程序就会对Redis数据进行一次检查,删除里面的一定数量的过期key,通过定期删除策略,可以有效地减少因为过期key而带来的内存浪费。
    3、惰性删除
    惰性删除是是每次获取key时,都会检查取得的key是否过期,如果过期,则删除该key;若没有过期,就返回该key的值。缺点是对内存是最不友好的。如果一个key已经过期,而这个key又仍然保留在db中,那么只要这个过期key不被删除,它所占用的内存就不会释放。

    3.redis数据淘汰策略

    voltile-lru:从已设置过期时间的数据集(server.db[i].expires)中挑选最近最少使用的数据淘汰
    volatile-ttl:从已设置过期时间的数据集(server.db[i].expires)中挑选将要过期的数据淘汰
    volatile-random:从已设置过期时间的数据集(server.db[i].expires)中任意选择数据淘汰
    allkeys-lru:从数据集(server.db[i].dict)中挑选最近最少使用的数据淘汰
    allkeys-random:从数据集(server.db[i].dict)中任意选择数据淘汰
    no-enviction(驱逐):禁止驱逐数据

    4.redis持久化

    见 redis.conf详解

    5.redis事务

    见 redis事务

    6.redis单线程模型原理

    见 redis单线程模型 

    7.redis集群

    见 redis集群

    8.redis管道

    见 redis管道(Pipeline)

    9.假如Redis里面有1亿个key,其中有10w个key是以某个固定的已知的前缀开头的,如果将它们全部找出来?

    使用keys指令可以扫出指定模式的key列表。
    
    对方接着追问:如果这个redis正在给线上的业务提供服务,那使用keys指令会有什么问题?
    
    这个时候你要回答redis关键的一个特性:redis的单线程的。keys指令会导致线程阻塞一段时间,线上服务会停顿,直到指令执行完毕,服务才能恢复。这个时候可以使用scan指令,scan指令可以无阻塞的提取出指定模式的key列表,但是会有一定的重复概率,在客户端做一次去重就可以了,但是整体所花费的时间会比直接用keys指令长。

    10.缓存雪崩和缓存穿透问题解决方案

    缓存雪崩:缓存同一时间大面积的失效
    缓存穿透:请求缓存中不存在的数据
    解决缓存穿透问题,最常见的则是采用布隆过滤器,将所有可能存在的数据哈希到一个足够大的bitmap中,一个一定不存在的数据会被 这个bitmap拦截掉,从而避免了对底层存储系统的查询压力。

     11.Redis相比memcached有哪些优势

    1.memcached所有的值均是简单的字符串,Redis作为其替代者,支持更为丰富的数据类型
    2.Redis的速度比memcached快很多
    3.Redis可以持久化其数据
    4.Redis支持数据的备份,即master-slave模式的数据备份。

    12.redis分布式锁

    见 redis分布式锁

  • 相关阅读:
    css 基础
    css 基础-1
    html 入门2-表
    CMDB (后台管理) CURD 插件
    序列化
    AES(高级加密)
    API验证
    数据库取时间(分组)
    用户权限 (知识点)
    xss 过滤
  • 原文地址:https://www.cnblogs.com/ryjJava/p/14265142.html
Copyright © 2011-2022 走看看