Java面试-Redis

Java面试-Redis篇 缓存击穿的意思是对于设置了过期时间的key,缓存在某个时间点过期的时候,恰好这时间点对这个Key有大量的并发请求过来,这些请求发现缓存过期一般都会从后端 DB 加载数据并回设到缓存,这个时候大并发的请求可能会瞬间把 DB 压垮。当然是有缺点的,布隆过滤器有可能会产生一定的误判,我们一般可以设置这个误判率,大概不会超过5%,其实这个误判是必然存在的,要不就得增加数组的长度,其实已经算是很划分了,5%以内的误判率一般的项目也能接受,不至于高并发下压倒数据库。我们当时使用的是redisson实现的布隆过滤器。 阅读详情

Redis简介
Redis是内存数据库,读写速度很快,所以广泛用于缓存。
除了缓存,Redis也常用于分布式锁,甚至是消息队列。
Redis提供多种数据类型支持不同业务场景。Redis还支持事务、持久化、lua脚本、多种集群方案。
分布式缓存常见的技术选型方案有哪些
分布式缓存主要解决单机缓存的容量受服务器限制并且无法保存通用的信息。因为,本地缓存只在当前服务里有效,如果部署了两个相同的服务,他们两者之前的缓存数据是无法共通的。
缓存数据的处理流程
1、如果用户请求的数据在缓存中就直接返回
2、不存在就看数据库中是否存在
3、存在就更新缓存中的数据
4、不存在就返回空数据
为什么要用Redis/为什么要用缓存
高性能
访问数据库中数据是比较慢的,如果用户访问的数据属于高频数据并且不会经常改变,放在缓存中。
高并发
直接操作缓存能够承受的数据库请求数量是远远大于直接访问数据库的。
Redis常见的数据结构以及使用场景分析
string
一般用在需要计数的场景,比如用户的访问次数、点赞转发量等
基本操作:
set key value
get key
strlen key
del key
get key
incr key
decr key
list
rpush key value 向list头部右边添加元素
lpop key 向list尾部左边取出
hash
hset userInfoKey name “guide” description “dev” age “24”
hget userInfoKey name
hkeys userInfoKey
hvals userInfoKey
set
sadd mySet value1 value2
smembers mySet
scard mySet
sismember mySet value1
sorted set
zadd myZset 3.0 value1
zcard myZset
zscore myZset value1
zrange myZset 0 -1
Redis单线程模型详解
Redis基于Reactor模式设计开发了自己的一套高效的事件处理模型,这套事件处理模型对应的是Redis中的文件事件处理器。由于文件事件处理器是单线程方式运行的,所以一般说Redis是单线程模型。
单线程是怎么监听大量的客户端连接呢?
Redis通过IO多路复用程序来监听来自客户端的大量连接
Redis事务
Redis通过MULTI,EXEC,DISCARD和WATCH等命令来实现事务功能。
使用MULTI后可以输入多个命令。Redis不会立即执行这些命令,而是将它们放到队列,当调用了EXEC命令将执行所有命令。
Redis的事务和关系型数据库的事务不同。
Redis不支持roll back,不满足原子性和持久性。
Redis事务提供了一种将多个命令请求打包的功能,然后,再按照顺序执行打包的所有命令,并且不会被中途打断。
三种常见的缓存读写策略
Cache Aside Pattern(旁路缓存模式)
比较适合读请求比较多的场景
服务端需要同时维系DB和cache,并且以DB结果为准。
写:
先更新DB
然后直接删除cache
读:
从cache中读取数据,读取到就直接返回
读不到从DB中读
把数据放到cache中
缺点:写操作比较频繁的话cache中的数据会被频繁的删除,会影响缓存命中率
数据库和缓存数据强一致场景:更新DB的时候同样更新cache,不过需要加一个锁/分布式锁保证来保证cache更新的时候不存在线程安全的问题。
可以短暂允许数据库和缓存数据不一致的场景:更新DB的时候同样更新cache,但是给缓存加一个比较短的过期时间,这样可以保证即使数据不一致影响也比较小。
Read/Write Through Pattern(读写穿透)
服务端把cache视为主要数据存储,从中读取数据并将数据写入。cache负责把数据读取和写入DB。
很少见,因为Redis并没有提供cache将数据写入DB的功能。
写:
先查 cache,cache 中不存在,直接更新 DB。
cache 中存在,则先更新 cache,然后 cache 服务自己更新 DB(同步更新 cache 和 DB)。
读(Read Through):
从 cache 中读取数据,读取到就直接返回 。
读取不到的话,先从 DB 加载,写入到 cache 后返回响应。
Write Behind Pattern(异步缓存写入)
更新缓存不直接更新DB,异步批量的方式更新DB。
写性能很高,适合数据经常变化但是对一致性要求没有那么高的场景,比如浏览量、点赞量。

Java面试第十二山!《Redis缓存》 Redis是Java面试必考的高频知识点,掌握其核心概念、数据结构、缓存问题解决方案及高可用架构,能让你在面试中脱颖而出。 阅读详情

相关推荐

谢飞机的Java面试奇遇记:从HashMap到Redis的搞笑面试之旅

面试官:你好,谢飞机,欢迎来参加我们的Java开发岗位面试。我们今天会围绕Java核心技术、JUC、JVM、多线程、线程池、HashMap、ArrayList、Spring、SpringBoot、MyBatis、Dubbo、RabbitMQ、xxl-job、Redis、MySQL、Linux、Docker、设计模式、DDD等内容进行提问。准备好了吗?谢飞机:准备好了,大不了回家等通知!

weixin_45980106的博客 779

Java面试之Redis——电子笔记

RedLock(红锁):不能只在一个redis实例上创建锁,应该是在多个redis实例上创建锁(n / 2 + 1),避免在一个redis实例上加锁。IO多路复用:是利用单个线程来同时监听多个Socket ,并在某个Socket可读、可写时得到通知,从而避免无效的等待,充分利用CPU资源。设置 key 过期时间后,不去管他,当需要该 key 时,再检查其是否过期,如果过期,删掉,反之则返回 key。单节点的 Redis 的并发能力有限,进一步提高 Redis 并发能力,可以搭建主从集群,实现读写分离。

weixin_42493834的博客 1027

【面试宝典】Java八股文之Redis面试题

2022年接近年底了,相信绝大多数小伙伴们跳操的心已经蠢蠢欲动了,今天给大家吐血整理了Java领域各个知识点的面试题,把碎片的知识,系统化的整理,有代码有讲解,通俗易懂,最重要的好记!!!希望能够为小伙伴们的面试保驾护航,争取拿到自己期望的薪资。如果对你有用,请点赞关注收藏哦~

热爱技术,享受生活 1372

【java面试】redis篇

redis集群有哪些方案?主从模式保证不了集群的高可用,主节点宕机之后,就丧失了写数据的能力。Redis提供了哨兵(Sentinel)机制来实现主从集群的自动故障恢复。哨兵的结构和作用如下:主观下线:如果某sentinel节点发现某实例未在规定时间响应,则认为该实例主观下线。客观下线:若超过指定数量(quorum)的sentinel都认为该实例主观下线,则该实例客观下线。quorum值最好超过Sentinel实例数量的一半。哨兵选主规则。

qq_52200849的博客 2263

大数据应用技术实验报告一 Hadoop三种模式安装配置

JDK+Hadoop安装配置、单机模式配置 以下操作在SecureCRT里面完成 1.关闭防火墙 firewall-cmd --state 显示防火墙状态running/not running systemctl stop firewalld 临时关闭防火墙,每次开机重新开启防火墙 systemctl disable firewalld 禁止防火墙服务。 2.传输JDK和HADOOP压缩包 Sec...

Ruthless_Childe的博客 3090

SpringBoot整合oceanbase,实现oracle无缝切换到oceanbase

随着去“IOE”化的潮流,近些年来,许多与国家相关的项目不约而同到地往”国产化“方向靠拢,不可避免地,一些项目可能需要进行数据库迁移。

4623

java面试篇 Redis+MySQL+Spring

联合索引(Composite Index)是数据库中的一种索引类型,它基于表中的多个列创建。与单列索引(基于单个列创建的索引)不同,联合索引可以同时对多个列进行索引,从而提高多列查询的性能。联合索引是数据库中一种强大的工具,可以显著提高多列查询的性能。通过合理设计联合索引,可以优化查询性能,但需要注意索引的维护成本和列的顺序。记录日志:把这些通用代码抽出来,避免跟你的业务代码进行耦合:在 Spring 框架中,代理(Proxy)和动态代理(Dynamic Proxy)

weixin_50261367的博客 2087

ReportStudio入门教程(四十一) - 固定报表列宽

我们继续上一篇博客,让他看起来

什么是江湖? 3516

【Java高频面试问题】Redis篇

‌策略‌‌一致性‌‌复杂度‌‌适用场景‌先删缓存,后改库弱高(需补偿)低并发、允许短暂不一致‌先改库,后删缓存‌‌强‌中‌高并发强一致性系统‌‌Binlog监听删除‌‌最终强‌高‌超大规模系统。

weixin_45698637的博客 1619

ILI9488 TFT屏驱动与触摸协同开发指南

TFT-LCD显示模块是嵌入式人机交互系统的核心外设,其工作原理依赖于专用显示控制器(如ILI9488)对GRAM显存的精确读写,并通过SPI等串行总线接收指令与图像数据。理解RGB接口时序、寄存器初始化流程及DC/CS信号控制逻辑,是实现稳定显示的基础技术前提;而四线电阻式触摸功能则需配合XPT2046类ADC控制器,通过独立SPI或模拟时序完成坐标采集。该方案兼顾低功耗、高集成与工程可移植性,广泛应用于工业HMI、仪器仪表及STM32F407等MCU平台的教学与产品开发。本文围绕3.5英寸320×480

weixin_33814090的博客 149

【数据集处理】基于ERA5 气温/湿度数据计算湿球温度并判别湿热浪

【数据集处理】基于ERA5 气温/湿度数据计算湿球温度并判别湿热浪

WW、forever的博客 487

Java工程师该怎么面试 Redis问题及答案有哪些

Java工程师该怎么面试?Redis问题及答案有哪些?Redis是Nosql数据库,是一个高性能的key-value数据库,得到了很多企业的重视及应用,在Java工程师面试的过程中,企业也会重点考察求职者对Redis的掌握程度。下面就给大家分享一些常见的Redis面试题及答案,希望能够帮助小伙伴们顺利通过面试考验。 1、Redis的特点是什么? Redis的性能非常出色,...

qq_43444478的博客 310

SAP-ABAP:字符与数值类型转换详细指南

SAP-ABAP:字符与数值类型转换详细指南

baidu_35680696的博客 1477

【Java 面试 八股文】Redis篇

缓存穿透是指客户端请求的数据在缓存中和数据库中都不存在,这样缓存永远不会生效,这些请求都会打到数据库。这将导致这个不存在的数据每次请求都要到 DB 去查询,可能导致 DB 挂掉。这种情况大概率是遭到了攻击。解决方案的话,我们通常都会用缓存空对象或者布隆过滤器来解决它。缓存空对象优点:实现简单,维护方便缺点:额外的内存消耗,可能造成短期的不一致布隆过滤优点:内存占用较少,没有多余key缺点:实现复杂,存在误判可能(有穿透的风险),无法删除数据。

Luo_LA的博客 2670

3.1 5分钟搞定!Claude Code接入国产大模型完整教程(附代码)

摘要 本文提供了一份5分钟快速为Claude Code接入国产大模型的完整教程。首先介绍了系统环境要求(Windows/macOS/Linux、Node.js 18+、Python 3.8+),然后详细说明了三种安装Claude Code的方式(npm/yarn/pnpm)。重点讲解了两种国产大模型接入方案:通义千问(推荐)和文心一言,包括获取API密钥、安装SDK、创建MCP服务器、配置Claude Code等步骤。文中提供了详细的代码示例和配置文件模板,确保开发者能快速完成国产大模型的接入,降低使用成本

yonggeit的博客 7924

A*搜索算法在三维路径规划(避障)中的MATLAB实现与Python实现

A star algorithmA*搜索算法简介A*搜索算法的Python简化代码MATLAB实现启发函数回溯轨迹RRT算法对比A\*算法在三维路径规划中的一些不足 A*搜索算法简介 A*搜索算法是Greedy Best-First算法的改进,因为Greedy Best-First算法只考虑将预估距离(当前节点到目标点的预估距离)作为遴选开节点集的条件。即: priority=heuristic(goal,next)priority=heuristic(goal, next)priority=heurist

ZYunfei的博客 2万+

Java面试——Redis

Redisson是Redis的Java客户端,提供分布式对象(如RList、RMap)和服务(如分布式锁、信号量)。示例:通过RLock实现可重入锁,RBucket管理对象存储,RTopic实现发布订阅。使用Redis的INCR和EXPIRE命令实现滑动窗口计数,或通过Lua脚本保证原子性。Redis Cluster将数据分为16384个槽,每个节点负责一部分槽。缓存失效时,使用延迟双删(先删缓存,更新数据库,再删缓存)。释放锁时需用Lua脚本验证值,避免误删其他客户端的锁。

weixin_43839323的博客 1033

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

程序员面试必备之Java面试题:Redis常见面试题汇总!

掌握这些面试题能帮助您在Java面试中脱颖而出。重点复习数据类型、持久化、事务和缓存问题,结合实际项目经验(如使用Redis优化电商缓存)。练习时,可搭建本地Redis环境,用Java代码模拟场景。记住,面试中突出解决实际问题的能力,如如何用Redis降低数据库负载。祝您面试顺利!如有具体问题,欢迎进一步提问。另外,给大家分享一个220万字面试题题库,希望大家能够加油学习一下。

程序员高级码农的博客 1268

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

JAVA面试Redis篇

Redis经典面试问题

kingandsong的博客 1425

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

java开发面试中关于redis常见的2个问题

理解RDB和AOF的机制、优缺点以及如何根据业务需求(对数据丢失的容忍度、性能要求、备份策略)进行组合配置,是评估候选人是否具备Redis实战经验的重要方面。同时启用RDB和AOF是生产环境下的常见且推荐的做法。Redis凭借其高性能、丰富的数据结构和易用性,在Java应用中扮演着越来越重要的角色,尤其是在提升性能、实现分布式协作方面。

weixin_45706752的博客 1801

Java面试题之Redis篇

Java面试题之Redis篇

qq_63274189的博客 844

【java面试题-Redis篇-2024】

Redis,英文全称是 Remote Dictionary Server(远程字典服务),是一个开源的使用 C 语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value 数据库,并提供多种语言的 API。与 MySQL 数据库不同的是,Redis 的数据是存在内存中的。它的读写速度非常快,每秒可以处理超过 10 万次读写操作。因此 Redis 被广泛应用于缓存,另外,Redis 也经常用来做分布式锁。除此之外,Redis 支持事务、持久化、LUA 脚本、多种集群方案。

qq_46023503的博客 1654

Java面试中 常见Redis面试题有哪些

Java开发人员怎么面试?常见Redis面试题有哪些?Redis是目前各大企业都在使用的人们技术,也是企业选拔人才时考核的一个难题。有很多同学只是简单了解Redis的应用,但对于为什么要用Redis以及企业面试中有关Redis的问题却答不上来。接下来小编就给大家简单分析一下。 为什么使用Redis? 项目中使用Redis,主要考虑性能和并发两个方面。在大并发的情况下,所有的请求直接访问数据库,数据库会出现连接异常。这个时候,就需要使用Redis做一个缓冲操作,让请求先访问到Redis,而不是直接访问数据库。

qf2019的博客 427

Java 面试篇-Redis 专题

Redis 常见的面试专题:缓存击穿、缓存雪崩、缓存穿透、什么是布隆过滤器、什么是延时双删、持久化的方式、Redis 分布式锁、I/O 多路复用等

小二丶的博客 896

Java高频面试之Redis篇

按照这个核心思想,Redis 中的 LRU 策略,会在每个数据对应的 RedisObject 结构体中设置一个 lru 字段,用来记录数据的访问时间戳。缓存击穿是指在使用缓存系统时,某个热门数据过期或被删除后,恰好有大量的并发请求同时访问该数据,导致这些请求都无法命中缓存,直接访问后端存储系统,对后端系统造成巨大压力,可能引发系统崩溃或性能下降的问题。缓存雪崩是指在使用缓存系统时,缓存中大量的数据同时过期或失效,导致大量的请求直接访问后端存储系统,使得后端系统承受巨大的压力,甚至引发系统崩溃的现象。

Java领域优秀创作者 2245

使用Redis,java高分面试指南

细细解释一下这个问题,当一个请求发送数据当服务器时,一开始存储数据是 Redis缓存,没有进行任何关于数据库的操作,但是缓存不能持久化,因此需要 需要把这些数据存入数据库,因此会在一定条件时判断一个请求是否结束,一旦结束, 就会将缓存中的数据更新到数据库。而这个条件就像秒杀或者抢红包业务中红包数量 是否为0,如果为空,一次性写入数据库,完成持久化工作。 []( )Redis的原理解析 --------------------------------------------------------

m0_61439244的博客 212
上一篇: Java面试-数据结构
下一篇: 一二三维卷积
ddana_a
博客等级 码龄8年 15粉丝 19原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值