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. Tomcat Server处理一个http请求的过程

    Tomcat Server处理一个http请求的过程 假设来自客户的请求为: http://localhost:8080/wsota/wsota_index.jsp 1) 请求被发送到本机端口8080 ...

  2. c#实现文件写入数据表/以二进制流保存到数据库,并实现下载

    上传: 1.上传文件先保存到服务器   File.SaveAs(path) 2.sql(文件和sql在一个服务器上)进行保存操作: insert into File(filename,filebody ...

  3. 代码详解:TensorFlow Core带你探索深度神经网络“黑匣子”

    来源商业新知网,原标题:代码详解:TensorFlow Core带你探索深度神经网络“黑匣子” 想学TensorFlow?先从低阶API开始吧~某种程度而言,它能够帮助我们更好地理解Tensorflo ...

  4. Java 定时任务的几种实现方式

    JAVA实现定时任务的几种方式 @(JAVA)[spring|quartz|定时器]  近期项目开发中需要动态的添加定时任务,比如在某个活动结束时,自动生成获奖名单,导出excel等,此类任务由于活动 ...

  5. (九)random、os、time、datetime、hashlib、pymysql、excel、sys、string相关模块

    1.random模块 1 import random,string 2 print(string.printable) #代表所有的 数字+字母+特殊字符 3 4 print(random.randi ...

  6. pyparsing自定义解析规则

    1.Word(token) 用于匹配由允许的字符集组成的单词,常见的错误是使用特定字符串Word("expr")匹配"expr" - L {alphas}  字 ...

  7. 【相关网站 - 01】- Java 相关网站

    一.官方网站 1. Java 官方网站 https://www.java.com/zh_CN/ 2. Spring 官方网站 http://spring.io/ 1. Spring Framework ...

  8. 模拟退火算法-旅行商问题-matlab实现

    整理一下数学建模会用到的算法,供比赛时候参考食用. —————————————————————————————————————————— 旅行商问题(TSP): 给定一系列城市和每对城市之间的距离,求 ...

  9. C# Common Code

    DatePicker 控件日期格式化,可以在App.xaml.cs中添加下面代码 方法一 不推荐: Thread.CurrentThread.CurrentCulture = (CultureInfo ...

  10. java 编程英语单词,语句

    记录一下java 编程工作学习中常用的英语汇总 in other words: 换句话说 dangle :悬挂 separated:分开的 distinct:明显的,独特的 actual :实际的 i ...