Java中Redis面试题集锦(含过期策略详解)
🤟致敬读者
- 🟩感谢阅读🟦笑口常开🟪生日快乐⬛早点睡觉
📘博主相关
- 🟧博主信息🟨博客首页🟫专栏推荐🟥活动信息
文章目录
- Java中Redis面试题集锦(含过期策略详解)
- **一、Redis基础**
- **二、过期策略详解(重点)**
- **三、高级特性**
- **四、Java生态整合**
- **五、性能优化**
- 面试回答技巧:过期策略
📃文章前言
- 🔷文章均为学习工作中整理的笔记。
- 🔶如有错误请指正,共同学习进步。
Java中Redis面试题集锦(含过期策略详解)
一、Redis基础
-
Redis支持哪些数据类型?在Java中如何操作?
- 数据类型:String、List、Set、SortedSet、Hash、Bitmap等
- Java操作示例(Jedis):
Jedis jedis = new Jedis("localhost"); jedis.set("key", "value"); // String jedis.lpush("list", "item1", "item2"); // List jedis.hset("user:1", "name", "Alice"); // Hash
-
Redis单线程为何高性能?
- 内存操作 + IO多路复用 + 避免上下文切换
- 单线程处理命令保证原子性
二、过期策略详解(重点)
-
Redis的键过期删除策略是什么?
- 惰性删除:访问时检查过期并删除
// Jedis访问时触发惰性删除 String value = jedis.get("expired_key"); // 返回null
- 定期删除:周期性随机扫描过期键(默认10次/秒)
- 每次抽查20个键,删除过期键
- 若过期键比例>25%,重复扫描
- 惰性删除:访问时检查过期并删除
-
Java中如何设置键过期?
jedis.setex("temp_session", 300, "data"); // 300秒后过期 jedis.expire("cache_key", 60); // 60秒后过期 jedis.pexpire("key", 10000L); // 毫秒级过期
-
内存淘汰策略如何与过期键交互?
策略 是否涉及过期键 Java配置示例 volatile-lru
仅淘汰有过期时间的键 config.setMaxMemoryPolicy("volatile-lru")
volatile-ttl
优先淘汰TTL最短的键 allkeys-lru
所有键(含无过期时间) -
主从模式下过期键如何处理?
- 从节点不主动删除,依赖主节点同步DEL命令
- Java代码需确保在主节点操作过期键
三、高级特性
-
如何用Redis实现分布式锁?
// Redisson实现 RLock lock = redisson.getLock("order_lock"); lock.lock(30, TimeUnit.SECONDS); // 设置锁过期时间 try {// 业务逻辑 } finally {lock.unlock(); }
-
缓存穿透/雪崩/击穿解决方案
- 穿透:布隆过滤器 + 空值缓存
if (jedis.get(key) == null) {jedis.setex(key, 300, ""); // 缓存空值 }
- 雪崩:随机过期时间
jedis.setex(key, 60 + new Random().nextInt(30), value);
- 击穿:互斥锁
if (jedis.setnx("lock_key", "1") == 1) {jedis.expire("lock_key", 5); // 获取锁 }
- 穿透:布隆过滤器 + 空值缓存
四、Java生态整合
-
Spring Boot中如何配置Redis过期时间?
spring:redis:timeout: 5000lettuce:pool:max-active: 8
@Bean public RedisCacheManager cacheManager(RedisConnectionFactory factory) {RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig().entryTtl(Duration.ofMinutes(30)); // 全局过期时间 }
-
Redis事务 vs Lua脚本
- 事务:
jedis.watch("key"); Transaction tx = jedis.multi(); tx.set("key1", "value1"); tx.expire("key1", 60); tx.exec();
- Lua脚本(原子操作):
String script = "redis.call('SET', KEYS[1], ARGV[1]); " +"redis.call('EXPIRE', KEYS[1], ARGV[2]);"; jedis.eval(script, 1, "key", "value", "60");
- 事务:
五、性能优化
-
大Key过期导致阻塞怎么办?
- 启用异步删除(Redis 6.0+):
# redis.conf lazyfree-lazy-expire yes
- Java拆分大Key:
// 将大Hash拆分为多个小Key for (int i=0; i<100; i++) {jedis.hset("user:1:part" + i, "field", "value"); }
- 启用异步删除(Redis 6.0+):
-
如何监控过期键?
// 获取过期键统计 String info = jedis.info("stats"); // expired_keys: 累计过期键数量 // evicted_keys: 内存淘汰键数量
面试回答技巧:过期策略
当被问到Redis过期策略时,按层次回答:
- 核心机制:惰性删除 + 定期删除
- 存储结构:过期字典(Expires Dictionary)
- 持久化影响:
- RDB:持久化时不保存过期键
- AOF:记录DEL命令
- 集群特性:主节点控制删除,从节点被动同步
- Java实践:
- 合理设置TTL避免堆积
- 监控
expired_keys
指标 - 大Key使用异步删除
示例回答:
“Redis采用惰性删除和定期删除组合策略。当访问键时会触发惰性删除,同时Redis每秒10次随机扫描过期键。在Java中,我们通过setex()
设置过期,结合volatile-ttl
策略优化内存。对于大Key,建议启用Redis 6.0的异步删除避免阻塞主线程。”
通过这些问题,面试官可以全面考察你对Redis在Java中的应用能力,特别是对过期机制的深入理解。
📜文末寄语
- 🟠关注我,获取更多内容。
- 🟡技术动态、实战教程、问题解决方案等内容持续更新中。
- 🟢《全栈知识库》技术交流和分享社区,集结全栈各领域开发者,期待你的加入。
- 🔵加入开发者的《专属社群》,分享交流,技术之路不再孤独,一起变强。
- 🟣点击下方名片获取更多内容🍭🍭🍭👇
相关文章:
Java中Redis面试题集锦(含过期策略详解)
🤟致敬读者 🟩感谢阅读🟦笑口常开🟪生日快乐⬛早点睡觉 📘博主相关 🟧博主信息🟨博客首页🟫专栏推荐🟥活动信息 文章目录 Java中Redis面试题集锦(含过期策…...

Maven 安装与配置指南(适用于 Windows、Linux 和 macOS)
Apache Maven 是一款广泛应用于 Java 项目的项目管理和构建工具。 本文提供在 Windows、Linux 和 macOS 系统上安装与配置 Maven 的详细步骤,旨在帮助开发者快速搭建高效的构建环境。 一、前置条件:安装 Java Development Kit (JDK) Maven 依赖于 Java …...

android 媒体框架之MediaCodec
一、MediaCodec 整体架构与设计思想 MediaCodec 是 Android 底层多媒体框架的核心组件,负责高效处理音视频编解码任务。其架构采用 生产者-消费者模型,通过双缓冲区队列(输入/输出)实现异步数据处理: 输入缓冲区队列…...

堆与堆排序及 Top-K 问题解析:从原理到实践
一、堆的本质与核心特性 堆是一种基于完全二叉树的数据结构,其核心特性为父节点与子节点的数值关系,分为大堆和小堆两类: 大堆:每个父节点的值均大于或等于其子节点的值,堆顶元素为最大值。如: 小堆:每个…...
Linux中检查当前用户是不是root
Linux中检查当前用户是不是root 检查当前用户是否为root用户。如果是root用户,输出“当前用户是root”;否则,输出“当前用户不是root”。 创建一个 aaa.sh脚本文件 写入如下内容 #!/bin/bash# 检查当前用户的UID是否为0(root用…...

软件锁:守护隐私,安心无忧
数字化时代,手机已成为我们生活中不可或缺的一部分,它不仅存储着我们的个人信息、照片、聊天记录等重要数据,还承载着我们的社交、娱乐和工作等多种功能。然而,这也意味着手机上的隐私信息面临着诸多泄露风险。无论是家人、朋友还…...

无人机桥梁3D建模、巡检、检测的航线规划
无人机桥梁3D建模、巡检、检测的航线规划 无人机在3D建模、巡检和检测任务中的航线规划存在显著差异,主要体现在飞行高度、航线模式、精度要求和传感器配置等方面。以下是三者的详细对比分析: 1. 核心目标差异 任务类型主要目标典型应用场景3D建模 生成…...
项目:贪吃蛇实现
头文件 snake.h #include<stdio.h> #include<stdlib.h> #include<windows.h> #include<locale.h> #include<stdbool.h> #include<time.h>#define POS_X 24#define POS_Y 5 #define BODY L● #define FOOD L★ #define KEY_PRESS(VK) ((…...

【Java基础05】面向对象01
文章目录 1. 设计对象并使用1.1 类与对象1.2 封装1.2.1 private关键字1.2.2 this关键字成员变量和局部变量的区别 1.2.3 构造方法1.2.4 标准JavaBean类 1.3 对象内存图 本文部分参考这篇博客 1. 设计对象并使用 1.1 类与对象 public class 类名{1、成员变量(代表属性,一般是名…...

设计模式:观察者模式 - 实战
一、观察者模式场景 1.1 什么是观察者模式? 观察者模式(Observer Pattern)观察者模式是一种行为型设计模式,用于定义一种一对多的依赖关系,当对象的状态发生变化时,所有依赖于它的对象都会自动收到通知并更…...
8.8 Primary ODSA service without ODSA Portal
主要ODSA服务(不使用ODSA门户) 以下场景描述如下情况: • 主ODSA客户端应用程序被允许用于该类型的主设备,且对终端用户启用(已授权)。 • 服务提供商(SP)能够在不涉及ODSA门户Web服…...

YOLOv8 移动端升级:借助 GhostNetv2 主干网络,实现高效特征提取
文章目录 引言GhostNetv2概述GhostNet回顾GhostNetv2创新 YOLOv8主干网络改进原YOLOv8主干分析GhostNetv2主干替换方案整体架构设计关键模块实现 完整主干网络实现YOLOv8集成与训练模型集成训练技巧 性能对比与分析计算复杂度对比优势分析 部署优化建议结论与展望 引言 目标检…...

国产化Word处理控件Spire.Doc教程:在 C# 中打印 Word 文档终极指南
在 C# 中以编程方式打印 Word 文档可以简化业务工作流程、自动化报告和增强文档管理系统。本指南全面探讨如何使用Spire.Doc for .NET打印 Word 文档,涵盖从基本打印到高级自定义技术的所有内容。我们将逐步介绍每种情况下的实际代码示例,确保您能够在实…...
java的vscode扩展插件
在 Visual Studio Code (VSCode) 中,Java 开发可以通过多种方式得到支持,包括安装专门的扩展插件。下面是一些流行的 VSCode 扩展插件,可以帮助你更好地进行 Java 开发: Language Support for Java(TM) by Red Hat 官方支持&…...

谷歌:贝叶斯框架优化LLM推理反思
📖标题:Beyond Markovian: Reflective Exploration via Bayes-Adaptive RL for LLM Reasoning 🌐来源:arXiv, 2505.20561 🌟摘要 通过强化学习 (RL) 训练的大型语言模型 (LLM) 表现出强大的推理能力和紧急反射行为&a…...

Qt SQL模块基础
Qt SQL模块基础 一、Qt SQL模块支持的数据库 官方帮助文档中的Qt支持的数据库驱动如下图: Qt SQL 模块中提供了一些常见的数据库驱动,包括网络型数据库,如Qracle、MS SQL Server、MySQL等,也包括简单的单机型数据库。 Qt SQL支…...

[9-3] 串口发送串口发送+接收 江协科技学习笔记(26个知识点)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26中断...
java 微服务中,微服务相互调用 feign 和flux 如何选择
在 Java 微服务中,Feign 和 Flux(通过 WebClient 实现)是两种不同的服务间调用方式,主要区别体现在编程模型、通信机制和适用场景上。 1. 编程模型 FeignFlux (WebClient)同步阻塞式:基于传统 Servlet 模型࿰…...

如何在Qt中绘制一个带有动画的弧形进度条?
如何在Qt中绘制一个弧形的进度条 在图形用户界面开发中,进度指示控件(Progress Widget)是非常常见且实用的组件。CCArcProgressWidget 是一个继承自 QWidget 的自定义控件,用于绘制圆弧形进度条。当然,笔者看了眼公开…...
参加技术会议,为程序人生的职业生涯成长添砖加瓦
参加技术会议,为程序人生的职业生涯成长添砖加瓦 关键词:技术会议、程序员职业生涯、职业成长、技术交流、人脉拓展、知识体系升级、职业竞争力 摘要:在快速迭代的IT技术领域,参加技术会议已成为程序员突破职业瓶颈、构建核心竞争力的重要途径。本文从技术会议的核心价值出…...

国产三维CAD皇冠CAD(CrownCAD)建模教程:汽车电池
在线解读『汽车电池』的三维建模流程,讲解3D草图、保存实体、拉伸凸台/基体、设置外观等操作技巧,一起和皇冠CAD(CrownCAD)学习制作步骤吧! 汽车电池(通常指铅酸蓄电池或锂离子电池)是车辆电气系…...
记录算法笔记(2025.5.28)只出现一次的数字
给你一个 非空 整数数组 nums ,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。 你必须设计并实现线性时间复杂度的算法来解决此问题,且该算法只使用常量额外空间。 示例 1 : 输入࿱…...

VMware-workstation安装教程--超详细(附带安装包)附带安装CentOS系统教程
VMware-workstation安装教程--超详细(附带安装包)附带安装CentOS系统教程 一、下载软件VMwware二、下载需要的镜像三、在VMware上安装系统 一、下载软件VMwware 二、下载需要的镜像 三、在VMware上安装系统 VMware 被 Broadcom(博通&#x…...

2025年- H63-Lc171--33.搜索旋转排序数组(2次二分查找,需二刷)--Java版
1.题目描述 2.思路 输入:旋转后的数组 nums,和一个整数 target 输出:target 在 nums 中的下标,如果不存在,返回 -1 限制:时间复杂度为 O(log n),所以不能用遍历,必须使用 二分查找…...

3D-激光SLAM笔记
目录 定位方案 编译tbb ros2humble安装 命令 colcon commond not found 栅格地图生成: evo画轨迹曲线 安装gtsam4.0.2 安装ceres-solver1.14.0 定位方案 1 方案一:改动最多 fasterlio 建图,加闭环优化,参考fast-lio增加关…...
Golang 配置国内代理
使用 GOPROXY 临时设置 export GOPROXYhttps://goproxy.cn,direct永久设置 go env -w GOPROXYhttps://goproxy.cn,direct再go get下载...
Android bindservice绑定服务,并同步返回service对象的两个方法
先上一段代码: private IDeviceService deviceService null; private ServiceConnection connnull; private synchronized void bindyourservice() { Intent intent new Intent();intent.setPackage("servicepackagename");intent.setAction("…...
5G 核心网 UE 状态深度剖析:机制、迁移与演进
摘要 本文围绕 5G 核心网中 UE(用户设备)状态展开系统分析,详细阐述了 UE 状态的定义、分类及特点,深入探讨各状态间的迁移流程与关键技术,并结合典型应用场景分析其实际价值。同时,对比 4G 技术剖析 5G 的改进之处,展望 6G 时代 UE 状态管理的演进方向,为 5G 网络优化…...

HomeKit 基本理解
概括 HomeKit 将用户的家庭自动化信息存储在数据库中,该数据库由苹果的内置iOS家庭应用程序、支持HomeKit的应用程序和其他开发人员的应用程序共享。所有这些应用程序都使用HomeKit框架作为对等程序访问数据库. Home 只是相当于 HomeKit 的表现层,其他应用在实现 …...
[SC]SystemC在CPU/GPU验证中的应用(三)
SystemC在CPU/GPU验证中的应用(三) 摘要:下面分享50个逐步升级SystemC编程能力的示例及建议的学习路线图。您可以一次一批地完成它们——从前五个基础的例子开始,然后转向channels, TLM, bus models, simple CPU/GPU kernels等等。在每个阶段掌握之后,再进行下一组…...