Redis面试灵魂36问,你怀疑人生吗?(含答案)

前言:

说到面试,那就要好好准备下,不许备充分的面试,彻底是浪费时间,更是对本身的不负责。那么面试的知识点是哪些呢?面试

通过大多数朋友面试事后的反馈,Java面试重点以下:redis

数据结构与算法,JVM内存结构、垃圾回收器、回收算法、GC、并发编程相关(多线程、线程池等)、NIO/BIO、性能优化、设计模式、Spring框架:分布式相关:Redis、一致Hash算法、分布式存储、负载均衡等,微服务以及Docker容器等。算法

今天下面就列举的是Redis的相关面试问题,看看你是否能答出来。数据库

Redis高级面试专题

  1. 什么是 Redis?简述它的优缺点?
  2. Redis与memcached相比有哪些优点?
  3. Redis支持哪几种数据类型?
  4. Redis主要消耗什么物理资源?
  5. Redis有哪几种数据淘汰策略?
  6. Redis官方为何不提供Windows版本?
  7. 一个字符串类型的值能存储最大容量是多少?
  8. 为何Redis须要把全部数据放到内存中?
  9. Redis集群方案应该怎么作?都有哪些方案?
  10. Redis集群方案什么状况下会致使整个集群不可用?
  11. MySQL里有2000w数据,redis中只存20w的数据,如何保证redis中的数据都是热点数据?
  12. Redis有哪些适合的场景?
  13. Redis支持的Java客户端都有哪些?官方推荐用哪一个?
  14. Redis和Redisson有什么关系?
  15. Jedis与Redisson对比有什么优缺点?
  16. 说说Redis哈希槽的概念?
  17. Redis集群的主从复制模型是怎样的?
  18. Redis集群会有写操做丢失吗?为何?
  19. Redis集群之间是如何复制的?
  20. Redis集群最大节点个数是多少?
  21. Redis集群如何选择数据库?
  22. Redis中的管道有什么用?
  23. 怎么理解Redis事务?
  24. Redis事务相关的命令有哪几个?
  25. Rediskey的过时时间和永久有效分别怎么设置?
  26. Redis如何作内存优化?
  27. Redis回收进程如何工做的?
  28. 加锁机制
  29. 锁互斥机制
  30. watchdog自动延期机制
  31. 可重入加锁机制
  32. 释放锁机制
  33. 上述Redis分布式锁的缺点
  34. 使用过Redis分布式锁么,它是怎么实现的?
  35. 使用过Redis作异步队列么,你是怎么用的?有什么缺点?
  36. 什么是缓存穿透?如何避免?什么是缓存雪崩?何如避免?

面试题答案

一、什么是 Redis?简述它的优缺点?编程

Redis的全称是:RemoteDictionary.Server,本质上是一个Key-Value类型的内存数据库,很像memcached,整个数据库通通加载在内存当中进行操做,按期经过异步操做把数据库数据flush到硬盘上进行保存。设计模式

由于是纯内存操做,Redis的性能很是出色,每秒能够处理超过10万次读写操做,是已知性能最快的Key-ValueDB。缓存

Redis的出色之处不单单是性能,Redis最大的魅力是支持保存多种数据结构,此外单个value的最大限制是1GB,不像memcached只能保存1MB的数据,所以Redis能够用来实现不少有用的功能。比方说用他的List来作FIFO双向链表,实现一个轻量级的高性能消息队列服务,用他的Set能够作高性能的tag系统等等。性能优化

另外Redis也能够对存入的Key-Value设置expire时间,所以也能够被看成一个功能增强版的memcached来用。Redis的主要缺点是数据库容量受到物理内存的限制,不能用做海量数据的高性能读写,所以Redis适合的场景主要局限在较小数据量的高性能操做和运算上。数据结构

二、Redis与memcached相比有哪些优点?多线程

  • memcached全部的值均是简单的字符串,redis做为其替代者,支持更为丰富的数据类型
  • redis的速度比memcached快不少redis的速度比memcached快不少
  • redis能够持久化其数据redis能够持久化其数据

三、Redis支持哪几种数据类型?

String、List、Set、SortedSet、hashes

四、Redis主要消耗什么物理资源?

内存。

五、Redis有哪几种数据淘汰策略?

  1. noeviction:返回错误当内存限制达到,而且客户端尝试执行会让更多内存被使用的命令。
  2. allkeys-lru:尝试回收最少使用的键(LRU),使得新添加的数据有空间存放。
  3. volatile-lru:尝试回收最少使用的键(LRU),但仅限于在过时集合的键,使得新添加的数据有空间存放。
  4. allkeys-random:回收随机的键使得新添加的数据有空间存放。
  5. volatile-random:回收随机的键使得新添加的数据有空间存放,但仅限于在过时集合的键。
  6. volatile-ttl:回收在过时集合的键,而且优先回收存活时间(TTL)较短的键,使得新添加的数据有空间存放。

你的关注和点赞都是对笔者最大的支持。

相关文章
相关标签/搜索