欢迎关注专栏:Java架构技术进阶。里面有大量batj面试题集锦,还有各种技术分享,如有好文章也欢迎投稿哦。 微信公众号:慕容千语的架构笔记。欢迎关注一起进步。
1、什么是 Redis?简述它的优缺点?

Redis 的全称是:Remote Dictionary.Server,本质上是一个 Key-Value 类型的内存数据库,很像memcached,整个数据库统统加载在内存当中进行操作,定期通过异步操作把数据库数据 flush 到硬盘上进行保存。

因为是纯内存操作,Redis 的性能非常出色,每秒可以处理超过 10 万次读写操作,是已知性能最快的Key-Value DB。

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

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

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

  1. memcached 所有的值均是简单的字符串,redis 作为其替代者,支持更为丰富的数据类型
  2. redis 的速度比 memcached 快很多 redis 的速度比 memcached 快很多
  3. 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)较短的键,使得新添加的数据有空间存放。

6、Redis官方为什么不提供Windows版本?

因为目前Linux版本已经相当稳定,而且用户量很大,无需开发windows版本,反而会带来兼容性等问题。

7、一个字符串类型的值能存储最大容量是多少?

512M

8、为什么Redis需要把所有数据放到内存中?

Redis为了达到最快的读写速度将数据都读到内存中,并通过异步的方式将数据写入磁盘。所以redis具有快速和数据持久化的特征,如果不将数据放在内存中,磁盘I/O速度会严重影响redis的性能。在内存越来越便宜的今天,redis将会越来越受欢迎,如果设置了最大使用的内存,则数据已有记录数达到内存限值后不能继续插入新值。

9、Redis集群方案应该怎么做?都有哪些方案?

  1. codis
  2. 目前用的最多的集群方案,基本和twemproxy一致的效果,但它支持在节点数量改变情况下,旧节点数据可恢复到新hash节点。rediscluster3.0自带的集群,特点在于他的分布式算法不是一致性hash,而是hash槽的概念,以及自身支持节点设置从节点。具体看官方文档介绍。
  3. 在业务代码层实现,起几个毫无关联的redis实例,在代码层,对key进行hash计算,然后去对应的redis实例操作数据。这种方式对hash层代码要求比较高,考虑部分包括,节点失效后的替代算法方案,数据震荡后的自动脚本恢复,实例的监控,等等。

10、Redis集群方案什么情况下会导致整个集群不可用?

有A,B,C三个节点的集群,在没有复制模型的情况下,如果节点B失败了,那么整个集群就会以为缺少5501-11000这个范围的槽而不可用。

11、MySQL里有2000w数据,redis中只存20w的数据,如何保证redis中的数据都是热点数据?

redis内存数据集大小上升到一定大小的时候,就会施行数据淘汰策略。

12、Redis有哪些适合的场景?

(1)会话缓存(SessionCache)

最常用的一种使用Redis的情景是会话缓存(sessioncache),用Redis缓存会话比其他存储(如Memcached)的优势在于:Redis提供持久化。当维护一个不是严格要求一致性的缓存时,如果用户的购物车信息全部丢失,大部分人都会不高兴的,现在,他们还会这样吗?幸运的是,随着Redis这些年的改进,很容易找到怎么恰当的使用Redis来缓存会话的文档。甚至广为人知的商业平台Magento也提供Redis的插件。

(2)全页缓存(FPC)

除基本的会话token之外,Redis还提供很简便的FPC平台。回到一致性问题,即使重启了Redis实例,因为有磁盘的持久化,用户也不会看到页面加载速度的下降,这是一个极大改进,类似PHP本地FPC。再次以Magento为例,Magento提供一个插件来使用Redis作为全页缓存后端。此外,对WordPress的用户来说,Pantheon有一个非常好的插件wp-redis,这个插件能帮助你以最快速度加载你曾浏览过的页面。

(3)队列

Reids在内存存储引擎领域的一大优点是提供list和set操作,这使得Redis能作为一个很好的消息队列平台来使用。Redis作为队列使用的操作,就类似于本地程序语言(如Python)对list的push/pop操作。如果你快速的在Google中搜索“Redisqueues”,你马上就能找到大量的开源项目,这些项目的目的就是利用Redis创建非常好的后端工具,以满足各种队列需求。例如,Celery有一个后台就是使用Redis作为broker,你可以从这里去查看。

(4)排行榜/计数器

Redis在内存中对数字进行递增或递减的操作实现的非常好。集合(Set)和有序集合(SortedSet)也使得我们在执行这些操作的时候变的非常简单,Redis只是正好提供了这两种数据结构。所以,我们要从排序集合中获取到排名最靠前的10个用户–我们称之为“user_scores”,我们只需要像下面一样执行即可:当然,这是假定你是根据你用户的分数做递增的排序。如果你想返回用户及用户的分数,你需要这样执行:

ZRANGE user_scores 0 10 WITHSCORES

AgoraGames就是一个很好的例子,用Ruby实现的,它的排行榜就是使用Redis来存储数据的,你可以在这里看到。

(5)发布/订阅

最后(但肯定不是最不重要的)是Redis的发布/订阅功能。发布/订阅的使用场景确实非常多。我已看见人们在社交网络连接中使用,还可作为基于发布/订阅的脚本触发器,甚至用Redis的发布/订阅功能来建立聊天系统!

13、Redis支持的Java客户端都有哪些?官方推荐用哪个?

Redisson、Jedis、lettuce等等,官方推荐使用Redisson。

14、Redis和Redisson有什么关系?

Redisson是一个高级的分布式协调Redis客服端,能帮助用户在分布式环境中轻松实现一些Java的对象(Bloomfilter,BitSet,Set,SetMultimap,ScoredSortedSet,SortedSet,Map,ConcurrentMap,List,ListMultimap,Queue,BlockingQueue,Deque,BlockingDeque,Semaphore,Lock,ReadWriteLock,AtomicLong,CountDownLatch,Publish/Subscribe,HyperLogLog)。

15、Jedis与Redisson对比有什么优缺点?

Jedis是Redis的Java实现的客户端,其API提供了比较全面的Redis命令的支持;Redisson实现了分布式和可扩展的Java数据结构,和Jedis相比,功能较为简单,不支持字符串操作,不支持排序、事务、管道、分区等Redis特性。Redisson的宗旨是促进使用者对Redis的关注分离,从而让使用者能够将精力更集中地放在处理业务逻辑上。

16、说说Redis哈希槽的概念?

Redis集群没有使用一致性hash,而是引入了哈希槽的概念,Redis集群有16384个哈希槽,每个key通过CRC16校验后对16384取模来决定放置哪个槽,集群的每个节点负责一部分hash槽。

17、Redis集群的主从复制模型是怎样的?

为了使在部分节点失败或者大部分节点无法通信的情况下集群仍然可用,所以集群使用了主从复制模型,每个节点都会有N-1个复制品.

18、Redis集群会有写操作丢失吗?为什么?

Redis并不能保证数据的强一致性,这意味这在实际中集群在特定的条件下可能会丢失写操作。

19、Redis集群之间是如何复制的?

异步复制

20、Redis集群最大节点个数是多少?

16384个

21、Redis集群如何选择数据库?

Redis集群目前无法做数据库选择,默认在0数据库。

22、Redis中的管道有什么用?

一次请求/响应服务器能实现处理新的请求即使旧的请求还未被响应,这样就可以将多个命令发送到服务器,而不用等待回复,最后在一个步骤中读取该答复。这就是管道(pipelining),是一种几十年来广泛使用的技术。例如许多POP3协议已经实现支持这个功能,大大加快了从服务器下载新邮件的过程。

23、怎么理解Redis事务?

事务是一个单独的隔离操作:事务中的所有命令都会序列化、按顺序地执行,事务在执行的过程中,不会被其他客户端发送来的命令请求所打断。事务是一个原子操作:事务中的命令要么全部被执行,要么全部都不执行。

24、Redis事务相关的命令有哪几个?

MULTI、EXEC、DISCARD、WATCH

25、Rediskey的过期时间和永久有效分别怎么设置?

EXPIRE和PERSIST命令

26、Redis如何做内存优化?

尽可能使用散列表(hashes),散列表(是说散列表里面存储的数少)使用的内存非常小,所以你应该尽可能的将你的数据模型抽象到一个散列表里面。比如你的web系统中有一个用户对象,不要为这个用户的名称,姓氏,邮箱,密码设置单独的key,而是应该把这个用户的所有信息存储到一张散列表里面。

27、Redis回收进程如何工作的?

一个客户端运行了新的命令,添加了新的数据。Redi检查内存使用情况,如果大于maxmemory的限制,则根据设定好的策略进行回收。一个新的命令被执行,等等。所以我们不断地穿越内存限制的边界,通过不断达到边界然后不断地回收回到边界以下。如果一个命令的结果导致大量内存被使用(例如很大的集合的交集保存到一个新的键),不用多久内存限制就会被这个内存使用量超越。

28.加锁机制

29.锁互斥机制

30.watchdog自动延期机制

31.可重入加锁机制

32.释放锁机制

33.上述Redis分布式锁的缺点

34.使用过Redis分布式锁么,它是怎么实现的?

35.使用过Redis做异步队列么,你是怎么用的?有什么缺点?

36.什么是缓存穿透?如何避免?什么是缓存雪崩?何如避免?

​欢迎转发,欢迎评论,您的点赞关注是对笔者最大的支持。感谢

欢迎关注专栏:Java架构技术进阶。里面有大量batj面试题集锦,还有各种技术分享,如有好文章也欢迎投稿哦。 微信公众号:慕容千语的架构笔记。欢迎关注一起进步。

金九银十:Redis难题突破,最经典36题含详细解析相关推荐

  1. 金九银十面试必备:TCP 经典 15 连问!

    TCP协议是大厂面试必问的知识点.整理了15道非常经典的TCP面试题,希望大家都找到理想的offer呀 1.  讲下TCP三次握手流程 开始客户端和服务器都处于CLOSED状态,然后服务端开始监听某个 ...

  2. Redis 难题突破,最经典 46 题含详细解析

    1.什么是 Redis? Redis 是完全开源免费的,遵守 BSD 协议,是一个高性能的 key-value 数据库. Redis 与其他 key - value 缓存产品有以下三个特点: (1)R ...

  3. 最新金九银十JAVA面试总结:Java+并发+Spring+MySQL+分布式+Redis+算法+JVM等

    ** 金九银十的面试旺季即将到来,大家准备的怎么样了?** 今年的处境大家都挺难的,但是也不要因此而堕落,太闲了,就多刷题.坚持学习总归是对自己有好处的. 在此,整理了下金九银十的面试知识点(附答案) ...

  4. 阿里内网最新发布“M8”级Java面试笔记,助力金九银十

    眼下虽然才6月份,但真正的金九银十已经悄然开始.从认识的HR那得知,有些公司甚至在过年前就开始布局了..而年前偃旗息鼓的,年后也势必加速进入这波抢人大战! 附面试思维导图: 因此,真的要等到9.10月 ...

  5. 金九银十,不要跳槽!

    前言: 又到了求职的金九银十的黄金月份,我相信有不少小伙伴已经摩拳擦掌的准备寻找下一份工作. 就目前国内的面试模式来讲,在面试前积极的准备面试,复习整个 Java 知识体系将变得非常重要,可以很负责任 ...

  6. blob字段乱码怎么处理_金九银十,你准备好了吗?没点Python面试题干货怎么行?(一)...

    职场人没有不知道:金三银四,金九银十 的说法儿吧,今天干货奉上,100个Python面试高频题目. 一. 遇到过得反爬虫策略以及解决方法? 1.通过headers反爬虫 2.基于用户行为的发爬虫:(同 ...

  7. 金九银十,做一个百度喜欢的淘宝客网站

    随着淘宝销售旺季-金九银十的到来,淘宝客一词似乎又一次火爆起来,这一群人似乎依然热情高涨,无论新手,老鸟,都忘乎所以的奔向这片炙手可热的红海,毕竟类似淘宝客这种超低门槛的网赚手段还是十分的吸引人,更不 ...

  8. 十月一“闭关修炼”,读完这些Java技术栈,愿金九银十过五斩六

    十月一由于疫情还是有很多人为了安全不会去旅游,实际上,对于有跳槽打算的人来说,现在正是"闭关修炼"的好时机,但很多人不知道从何开始学习,也正为即将到来的金九银十发愁!今天,小编就要 ...

  9. 闭关30天,献上【Java一线大厂高岗面试题解析合集】,冲刺金九银十!

    概述 时间不等人,2022年转眼就要过去大半了,春招在疫情中度过,不知有多少人还在惋惜... 马上又是秋招的高峰"金九银十",估计现在就已经有不少的程序猿(媛)朋友早就踏上提前批之 ...

最新文章

  1. sql增删改查_增删改查!sql2pandas方法手册
  2. java中queue排序_Java中常见的排序算法有哪些?---选择排序
  3. 插件框架实现思路及原理
  4. 一个颜值低但脾气超好的自动化运维实战入门教程
  5. 微软 PowerBI 被评为商业智能领导者-13年的企业产品奋斗史解读
  6. css之hover改变子元素和其他元素样式
  7. 如何在 Ubuntu 14.04 里面配置 chroot 环境
  8. Python生态工具、文本处理和系统管理(虚拟)
  9. VMD的相关命令(转载)
  10. 一个html可以有几个h1,一个页面可以有多个H1标签吗?
  11. 深度学习图像分类(二):AlexNet
  12. AS SSD Benchmark 免费固态跑分工具分享
  13. 自定义xml解析框架
  14. nginx自动切割访问日志
  15. 微信开发工具 git代码管理
  16. python画超长图-python实现按长宽比缩放图片
  17. Linux虚拟机添加新硬盘
  18. Unable to load script code in VisualGuidance.The script will not be used until the error 的错误的解决方法
  19. MySQL 启停过程了解一二
  20. 根据身高体重计算标准身高和BMI指数

热门文章

  1. 浙江省公布2018年省级企业研究院名单,杭州巨峰科技上榜!
  2. 秀币Showcoin:区块链+直播何以抟扶摇而上
  3. 小型企业网络存储服务器系统方案,小型企业存储服务器架构
  4. n9009+android+4.4.2,三星N9009 (Galaxy Note 3 电信版 Android 4.4)一键刷机图文教程,看教程秒懂刷机...
  5. RabbitMQ 服务异步通信 -- 入门案例(消息预存机制)、SpringAMQP、发布订阅模式(FanoutExchange、DirectExchange、TopicExchange)、消息转换器
  6. Linux下plink软件使用方法,#软件工具#解密GWAS的利器--Plink 使用解析
  7. 台式计算机控制面板里没有无线网络,为何台式电脑里没有无线wifi这一选项
  8. 强制卸载额外域控制器
  9. ICEYE星座-芬兰-2018
  10. Nuttx signal