【java面经】Redis速记

目录

基本概念

string

hash

list

set

zset

常见问题及解决

缓存穿透

缓存击穿

缓存雪崩

Redis内存管理策略

noeviction

allkeys-lru

allkeys-random

volatile-random

volatile-ttl

Redis持久化机制

RDB快照

AOF追加文件

Redis多线程特性

Redis应用场景

缓存

消息队列

分布式锁

排行榜

实时系统

基本概念

string

基本的数据类型,存储任何类型数据包括图片,序列化对象等等,一个键最大存512MB

hash

键值对集合,string的field和value的映射表

list

字符串列表,可以头或者尾插入元素

set

string类型的无序集合,哈希表实现,O(1)

zset

类似于set,每个元素关联double类型分数,用于从小到大排序元素,成员唯一,分数可重复。

常见问题及解决

缓存穿透

缓存和数据库都没有数据,用户频繁发起请求导致数据库压力过大

解决:布隆过滤器提前过滤不存在的数据,或者对查询不存在的数据统一返回处理

缓存击穿

缓存无,数据库有数据(缓存到期)的时候,并发请求数据库查询同一数据,数据库压力过大

解决:加锁机制,延时双删策略

缓存雪崩

缓存大量数据同时过期,查询数据量巨大,数据库压力过大。

解决:优化缓存过期时间,使其分布更均匀,或者使用缓存预热机制提前加载热点数据

Redis内存管理策略

noeviction

不驱逐任何键,新写入操作就报错

allkeys-lru

移除最近少使用的键

allkeys-random

碎金移除某个键

volatile-random

设置过期时间的键中,随机删除某个键

volatile-ttl

设置过期时间的键中,先删最早过期的

Redis持久化机制

RDB快照

指定时间拍内存数据快照,保存在dump.rdb中

重启时,载入RDB文件还原数据库状态

缺点:有丢失RDB进而丢失数据的风险

AOF追加文件

每次redis执行改变数据库的命令时,该命令都会被追加到AOF文件末尾

重启时,redis通过重新执行AOF文件中的命令来重构数据集

更耐久的机制

Redis多线程特性

redis执行命令是单线程的,多线程主要用于处理网络数据的读写的协议解析,以优化整体性能。

优点:保证了数据处理的一致性,提高了系统的吞吐量和相应速度。

Redis应用场景

缓存

大幅减轻数据库压力,提高相应速度

消息队列

list数据结构实现了简单的消息队列,进行任务的异步处理

分布式锁

结合redis命令特性和事务,实现分布式环境下的锁机制,确保数据一致性

排行榜

利用Zset能够实现各类排行榜的功能(商品销量榜,游戏排行榜等等)

实时系统

由于高并发和低延迟的特性,redis可用于实时数据分析,展示系统中。

相关推荐
xcl092519 小时前
北京24小时自助健身房系统软件开发实战:从架构到部署全流程指南
java·spring boot·架构
龙腾AI白云21 小时前
AI检索增强生成(RAG):解决大模型幻觉的核心落地技术
数据库·人工智能·机器学习·知识图谱
一 乐21 小时前
动漫书销售商城|基于springboot + vue动漫书销售商城(源码+数据库+文档)
java·数据库·vue.js·spring boot·毕业设计
zzj_26261021 小时前
MySQL常用操作
数据库·mysql
卓怡学长21 小时前
w214基于jsp知道特产网
java·intellij-idea
步行cgn21 小时前
Spring 注解使用详解
java·spring
其实防守也摸鱼21 小时前
Fastjson 反序列化漏洞(JNDI注入)
android·数据库·安全·oracle·自动化·fastjson·反序列化
一条小小yu21 小时前
Spring IoC的理解
java·后端·spring
haerapi1 天前
把 PostgreSQL 复制巡检做成可审计闭环:确定性采集、阈值判定与受控模型归纳
数据库·postgresql
落魄实习生1 天前
Agent Scope Java 2.x 系列【7】工具使用
java·开发语言·ai