Java面试题之Redis
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的更多相关文章
- Java面试题(Redis篇)
Redis 179.redis 是什么?都有哪些使用场景? Redis是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,并提供多种语言的API. ...
- Java面试题(六)--Redis
1 Redis基础篇 1.简单介绍一下Redis优点和缺点? 优点: 1.本质上是一个 Key-Value 类型的内存数据库,很像memcached 2.整个数据库统统加载在内存当中进行操作,定期通过 ...
- Java面试题整理---Redis篇
1.redis支持五种数据结构类型? 2.redis内部结构? 3.redis持久化机制? 4.redis集群方案与实现? 5.redis为什么是单线程的? 6.redis常见回收 ...
- BATJ高级Java面试题分享:JVM+Redis+Kafka +数据库+设计模式
话不多说,直接上面试题,来看一下你还欠缺多少? Mysql 与 Oracle 相比, Mysql 有什么优势? 简洁描述 Mysql 中 InnoDB 支持的四种事务隔离级别名称,以及逐级之间的区别? ...
- Java笔试题解答和部分面试题
面试类 银行类的问题 问题一:在多线程环境中使用HashMap会有什么问题?在什么情况下使用get()方法会产生无限循环? HashMap本身没有什么问题,有没有问题取决于你是如何使用它的.比如,你 ...
- 拼多多、饿了么、蚂蚁金服Java面试题大集合
自己当初找工作时参加过众多一线互联网公司的Java研发面试,这段时间处于寒冬,然而前几天跳槽找工作,两天面了3家,已经拿了两个offer,觉得可以和大家分享下: 下面为拼多多.饿了么.蚂蚁金服.哈啰出 ...
- 一些常见的Java面试题 & 面试感悟
< 前言 > 近期在面试,深感这个行业的浮躁,一些菜不辣基的弱鸡开出的工资待遇要求,超过了我.不知道他们是怎么拿到那么高的工资的,难道是他在公司有亲戚朋友吗?有后台吗?是行业热钱真的过多了 ...
- 10个经典的Java面试题集合
这里有10个经典的Java面试题,也为大家列出了答案.这是Java开发人员面试经常容易遇到的问题,相信你了解和掌握之后一定会有所提高.让我们一起来看看吧. 1.Java的HashMap是如何工作的? ...
- 【面试必备】常见Java面试题大综合
一.Java基础 1.Arrays.sort实现原理和Collections.sort实现原理答:Collections.sort方法底层会调用Arrays.sort方法,底层实现都是TimeSort ...
随机推荐
- Tomcat Server处理一个http请求的过程
Tomcat Server处理一个http请求的过程 假设来自客户的请求为: http://localhost:8080/wsota/wsota_index.jsp 1) 请求被发送到本机端口8080 ...
- c#实现文件写入数据表/以二进制流保存到数据库,并实现下载
上传: 1.上传文件先保存到服务器 File.SaveAs(path) 2.sql(文件和sql在一个服务器上)进行保存操作: insert into File(filename,filebody ...
- 代码详解:TensorFlow Core带你探索深度神经网络“黑匣子”
来源商业新知网,原标题:代码详解:TensorFlow Core带你探索深度神经网络“黑匣子” 想学TensorFlow?先从低阶API开始吧~某种程度而言,它能够帮助我们更好地理解Tensorflo ...
- Java 定时任务的几种实现方式
JAVA实现定时任务的几种方式 @(JAVA)[spring|quartz|定时器] 近期项目开发中需要动态的添加定时任务,比如在某个活动结束时,自动生成获奖名单,导出excel等,此类任务由于活动 ...
- (九)random、os、time、datetime、hashlib、pymysql、excel、sys、string相关模块
1.random模块 1 import random,string 2 print(string.printable) #代表所有的 数字+字母+特殊字符 3 4 print(random.randi ...
- pyparsing自定义解析规则
1.Word(token) 用于匹配由允许的字符集组成的单词,常见的错误是使用特定字符串Word("expr")匹配"expr" - L {alphas} 字 ...
- 【相关网站 - 01】- Java 相关网站
一.官方网站 1. Java 官方网站 https://www.java.com/zh_CN/ 2. Spring 官方网站 http://spring.io/ 1. Spring Framework ...
- 模拟退火算法-旅行商问题-matlab实现
整理一下数学建模会用到的算法,供比赛时候参考食用. —————————————————————————————————————————— 旅行商问题(TSP): 给定一系列城市和每对城市之间的距离,求 ...
- C# Common Code
DatePicker 控件日期格式化,可以在App.xaml.cs中添加下面代码 方法一 不推荐: Thread.CurrentThread.CurrentCulture = (CultureInfo ...
- java 编程英语单词,语句
记录一下java 编程工作学习中常用的英语汇总 in other words: 换句话说 dangle :悬挂 separated:分开的 distinct:明显的,独特的 actual :实际的 i ...