Redis面试灵魂36问,你怀疑人生吗?

前言:

说到面试,那就要好好准备下,不准备充分的面试,完全是浪费时间,更是对自己的不负责。那么面试的知识点是哪些呢?

经过大多数朋友面试过后的反馈,Java面试重点如下:

数据结构与算法,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. 什么是缓存穿透?如何避免?什么是缓存雪崩?何如避免?

面试题答案

1、什么是 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适合的场景主要局限在较小数据量的高性能操作和运算上。

2、Redis与memcached相比有哪些优势?

  • memcached所有的值均是简单的字符串,redis作为其替代者,支持更为丰富的数据类型
  • redis的速度比memcached快很多redis的速度比memcached快很多
  • redis可以持久化其数据redis可以持久化其数据

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

String、List、Set、SortedSet、hashes

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

内存。

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

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

文中一些面试真题的答案,可以关注小编微信公众号【Java程序员聚集地】获取免费资料。

Redis面试灵魂36问,你怀疑人生吗?_第1张图片

 

你可能感兴趣的:(Java,程序员)