赞
踩
最新的 Java 面试题,技术栈涉及 Java 基础、集合、多线程、Mysql、分布式、Spring全家桶、MyBatis、Dubbo、缓存、消息队列、Linux…等等,会持续更新。
如果对老铁有帮助,帮忙免费点个赞,谢谢你的发财手!
Redis是一个开源的基于Key-Value结构的NoSql内存数据库。一般情况下,Redis 用作客户端和数据库之间操作的缓存,主要目的是减少数据库 IO。
Redis的工作流程是这样的:
当用户需要去读取某个数据的时候,首先会去 Redis 里面查询,如果命中就直接返回。如果没有命中,就从数据库查询,查询到数据后返回给用户,再把这个数据缓存到 Redis 里面。
当用户需要去读取某个数据的时候,首先会去 Redis 里面查询,如果命中就直接返回。如果没有命中,就从数据库查询,查询到数据后返回给用户,再把这个数据缓存到 Redis 里面。这会出现一个问题,就是一份数据,同时保存在Redis和Mysql里面,当数据发生变化的时候,就会出现数据一致性问题:
在这种情况下,能够选择的方法只有2种。
Redis提供了 RDB(默认) 和 AOF 两种持久化机制:
RDB: 也叫做Redis数据快照,简单来说就是把内存数据都写入到磁盘中的一个dump.rdb二进制文件中(bgsave)。
ROF:Redis每次修改数据的命令,都会追加到aof文件中,然后可以设置每秒刷盘一次,兼顾性能和安全。
我认为 RDB 和 AOF 的优缺点有两个。
Redis可以使用主从同步,同步分为全量同步和增量同步:
好的,关于这个问题,我从两个层面来回答。
Redis中的回收算法分为两种,volatile-xxx和allkeys-xxx,volatile是指对设置了过期时间的 key 进行淘汰;allkeys是指对所有的key 进行淘汰。
具体的淘汰策略中,比较常用的有LRU和LFU两种:
Redis五种数据类型:
字符串string:value可以为string、int、float类型;
哈希hash:value内是field+value的格式
列表list:一个双向链表,1.有序;2.元素可重复;3.新增删除快;
集合set:1.无序 2.元素不可重复 3.查找快 4.支持交集、并集和差集功能;
有序集合zset:1.可排序 2.元素不重复 3.查询速度快;
IO 多路复用是一种同步IO模型,实现一个线程可以监视多个文件句柄。
对于⼀个分布式系统,分布式ID就是我们需要的全局唯一的主键,它要求全局唯一、高性能、高可用。常见解决方案:
由于一致性哈希算法的数据会出现倾斜问题,因此Redis集群没有使用一致性hash,而是引入了哈希槽;在数据和节点之间又加了一层,把这层称为哈希槽(slot),用于管理数据和节点之间的关系,相当于节点上放的是槽,槽里放的是数据,解决了数据均匀分配的问题。
Redis集群中内置了16384个哈希槽,redis会根据节点数量大致均等的将哈希槽映射到不同的节点。当需要在Redis集群中添加一个key-value时,redis先对key使用CRC16算法算出一个结果,然后把结果对16384求余数(mod),这样每个key都会对应一个编号在0–16383之间的哈希槽,也就是映射到某个节点上。
SWAP是操作系统在内存紧张时执行的一种机制,即将部分不常用的内存空间对应的数据写到磁盘,然后将该内存分配给程序使用,当需要用到该部分数据时再将数据从磁盘上读取出来,这里涉及到了磁盘的IO,所以速度会比较慢。
NIO 由以下几个核心部分组成:
输入流只能进行读操作,输出流只能进行写操作,需要根据待传输数据的不同特性而使用不同的流。
都已经看到这里啦,赶紧收藏起来,祝您工作顺心,生活愉快!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。