1.redis数据结构有哪些?

  string,list,hash,set,zset

2.redis为什么是单线程的?

  redis是基于内存的操作,cpu不是redis的瓶颈,内存大小或网络带宽才是;

3.redis为什么这么快?

  1.redis是完全基于内存操作;

  2.数据结构简单,操作也不复杂;

  3.采用单线程可以避免不必要的上下文切换和竞争条件,不存在多线程切换导致的cpu消耗,不需要考虑锁的问题,不会出现死锁而导致的cpu消耗问题;

  4.使用单线程多路I/O复用模型实现高性能的内存数据服务。

4.Redis缓存穿透,缓存雪崩?

  缓存穿透:用户查询的数据在数据库中没有,在缓存中自然也不会有。这样导致查询的时候,在缓存中没有,每次都要去数据库查询一遍,然后每次都返回空,想到与进行了两次无用的操作。

  缓存雪崩:由于原有缓存失效,新缓存未到期,原本应该访问缓存的请求全部变成访问数据库,从而对数据库,cpu和内存造成巨大压力,严重会造成数据库宕机,最终导致整个系统的崩溃。

  缓存预热:系统上线后直接将相关的缓存数据加载到缓存系统,以避免用户请求时先查询数据库,再将数据缓存的问题。

5.如何使用Redis来实现分布式锁?

  setnx

6.Redis的并发竞争问题如何解决?

  多客户端同时并发写一个key,可能本来应该先到的数据后到了,导致数据版本错了。或者是多客户端同时获取一个key,修改值之后再写回去,只要顺序错了,数据就错了。

  解决:

  1.使用独占锁,实现复杂,成本较高;

  2.使用乐观锁,成本较低,非阻塞,性能较高;本质上是假设不会进行冲突,使用redis命令watch进行构造条件。

7.Redis持久化的几种方式,优缺点是什么,怎么实现的?

  RDB快照:将当前内存中的数据持久化到硬盘,恢复时将快照文件读取到内存中。

  触发方式:1.自动触发2.手动触发

  save:save 60 1000 60s有超过1000次key值的变化则保存。该命令执行期间会阻塞Redis服务器,不能执行其它命令,直到RDB完成,对内存较大的实例会造成长时间阻塞。

  bgsave执行该命令时,Redis在后台异步执行快照操作,同时可以响应客户端请求。具体操作是Redis进程执行fork操作创建子进程,RDB过程由子进程负责,完成后自动结束。阻塞只会发生在fork阶段,一般时间很短。

  AOF:把写操作命令记录到日志中。

  比较:RDB发生宕机会丢失最后一次备份后的所有写入数据;数据比较庞大时fork()可能会非常耗时,造成服务器在数百毫秒内停止处理客户端;

8.Redis的缓存淘汰策略?

  常用的淘汰算法:

  1.FIFO:first in first out,先进先出。判断被存储的时间,离目前最远的数据优先被淘汰。

  2.LRU:least recently used,最近最少使用。判断最近被使用的时间,目前最远的数据优先被淘汰。

  3.LFU:least frequently used,最近不经常使用。在最近的一段时间内,数据被使用次数最少的,被优先淘汰。

  淘汰策略:

  1.volatile-lru:从已设置过期时间的数据集(server.db[i].expire)中挑选最近最少使用的数据淘汰

  2.volatile-ttl:从已设置过期时间的数据集中挑选将要过期的数据淘汰

  3.vovatile-random:从已设置过期时间的数据集中随即挑选数据淘汰

  4.allkeys-lru:从数据集中挑选最近最少使用的数据淘汰

  5.allkeys-randim:从数据集中随即挑选数据淘汰

  6.no-enviction(驱逐):禁止驱逐数据

9.Redis集群,高可用,原理?

  redis-cluster

10.Redis缓存分片?

11.redis队列应用场景?

11.分布式使用场景(储存session)?

Java面试题之Redis的更多相关文章

  1. Java面试题(Redis篇)

    Redis 179.redis 是什么?都有哪些使用场景? Redis是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,并提供多种语言的API. ...

  2. Java面试题(六)--Redis

    1 Redis基础篇 1.简单介绍一下Redis优点和缺点? 优点: 1.本质上是一个 Key-Value 类型的内存数据库,很像memcached 2.整个数据库统统加载在内存当中进行操作,定期通过 ...

  3. Java面试题整理---Redis篇

    1.redis支持五种数据结构类型?   2.redis内部结构?   3.redis持久化机制?   4.redis集群方案与实现?   5.redis为什么是单线程的?   6.redis常见回收 ...

  4. BATJ高级Java面试题分享:JVM+Redis+Kafka +数据库+设计模式

    话不多说,直接上面试题,来看一下你还欠缺多少? Mysql 与 Oracle 相比, Mysql 有什么优势? 简洁描述 Mysql 中 InnoDB 支持的四种事务隔离级别名称,以及逐级之间的区别? ...

  5. Java笔试题解答和部分面试题

    面试类  银行类的问题 问题一:在多线程环境中使用HashMap会有什么问题?在什么情况下使用get()方法会产生无限循环? HashMap本身没有什么问题,有没有问题取决于你是如何使用它的.比如,你 ...

  6. 拼多多、饿了么、蚂蚁金服Java面试题大集合

    自己当初找工作时参加过众多一线互联网公司的Java研发面试,这段时间处于寒冬,然而前几天跳槽找工作,两天面了3家,已经拿了两个offer,觉得可以和大家分享下: 下面为拼多多.饿了么.蚂蚁金服.哈啰出 ...

  7. 一些常见的Java面试题 & 面试感悟

    < 前言 > 近期在面试,深感这个行业的浮躁,一些菜不辣基的弱鸡开出的工资待遇要求,超过了我.不知道他们是怎么拿到那么高的工资的,难道是他在公司有亲戚朋友吗?有后台吗?是行业热钱真的过多了 ...

  8. 10个经典的Java面试题集合

    这里有10个经典的Java面试题,也为大家列出了答案.这是Java开发人员面试经常容易遇到的问题,相信你了解和掌握之后一定会有所提高.让我们一起来看看吧. 1.Java的HashMap是如何工作的? ...

  9. 【面试必备】常见Java面试题大综合

    一.Java基础 1.Arrays.sort实现原理和Collections.sort实现原理答:Collections.sort方法底层会调用Arrays.sort方法,底层实现都是TimeSort ...

随机推荐

  1. js 监听手机端键盘弹出和收起事件

    //这里区分不同系统,可以参考之前的文档记录 https://www.cnblogs.com/wind-wang/p/10737110.html const ua = typeof window == ...

  2. sklearn中的SVM

    scikit-learn中SVM的算法库分为两类,一类是分类的算法库,包括SVC, NuSVC,和LinearSVC 3个类.另一类是回归算法库,包括SVR, NuSVR,和LinearSVR 3个类 ...

  3. 基于Ubuntu系统XAMPP环境安装以及DVWA渗透测试系统安装(详解的不能再详解了)

    首先这是X勺年人生第二次博,用来记录一下转折于我而言.做个简介,这个Ubuntu是linux的一种吧,然 然后这个Ubuntu是我刚简单安装(在虚拟机上)没有经过任何配置,从头开始,我这绝壁的小白,其 ...

  4. CSS 图像高级 径向渐变

    径向渐变 径向渐变使用 radial-gradient 函数语法. 这个语法和线性渐变很类似, 可以指定渐变结束时的形状 以及它的大小. 默认来说,结束形状是一个椭圆形并且和容器的大小比例保持一致. ...

  5. python之集合及其方法---整理集

    集合的定义: 由不同元素组成.一组无序排列的可hash值.集合中元素必须是不可变类型 集合的定义方式: 由大括号组成: 每个元素用逗号分隔: 元素书写不是key-value形式: 集合是由不同元素组成 ...

  6. eclipse中的web项目部署路径

    elipse添加了server之后,如果不对tomcat的部署路径做更改,则eclipse默认对工程的部署在 eclipse-workspace\.metadata.plugins\org.eclip ...

  7. 项目总结21:项目总结21:input实现多图上传(FormData)(上传OSS并保存数据库)

    项目总结21:input实现多图上传(FormData)(上传OSS并保存数据库) 备注:本案例,作为Demo,包含少量的项目业务逻辑,input多图上传的逻辑是完整的: 不废话直接上代码 1-前端标 ...

  8. vue的事件处理梳理

    一.事件函数 1.v-on绑定click,执行一个函数 <input type="button" v-on:click="test" value=&quo ...

  9. VS2017上使用RDLC Report

    1,要先在“工具”-“扩展与更新”中搜索“RDLC"进行安装.(出来的结果有两个,安装第一个有三个星评分的,第二个是没评分的) 2,在NuGet包管理器中搜索”reportviewercon ...

  10. 迁移virtualenv环境

    记录一次将window上的virtualenv部署至LINUX服务器 前提 你已经使用virtualenv创建了一个虚拟的python运行环境,并且已经完成了你的应用的开发,现在需要将工程部署到服务器 ...