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

第十五届蓝桥杯省赛C/C++B组H题【拔河】题解(AC)

由于枚举三个点肯定会超时,所以只能枚举两个点,我们尝试枚举第一个区间。的复杂度,需要找出右区间中和左区间的和最相近的值,可以考虑使用。一开始,我们将所有可能的右区间的区间和,都插入。做法同上,用前缀和优化数组求和的过程。的数组和差值最小是多少,其中。递增进行枚举左区间,当。的数组,求两个子数组。为左端点的区间的和。

一只大采集~ 5283

java面试篇 Redis+MySQL+Spring

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

weixin_50261367的博客 2087

基于DSP28335的Matlab/Simulink代码生成实验七:A/D采样

实验七:讲解如何使用DSP的ADC模块,通过代码生成技术控制DSP进行电流采样,是后续实现电机闭环控制的重要环节。通过简单的实验来熟悉代码生成的过程。最终实现复杂算法代码自动生成,进行高性能电机控制!

m0_73869369的博客 4724

【Java高频面试问题】Redis篇

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

weixin_45698637的博客 1619

SAP采购信息记录批量维护实战:用BAPI ME_INFORECORD_MAINTAIN搞定价格等级和条件记录

本文深入解析SAP标准BAPI ME_INFORECORD_MAINTAIN在采购信息记录批量维护中的应用,特别聚焦价格等级和条件记录的技术难点。通过实战案例和代码示例,帮助用户高效处理供应商-物料价格数据,提升供应链管理效率。

weixin_42522320的博客 410

HTML5期末大作业:水果超市网站设计——水果超市(6页) HTML+CSS+JavaScript 学生DW网页设计作业成品 web课程设计网页规划与设计 网购商城设置网页

HTML5期末大作业:水果超市网站设计——水果超市(6页) HTML+CSS+JavaScript 学生DW网页设计作业成品 web课程设计网页规划与设计 网购商城设置网页 常见网页设计作业题材有 个人、 美食、 公司、 学校、 旅游、 电商、 宠物、 电器、 茶叶、 家居、 酒店、 舞蹈、 动漫、 明星、 服装、 体育、 化妆品、 物流、 环保、 书籍、 婚纱、 军事、 游戏、 节日、 戒烟、 电影、 摄影、 文化、 家乡、 鲜花、 礼品、 汽车、 其他 等网页设计题目, A+水平作业, 可满足大

1712

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

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

qq_43444478的博客 310

论文学习——Connected Speech-Based Cognitive Assessment in Chinese and English——TAUKADIAL挑战赛介绍

这个比赛很有意义,因为目前AD检测的主要问题就是数据集过少,大部分数据集都是英语数据集,但是实际上很多患者分布在非英语的国家,所以需要解决多语种数据小的问题。这个比赛刚好是解决了英语检测样本和中文检测样本的问题,不过Baseline做的实在不够高明,对于语义信息的提取还是需要再进一步改良的。 这篇文章主要是对这个数据集了解的更加深刻,方便以后自己做科研!加油!趁现在,抓紧把论文写完!

Blackoutdragon的博客 1909

【Java 面试 八股文】Redis篇

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

Luo_LA的博客 2670

国科大学习资料--VLSI测试与可测试设计--2020期末考试试题

国科大学习资料–VLSI测试与可测试设计–2020期末考试试题 国科大学习资料–VLSI测试与可测试设计–2020期末考试试题 国科大学习资料–VLSI测试与可测试设计–2020期末考试试题 一、概念题 1简述可测试性测度与两个主要的测度指标的含义; 2以March C-算法为例,说明March算法的构成,以及March C-算法的故障覆盖率; 3“效果-原因”诊断法和“原因效果诊断法”的不同; 4列举四条扫描设计时出现的问 题及解决办法; 5最少写出1149.1与1500的五点不同; = = = = =

无名何许人的博客 1150

深入浅出讲解外部服务提供者 OAuth 2.0 帐户客户端创建与 ABAP 系统集成

本文详细介绍了在SAP ABAP平台配置OAuth 2.0客户端以安全调用外部Web服务的完整流程。主要内容包括:首先需要在外部服务提供者平台注册OAuth客户端,获取client ID和client secret;其次需特别注意重定向URI必须是公开可访问的地址;然后在ABAP系统中通过事务码OA2C_CONFIG配置OAuth客户端信息;最后阐述了常见的错误排查方法。文章强调了OAuth 2.0作为SAP系统与外部服务安全集成的标准协议,正确配置客户端是确保后续API调用安全可靠的关键前提。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1734

Java面试——Redis

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

weixin_43839323的博客 1033

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

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

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

程序员高级码农的博客 1268

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

JAVA面试Redis篇

Redis经典面试问题

kingandsong的博客 1425

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

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、付费专栏及课程。

余额充值