1 Star 0 Fork 31

阿明 / Ebooks

forked from Java精选 / Ebooks 
加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
大厂Redis面试题—Redis常见面试题(带答案).md 8.19 KB
一键复制 编辑 原始数据 按行查看 历史

大厂Redis面试题—Redis常见面试题(带答案)

全部面试题答案,更新日期:01月30日,直接下载吧!

下载链接:高清500+份面试题资料及电子书,累计 10000+ 页大厂面试题 PDF

Redis

题1:Redis 集群会产生数据丢失情况吗?

Redis并不能保证数据的强一致性,也就是说在实际中Redis集群在特定的条件下可能会产生数据丢失的情况。

题2:为什么 Redis 需把数据放到内存中? 

若不将数据读到内存中,磁盘I/O速度会严重影响Redis的性能。

Redis具有快速和数据持久化的特征。

Redis为了提高读写时的速度将数据读到内存中,并通过异步的方式将数据写入磁盘。

注:若设置最大使用内存,则数据已有记录数达到内存限值后不能继续插入新值。

为什么内存读取比磁盘读取数据速度快?

1)内存是电器元件,利用高低电平存储数据,而磁盘是机械元件,电气原件速度超快,而磁盘由于在每个磁盘块切换时磁头会消耗很多时间,说白了就是IO时间长,两者性能没发比较。

2)磁盘的数据进行操作时也是读取到内存中交由CPU进行处理操作,因此直接放在内存中的数据,读取速度肯定快很多。

题3:Redis 哈希槽的概念是什么?

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

题4:什么是 Redis 事务?

Redis事务的本质是通过MULTI、EXEC、WATCH等一组命令的集合。

事务支持一次执行多个命令,一个事务中所有命令都会被序列化。

在事务执行过程,会按照顺序串行化执行队列中的命令,其他客户端提交的命令请求不会插入到事务执行命令序列中。搜索公众号“Java精选”,回复“面试资料”。

总的来说就是redis事务就是一次性、顺序性、排他性的执行一个队列中的一系列命令。

题5:Redis 和其他key-value存储有什么不同?

Redis有着更为复杂的数据结构并且提供对他们的原子性操作,这是一个不同于其他数据库的进化路径。

Redis数据类型都是基于基本数据结构,同时对开发人员透明,无需进行额外的抽象。

Redis运行在内存中但是可以持久化到磁盘,所以在对不同数据集进行高速读写时需要权衡内存,应为数据量不能大于硬件内存。

内存数据库方面的优点是在内存比在磁盘上相同复杂的数据结构上操作更为简单,这样Redis可以做很多内部复杂性很强的事情。同时,在磁盘格式方面它们是紧凑并以追加的方式产生,因为它们并不需要进行随机访问。

题6:Redis 如何查看使用情况及状态信息?

使用info命令。

题7:Redis 支持那些数据类型?

String字符串

命令: set key value

string类型是二进制安全的,它可以包含任何数据,如图片或序列化对象等。

string类型是Redis最基本的数据类型,一个键最大能存储512MB。

Hash(哈希)

命令: hmset name key1 value1 key2 value2

Redis hash是一个键值(key=>value)对集合。

Redis hash是一个string类型的field和value的映射表,hash特别适合用于存储对象。

List(列表)

Redis列表是简单的字符串列表,按照插入顺序排序。可以添加一个元素到列表的头部(左边)或者尾部(右边)

命令: lpush name value

key对应list的头部添加字符串元素

命令: rpush name value

key对应list的尾部添加字符串元素

命令: lrem name index

key对应list中删除count个和value相同的元素

命令: llen name

返回key对应list的长度

Set(集合)

命令: sadd name value

Redis的Set是string类型的无序集合。

集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。

zset(sorted set:有序集合)

命令: zadd name score value

Redis zset和set一样也是string类型元素的集合,且不允许重复的成员。

不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。

zset的成员是唯一的,但分数(score)却可以重复。

题8:什么是缓存穿透?如何避免?

缓存穿透是指一般的缓存系统,都是按照key去缓存查询,如果不存在对应的value,就应该去后端系统查找(比如DB)。

一些恶意的请求会故意查询不存在的key,导致请求量大,造成后端系统压力大,这就是做缓存穿透。

如何避免?

1)对查询结果为空的情况也进行缓存,缓存时间设置短一点或key对应的数据insert后清理缓存。

2)对一定不存在的key进行过滤,可以把所有可能存在的key放到一个大的Bitmap中,查询时通过bitmap过滤。

题9:为什么要用 Redis 而不用 Map、Guava 做缓存?

缓存可以划分为本地缓存和分布式缓存。

以Java为例,使用自带Map或者Guava类实现的是本地缓存,主要特点是轻量以及快速,它们的生命周期会随着JVM的销毁而结束,且在多实例的情况下,每个实例都需要各自保存一份缓存,缓存不具有一致性。

使用Redis或Memcached等被称为分布式缓存,在多实例的情况下,各实例共用一份缓存数据,具有一致性,但是需要保持Redis或Memcached服务的高可用。

题10:Redis 是单线程的,如何提高多核 CPU 的利用率?

可以在同一个服务器部署多个Redis的实例,并把他们当作不同的服务器来使用,在某些时候,无论如何一个服务器是不够的, 所以,如果你想使用多个CPU,你可以考虑一下分片(shard)。

题11:redis-如何设置密码及验证密码

题12:redis-如何实现大量数据插入

题13:redis-中分布式锁有什么缺陷性问题

题14:redis-事务支持隔离性吗

题15:redis-将内存占满后会发生什么问题

题16:redis-中如何实现分布式锁

题17:redis-回收使用的是什么算法-

题18:redis-事务能否保证原子性是否支持回滚吗

题19:redis-都有哪些使用场景

题20:redis主要占用什么物理资源

题21:redis-中如何解决-thp-服务导致的延迟和内存使用问题

题22:redis-和-redisson-有什么区别和关系

题23:redis-集群最大节点个数是多少

题24:jedis-和-redisson-有什么优缺点

题25:redis-如何处理数据存储实现内存优化

大厂面试题

大厂面试题

大厂面试题

Java
1
https://gitee.com/AminDev/ebooks.git
git@gitee.com:AminDev/ebooks.git
AminDev
ebooks
Ebooks
master

搜索帮助

53164aa7 5694891 3bd8fe86 5694891