Java性能之多,分布式是很重要的一块,在很多企业里,应用的分布式存储以及运行,都是为了提升java程序运行的效率以及运行环境的提升。拉勾IT课小编为大家分解,分布式相关资料。

1.Redis和Memcache的区别?

1、存储方式 Memecache把数据全部存在内存之中,断电后会挂掉,数据不能超过内存大小。 Redis有部份存在硬盘上,redis可以持久化其数据

2、数据支持类型 memcached所有的值均是简单的字符串,redis作为其替代者,支持更为丰富的数据类型 ,提供list,set,zset,hash等数据结构的存储

3、使用底层模型不同 它们之间底层实现方式 以及与客户端之间通信的应用协议不一样。 Redis直接自己构建了VM 机制 ,因为一般的系统调用系统函数的话,会浪费一定的时间去移动和请求。

4、value 值大小不同:Redis 最大可以达到 1gb;memcache 只有 1mb。

5、redis的速度比memcached快很多

6、Redis支持数据的备份,即master-slave模式的数据备份。

2.使用Redis有哪些好处?

(1) 速度快,因为数据存在内存中,类似于HashMap,HashMap的优势就是查找和操作的时间复杂度都是O(1)

(2) 支持丰富数据类型,支持string,list,set,sorted set,hash

(3) 支持事务,操作都是原子性,所谓的原子性就是对数据的更改要么全部执行,要么全部不执行

(4) 丰富的特性:可用于缓存,消息,按key设置过期时间,过期后将会自动删除

3.什么是redis持久化?rdb和aof的比较?

持久化就是把内存的数据写到磁盘中去,防止服务宕机了内存数据丢失。

比较:

1、aof文件比rdb更新频率高,优先使用aof还原数据。

2、aof比rdb更安全也更大

3、rdb性能比aof好

4、如果两个都配了优先加载AOF

4.Redis最适合的场景?

(1)、会话缓存(Session Cache)

最常用的一种使用Redis的情景是会话缓存(session cache)。用Redis缓存会话比其他存储(如Memcached)的优势在于: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 操作。

(4),排行榜/计数器

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

(5)、发布/订阅

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

5.redis哈希槽的概念?

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

6.怎么理解Redis事务?

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

7.redis的淘汰策略有哪些?

noeviction:返回错误当内存限制达到并且客户端尝试执行会让更多内存被使用的命令(大部分的写入指令,但DEL和几个例外)

allkeys-lru: 尝试回收最少使用的键(LRU),使得新添加的数据有空间存放。

volatile-lru: 尝试回收最少使用的键(LRU),但仅限于在过期集合的键,使得新添加的数据有空间存放。

allkeys-random: 回收随机的键使得新添加的数据有空间存放。

volatile-random: 回收随机的键使得新添加的数据有空间存放,但仅限于在过期集合的键。

volatile-ttl: 回收在过期集合的键,并且优先回收存活时间(TTL)较短的键,使得新添加的数据有空间存放。

8.redis有哪些数据结构?

String、List、Set、Zset(Sorted Set)、hash

9.redis 缓存穿透、缓存雪崩、缓存击穿?

缓存穿透:无效ID,在redis缓存中查不到,去查询DB,造成DB压力增大。

解决方法:

1、解决方法1:布隆过滤器,提供一个很大的Bit-Map,提供多个hash函数,分别对查询参数值【比如UUID】,进行求hash,然后分别对多个hash结果,在对应位置对比是否全为1或者某个位置为0,一旦有一个位置标识为0,表示本次查询UUID,不存在于缓存,再去查询DB.起到一个再过滤的效果。

2、解决方法2:把无效的ID,也在redis缓存起来,并设置一个很短的超时时间。

缓存雪崩:缓存同一时间批量失效,导致大量的访问直接访问DB

解决方法:

  在做缓存时候,就做固定失效时间+随机时间段,保证所有的缓存不会同一时间失效

缓存击穿:在缓存失效的时候,会有高并发访问失效的缓存【热点数据】

解决方法:

  最简单的解决方法,就是将热点数据设置永不超时!

  第二个解决方法:对访问的Key加上互斥锁,请求的Key如果不存在,则加锁,去数据库取,新请求过来,如果相同KEy,则暂停10s再去缓存取值;如果Key不同,则直接去缓存取!

10.redis如何实现高并发?

redis通过一主多从,主节点负责写,从节点负责读,读写分离,从而实现高并发。

yum -y list java* 缓存加载不了_Java开发面试宝典:分布式相关篇相关推荐

  1. java 重定向到某个页面并弹出消息_Java开发面试宝典之网络通信篇

    Java开发过程中,面试时很重要的环节,想成为java开发工程师,需要面试环节,同时网络通信这一环节是很多java开发工程师必备技能,因此,拉勾IT课小编为大家提供网络通信篇面试 1.http协议的状 ...

  2. java动态加载类 框架_java运用RMI框架类的动态加载不成功

    最近在看<java网络编程精解>,第11章中用RMI动态加载类,可怎么试都不成功,求大神解答 1. 我先在C盘下启动了rmiregistry注册表,如果部署成功注册表应该会从codebas ...

  3. java 手动加载数据库驱动_JAVA加载数据库驱动(JDBC)

    JAVA加载数据库驱动(JDBC) 前言 之前,对Class.forName("com.mysql.jdbc.Driver");这条动态加载JDBC驱动感觉很疑惑,故有了这篇短文. ...

  4. java无法加载主类_java运行显示“找不到或无法加载主类”!

    java运行显示"找不到或无法加载主类"!一般都自然想到是环境没配置好.但是 也可能是,绝对路径的问题. 今天一个不会java的朋友也不知道从哪整了一个java文件让我帮忙运行一下 ...

  5. java无法加载jdbc驱动_java – 无法加载JDBC驱动程序.为什么? (春,休眠)

    我在两周前通过Maven创建了一个程序(SPRING HIBERNATE),现在它在加载JDBC驱动程序时遇到了问题(直到现在才发生).所以,我的pom.xml文件如下所示: xsi:schemaLo ...

  6. java无法加载主类_Java找不到或无法加载主类及编码错误问题的解决方案

    先给出具体代码(当前目录为:D:\pro): package org.test; public class TestJava{ public static void main(String args[ ...

  7. python request 等待网页加载_用Python开发爬虫,看这篇文章就够了

    现在Python语言大火,在网络爬虫.人工智能.大数据等领域都有很好的应用.今天我向大家介绍一下Python爬虫的一些知识和常用类库的用法,希望能对大家有所帮助. 其实爬虫这个概念很简单,基本可以分成 ...

  8. 启动java服务时刷新缓存_Spring java项目对外提供服务和java进程启动时bean,内部缓存加载的先后关系?...

    Spring java项目对外提供服务有这么几种,一种是web服务,譬如tomcat,一种是RPC服务,譬如dubbo,thrift.总的来说就是对外开放某个/些端口,接收请求. Spring工程项目 ...

  9. java fullcalendar_fullCalendar 采用Java ajax加载后台日程事件

    找了半天的资料,都是php的,在自己的项目中做了一个java ajax加载后台日程的jquery,核心代码如下: var date = new Date(); var d = date.getDate ...

最新文章

  1. JavaScript 事件冒泡简介及应用(转)
  2. 42岁著名黑客去世,曾拯救互联网:揭开索尼“罪行”、发现DNS漏洞
  3. 用archoctopus下载花瓣
  4. 16.matlab中各种文件的I/O操作1——load/save
  5. 编译php5遇到iconv错误的解决方法
  6. 使用Bootstrap开发网站首页
  7. 小议Python列表和元组中的元素地址连续性
  8. spring,mybatis事务管理配置与@Transactional注解使用[转]
  9. 奔腾4 2.4CPU计算机硬件能升级吗,CPU怎么升级啊
  10. 如何配置Windows Live Writer发布博客园随笔
  11. python编写2的n次方_2的n次方(python计算2的n次方的算法)
  12. 利用51单片机输出PWM波
  13. 国际贸易基础(三)商检
  14. 软件开发专业主要有哪些课程?
  15. 滴滴 iOS 动态化方案 DynamicCocoa 的诞生与起航
  16. 从10个经典工业设计案例,来看什么是工业设计
  17. java小折叠车测评_java的折叠车怎么样?
  18. 关注与粉丝表结构设计及查询
  19. 打码平台php源码,打码平台 远程打码 实例源码
  20. 第 2-3 课:流式布局组件详解(Flow、Wrap)

热门文章

  1. python turtle库下载_python turtle库的几个小demo
  2. C++基础与深度解析第八章:动态内存管理
  3. C++新特性探究(五):for循环、范围for语句
  4. java hs_err 路径_JVM致命错误日志(hs_err_pid.log)解读
  5. Photoshop制作八张一寸证件照
  6. linux程序改ip地址吗,如何在Linux中从C设置IP地址
  7. ubuntu12.04 php环境搭建,Ubuntu12.04筹建php开发环境
  8. MySQL group-by-modifiers
  9. TensorFlow models/research
  10. C++ 拷贝构造函数