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面试奇遇记:从HashMap到Redis的搞笑面试之旅
面试官:你好,谢飞机,欢迎来参加我们的Java开发岗位面试。我们今天会围绕Java核心技术、JUC、JVM、多线程、线程池、HashMap、ArrayList、Spring、SpringBoot、MyBatis、Dubbo、RabbitMQ、xxl-job、Redis、MySQL、Linux、Docker、设计模式、DDD等内容进行提问。准备好了吗?谢飞机:准备好了,大不了回家等通知!
Java面试之Redis——电子笔记
RedLock(红锁):不能只在一个redis实例上创建锁,应该是在多个redis实例上创建锁(n / 2 + 1),避免在一个redis实例上加锁。IO多路复用:是利用单个线程来同时监听多个Socket ,并在某个Socket可读、可写时得到通知,从而避免无效的等待,充分利用CPU资源。设置 key 过期时间后,不去管他,当需要该 key 时,再检查其是否过期,如果过期,删掉,反之则返回 key。单节点的 Redis 的并发能力有限,进一步提高 Redis 并发能力,可以搭建主从集群,实现读写分离。
【面试宝典】Java八股文之Redis面试题
2022年接近年底了,相信绝大多数小伙伴们跳操的心已经蠢蠢欲动了,今天给大家吐血整理了Java领域各个知识点的面试题,把碎片的知识,系统化的整理,有代码有讲解,通俗易懂,最重要的好记!!!希望能够为小伙伴们的面试保驾护航,争取拿到自己期望的薪资。如果对你有用,请点赞关注收藏哦~
【java面试】redis篇
redis集群有哪些方案?主从模式保证不了集群的高可用,主节点宕机之后,就丧失了写数据的能力。Redis提供了哨兵(Sentinel)机制来实现主从集群的自动故障恢复。哨兵的结构和作用如下:主观下线:如果某sentinel节点发现某实例未在规定时间响应,则认为该实例主观下线。客观下线:若超过指定数量(quorum)的sentinel都认为该实例主观下线,则该实例客观下线。quorum值最好超过Sentinel实例数量的一半。哨兵选主规则。
大数据应用技术实验报告一 Hadoop三种模式安装配置
JDK+Hadoop安装配置、单机模式配置 以下操作在SecureCRT里面完成 1.关闭防火墙 firewall-cmd --state 显示防火墙状态running/not running systemctl stop firewalld 临时关闭防火墙,每次开机重新开启防火墙 systemctl disable firewalld 禁止防火墙服务。 2.传输JDK和HADOOP压缩包 Sec...
SpringBoot整合oceanbase,实现oracle无缝切换到oceanbase
随着去“IOE”化的潮流,近些年来,许多与国家相关的项目不约而同到地往”国产化“方向靠拢,不可避免地,一些项目可能需要进行数据库迁移。
java面试篇 Redis+MySQL+Spring
联合索引(Composite Index)是数据库中的一种索引类型,它基于表中的多个列创建。与单列索引(基于单个列创建的索引)不同,联合索引可以同时对多个列进行索引,从而提高多列查询的性能。联合索引是数据库中一种强大的工具,可以显著提高多列查询的性能。通过合理设计联合索引,可以优化查询性能,但需要注意索引的维护成本和列的顺序。记录日志:把这些通用代码抽出来,避免跟你的业务代码进行耦合:在 Spring 框架中,代理(Proxy)和动态代理(Dynamic Proxy)
ReportStudio入门教程(四十一) - 固定报表列宽
我们继续上一篇博客,让他看起来
【Java高频面试问题】Redis篇
策略一致性复杂度适用场景先删缓存,后改库弱高(需补偿)低并发、允许短暂不一致先改库,后删缓存强中高并发强一致性系统Binlog监听删除最终强高超大规模系统。
ILI9488 TFT屏驱动与触摸协同开发指南
TFT-LCD显示模块是嵌入式人机交互系统的核心外设,其工作原理依赖于专用显示控制器(如ILI9488)对GRAM显存的精确读写,并通过SPI等串行总线接收指令与图像数据。理解RGB接口时序、寄存器初始化流程及DC/CS信号控制逻辑,是实现稳定显示的基础技术前提;而四线电阻式触摸功能则需配合XPT2046类ADC控制器,通过独立SPI或模拟时序完成坐标采集。该方案兼顾低功耗、高集成与工程可移植性,广泛应用于工业HMI、仪器仪表及STM32F407等MCU平台的教学与产品开发。本文围绕3.5英寸320×480
【数据集处理】基于ERA5 气温/湿度数据计算湿球温度并判别湿热浪
【数据集处理】基于ERA5 气温/湿度数据计算湿球温度并判别湿热浪
Java工程师该怎么面试 Redis问题及答案有哪些
Java工程师该怎么面试?Redis问题及答案有哪些?Redis是Nosql数据库,是一个高性能的key-value数据库,得到了很多企业的重视及应用,在Java工程师面试的过程中,企业也会重点考察求职者对Redis的掌握程度。下面就给大家分享一些常见的Redis面试题及答案,希望能够帮助小伙伴们顺利通过面试考验。 1、Redis的特点是什么? Redis的性能非常出色,...
SAP-ABAP:字符与数值类型转换详细指南
SAP-ABAP:字符与数值类型转换详细指南
【Java 面试 八股文】Redis篇
缓存穿透是指客户端请求的数据在缓存中和数据库中都不存在,这样缓存永远不会生效,这些请求都会打到数据库。这将导致这个不存在的数据每次请求都要到 DB 去查询,可能导致 DB 挂掉。这种情况大概率是遭到了攻击。解决方案的话,我们通常都会用缓存空对象或者布隆过滤器来解决它。缓存空对象优点:实现简单,维护方便缺点:额外的内存消耗,可能造成短期的不一致布隆过滤优点:内存占用较少,没有多余key缺点:实现复杂,存在误判可能(有穿透的风险),无法删除数据。
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等步骤。文中提供了详细的代码示例和配置文件模板,确保开发者能快速完成国产大模型的接入,降低使用成本
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
Java面试——Redis
Redisson是Redis的Java客户端,提供分布式对象(如RList、RMap)和服务(如分布式锁、信号量)。示例:通过RLock实现可重入锁,RBucket管理对象存储,RTopic实现发布订阅。使用Redis的INCR和EXPIRE命令实现滑动窗口计数,或通过Lua脚本保证原子性。Redis Cluster将数据分为16384个槽,每个节点负责一部分槽。缓存失效时,使用延迟双删(先删缓存,更新数据库,再删缓存)。释放锁时需用Lua脚本验证值,避免误删其他客户端的锁。
Camera2Demo
在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作
程序员面试必备之Java面试题:Redis常见面试题汇总!
掌握这些面试题能帮助您在Java面试中脱颖而出。重点复习数据类型、持久化、事务和缓存问题,结合实际项目经验(如使用Redis优化电商缓存)。练习时,可搭建本地Redis环境,用Java代码模拟场景。记住,面试中突出解决实际问题的能力,如如何用Redis降低数据库负载。祝您面试顺利!如有具体问题,欢迎进一步提问。另外,给大家分享一个220万字面试题题库,希望大家能够加油学习一下。
复分析 阿尔福斯(Ahlfors) 第三版答案 英文
答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案
精雕软件(JDpaint) 5.5 绿色版
精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版
JAVA面试Redis篇
Redis经典面试问题
jdk-8u144-linux-x64.tar.gz.
该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包
java开发面试中关于redis常见的2个问题
理解RDB和AOF的机制、优缺点以及如何根据业务需求(对数据丢失的容忍度、性能要求、备份策略)进行组合配置,是评估候选人是否具备Redis实战经验的重要方面。同时启用RDB和AOF是生产环境下的常见且推荐的做法。Redis凭借其高性能、丰富的数据结构和易用性,在Java应用中扮演着越来越重要的角色,尤其是在提升性能、实现分布式协作方面。
Java面试题之Redis篇
Java面试题之Redis篇
【java面试题-Redis篇-2024】
Redis,英文全称是 Remote Dictionary Server(远程字典服务),是一个开源的使用 C 语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value 数据库,并提供多种语言的 API。与 MySQL 数据库不同的是,Redis 的数据是存在内存中的。它的读写速度非常快,每秒可以处理超过 10 万次读写操作。因此 Redis 被广泛应用于缓存,另外,Redis 也经常用来做分布式锁。除此之外,Redis 支持事务、持久化、LUA 脚本、多种集群方案。
Java面试中 常见Redis面试题有哪些
Java开发人员怎么面试?常见Redis面试题有哪些?Redis是目前各大企业都在使用的人们技术,也是企业选拔人才时考核的一个难题。有很多同学只是简单了解Redis的应用,但对于为什么要用Redis以及企业面试中有关Redis的问题却答不上来。接下来小编就给大家简单分析一下。 为什么使用Redis? 项目中使用Redis,主要考虑性能和并发两个方面。在大并发的情况下,所有的请求直接访问数据库,数据库会出现连接异常。这个时候,就需要使用Redis做一个缓冲操作,让请求先访问到Redis,而不是直接访问数据库。
Java 面试篇-Redis 专题
Redis 常见的面试专题:缓存击穿、缓存雪崩、缓存穿透、什么是布隆过滤器、什么是延时双删、持久化的方式、Redis 分布式锁、I/O 多路复用等
Java高频面试之Redis篇
按照这个核心思想,Redis 中的 LRU 策略,会在每个数据对应的 RedisObject 结构体中设置一个 lru 字段,用来记录数据的访问时间戳。缓存击穿是指在使用缓存系统时,某个热门数据过期或被删除后,恰好有大量的并发请求同时访问该数据,导致这些请求都无法命中缓存,直接访问后端存储系统,对后端系统造成巨大压力,可能引发系统崩溃或性能下降的问题。缓存雪崩是指在使用缓存系统时,缓存中大量的数据同时过期或失效,导致大量的请求直接访问后端存储系统,使得后端系统承受巨大的压力,甚至引发系统崩溃的现象。
使用Redis,java高分面试指南
细细解释一下这个问题,当一个请求发送数据当服务器时,一开始存储数据是 Redis缓存,没有进行任何关于数据库的操作,但是缓存不能持久化,因此需要 需要把这些数据存入数据库,因此会在一定条件时判断一个请求是否结束,一旦结束, 就会将缓存中的数据更新到数据库。而这个条件就像秒杀或者抢红包业务中红包数量 是否为0,如果为空,一次性写入数据库,完成持久化工作。 []( )Redis的原理解析 --------------------------------------------------------
779



被折叠的 条评论
为什么被折叠?



