2025Java面试题超详细整理《Redis篇》

什么是Redis?

Redis(Remote Dictionary Server)远程字典服务,是一种基于键值对(key-value)的NoSQL数据库,与很多键值对数据库不同,Redis中的值可以是由string(字符串)、list(链表)、set(集合)、zset(有序集合)和hash(哈希类型)等多种数据结构组成,能够满足很多的应用场景,同时Redis会将所有数据都存放在内存中,读写速度非常快。

基本特性:
基于键值对、读写速度快、数据结构丰富、简单稳定、支持持久化、支持事务(原子性)、主从复制、高可用与分布式。


更多Java学习指南以及最新项目场景题,需要的宝子
Java学习包传送门

为什么说Redis的速度非常快呢?

据官方给出的数字,Redis的读写性可以达到10万/秒,在不考虑硬件性能的化,redis速度如此快的原因可以归纳为一下几点:
(1)Redis中所有数据都是存储在内存中的,CPU对计算器的访问速度中内存远快于外存
(2)Redis是基于C语言实现的,一般来说C语言距离操作系统更近,执行速度相对更快
(3)Redis采用了单线程架构,避免了不必要的上下文切换和竞争条件,线程安全
(4)使用多路 I/O 复用模型,非阻塞 IO;

单线程详解:

  • Reds基于 Reactor模式开发的文件事件处理器,它是单线程的,所以Redis才叫做单线程的模型。
  • 该处理器采用IO多路复用机制来同时监听多个Socket,根据Socket上的事件类型来选择对应的事件处理器来处理这个事件。可以实现高性能的网络通信模型,又可以跟内部其他单线程的模块进行对接,保证了 Redis内部的线程楼型的简单性。
  • 文件事件处理器的结构包含4个部分:多个Socket,IO多路短用程序、文件事件分派器以及事件处理器
  • 多个 Socket可能井发的产生不同的操作,每个操作对应不同的文件事件,但是IO多路复用程序会监听多个Socket,会将 Socket放入一个队列中排队,每次从队列中取出一个 Socket给事件分派器,事件分派器把 Socket给对对应的事件处理器,然后一个 Socket的事件处理完之后,IO多路复用程序才会将队列中的下一个 Socket给事件分派器,文件事件分派器会根据每个 Socket当前产生的事件,来选择对应的事件处理器来处理。

为什么要用 Redis?

  • 高性能:假如用户第一次访问数据库中的某些数据。这个过程会比较慢,因为是从硬盘上读取的。将该用户访问的数据存在数缓存中,这样下一次再访问这些数据的时候就可以直接从缓存中获取了。操作缓存就是直接操作内存,所以速度相当快。
  • 高并发:直接操作缓存能够承受的请求是远远大于直接访问数据库的,所以我们可以考虑把数据库中的部分数据转移到缓存中去,这样用户的一部分请求会直接到缓存这里而不用经过数据库

Redis有哪些数据类型

Redis主要有5种数据类型,包括String,List,Set,Zset,Hash,满足大部分的使用要求

字符串(String)
字符串类型是Redis最基础的数据结构(key-value 类型),其它的几种数据结构都是在字符串类型基础上构建的,字符串的值可以是:字符串、数字、二进制,但其值最大不能超过512M。

  • 特性:二进制安全的,计算字符串长度高效、追加字符串高效
  • 使用场景: 缓存、计数器、对象存储缓存(共享session)、限速

列表(List)
Redis列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部或者尾部,也可以获取指定范围指定下标的元素等。一个列表最多可以包含 232 - 1 个元素 (4294967295, 每个列表超过40亿个元素)。
两个特点:

  • 列表中的元素是有序的,可以通过索引下标获取某个元素霍某个某个范围内的元素列表
  • 列表中的元素可以是重复的

使用场景: 消息队列、栈、文章列表等。

集合(Set)
Redis的Set是String类型的无序集合,我们不能通过索引获取元素。集合成员是唯一的,这就意味着集合中不能出现重复的数据。Redis中集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。集合中最大的成员数为 232 - 1 (4294967295, 每个集合可存储40多亿个成员)。
应用场景: 标签(tag)

哈希(Hash)
几乎所有的编程语言都提供了哈希(hash)结构,Redis中 hash 是一个string类型的field和value的映射表value={ {field1,value1},{field2,value2}…},可以将一个Hash表作为一个对象进行存储,表中存放对象的信息。
应用场景: 用户信息缓存

有序集合(Zset)
在有序集合中保留了不能有重复成员的特性,但其中的成员是可以排序的,每一个元素都会关联一个double类型的分数(score)作为排序依据,score相同时按字典顺序排序。redis

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值