Redis面试题、知识


作者:空白

  1. 数据类型以及使用场景
  • 数据类型:string、list、set、zset、hash

  • 场景:

    • string: 分布式锁、分布式会话
    • list: 简单分布式队列
    • set: 集合的计算,交集, 并集, 差集等,共同好友,共同粉丝,你关注的人还关注谁。
    • zset: 排行榜场景,数据当前时间是否过期场景。
    • hash:存储关系型数据,补差k-v存储存储数据场景。
  1. redis是单线程还是多线程?
    1. 工作线程都是单线程,即zhi'x执行命令是单线程。
    2. 6.x版本以上IO是多线程
    3. 各命令的数据网卡IO读写都是并发的。 alt

alt

  1. 雪崩、穿透、击穿? alt

  2. NULL KEY和布隆过滤器的区别? alt

总结:对大量请求进行管控,例如 限流、快速失败、分布式锁等方式,避免无效、重复的请求达到DB。

  1. redis数据是如何淘汰的?

    1. 定期选取部分数据删除;
    2. 惰性删除;

定期删除,也就是 Redis 默认每 1 秒运行 10 次(每 100 ms 执行一次),每次随机抽取一些设置了过期时间的 key,检查是否过期,如果发现过期了就直接删除。过期的 key 超过 25%,则继续执行,执行超过5ms后任务结束。 alt

6.内存耗尽,如何删除数据?

  • noenviction:不清除数据,只是返回错误,这样会导致浪费掉更多的内存,对大多数写命令(DEL 命令和其他的少数命令例外)
  • allkeys-lru:从所有的数据集(server.db[i].dict)中挑选最近最少使用的数据淘汰,以供新数据使用
  • volatile-lru:从已设置过期时间的数据集(server.db[i].expires)中挑选最近最少使用的数据淘汰,以供新数据使用
  • allkeys-random:从所有数据集(server.db[i].dict)中任意选择数据淘汰,以供新数据使用
  • volatile-random:从已设置过期时间的数据集(server.db[i].expires)中任意选择数据淘汰,以供新数据使用
  • volatile-ttl:从已设置过期时间的数据集(server.db[i].expires)中挑选将要过期的数据淘汰,以供新数据使用

7.如何保证数据库缓存的数据一致性?

  1. 分布式事务,一般不用。代价太大。
  2. binlog异步更新redis 或者 client同时更新数据库和redis。

alt

  1. 简述下主从不一致问题?

    1. 主库数据同步从库,会有一定时间差
    2. 索应用场景不能使用主从模式。
    3. 配置同步参数,一个命令的执行结束,设置为同步完从库数据后才算是成功。(一般不用)
  2. redis持久化原理?

save alt

bgsave alt

aop alt

  1. redis如何恢复?

11.为什么使用setnx?

  1. 原子性,命令意义:数据不存在情况下创建成功。
  2. 分布式锁,添加锁,nx是互斥(即这个key不存在才能创建),ex是设置超时时间set lock thread1 nx ex 10

redis分布式锁

扫码或搜索:前沿科技
发送 290992
即可立即永久解锁本站全部文章