Day06 每日必会

简介: Redis常见数据结构包括:字符串、哈希、列表、集合、有序集合及地理空间索引。持久化机制有AOF和RDB,配合使用可有效防数据丢失。三大缓存问题:雪崩、穿透、击穿,需通过过期时间随机化、布隆过滤器、分布式锁等手段应对。

说下常见的Redis数据结构吧
字符串(String):最基本的数据结构,可以存储字符串、整数或者浮点数。
哈希(Hash):类似于关联数组,可以存储多个键值对,适合存储对象的属性。
列表(List):双向链表结构,支持从两端进行元素的插入和删除,适合做队列或者栈。
集合(Set):无序且不重复的元素集合,支持集合间的交集、并集和差集等操作。
有序集合(Sorted Set):类似于集合,但每个元素都会关联一个分数,可以按照分数进行排序。
地理空间索引(Geospatial Index):用于存储地理位置信息的数据结构,支持附近位置的搜索等功能。
Redis的持久化了解吗
了解过的面试官,主要是AOF和RDB,AOF是一种存储命令的持久化方式,可以借助于rewriteaof命令进行重写压缩以提高性能,而RDB存储的是一个二进制文件,两者一般是配合使用的,避免数据丢失。
并且持久化也跟刷盘机制有关,如果是always就不会丢失数据,everysecond最多丢一秒,如果是none交给系统就可能丢的多了。
Redis的三剑客
缓存雪崩(Cache Avalanche):指在某个时间段内,大量缓存数据同时失效,导致大量请求直接访问数据库,造成数据库压力剧增,甚至引起数据库宕机。缓存雪崩通常是由于缓存数据设置了相同的过期时间,导致在同一时间大量缓存同时失效引起的。
解决方法:可以在设置缓存时,给缓存数据的过期时间增加一个随机值,避免大量缓存同时失效;另外,可以使用热点数据预加载、限流等方式来缓解缓存雪崩的影响。
缓存穿透(Cache Penetration):指恶意请求或者不存在的数据频繁访问缓存,由于缓存中不存在该数据,每次请求都会直接访问数据库,导致数据库压力增大。
解决方法:可以在缓存中对于不存在的数据设置一个空值,或者使用布隆过滤器等方式来过滤恶意请求,避免直接访问数据库。
缓存击穿(Cache Breakdown):指针对某一热点数据,由于缓存数据过期或者被删除,导致大量请求直接访问数据库,造成数据库压力增大。
解决方法:可以在缓存失效时,使用互斥锁或者分布式锁来避免大量请求同时访问数据库,同时可以提前异步加载热点数据到缓存中,避免缓存失效时直接访问数据库。
理论专项
MySQL
索引数据结构
SQL优化
哪些场景会索引失效
如何定位慢查询
回表
覆盖索引
索引下推

相关文章
|
15小时前
Day07 每日必会
CAP理论指出分布式系统中一致性、可用性、分区容错性三者只能取其二,因网络不可靠,P必然存在,故需在A和C间权衡。BASE理论提出基本可用、软状态、最终一致性的思路,平衡CAP矛盾。Seata AT模式通过全局事务ID协调分支事务,实现分布式事务控制。MQ防消息丢失、重复消费及积压,需结合持久化、确认机制、幂等处理与批量消费等策略。
|
15小时前
|
消息中间件 SQL 缓存
Day05 每日必会
为确保消息不丢失,RabbitMQ提供三大机制:生产者确认(通过唯一ID与ACK/NACK反馈)、消息持久化(队列、消息、交换机持久化)和消费者确认(手动/自动ACK)。我们采用auto模式+重试处理。延迟消息可通过TTL或DelayExchange插件实现,常用于超时订单场景。消息积压可扩消费者或队列容量解决。MyBatis中#{}预编译防注入,${}直接拼接;有一级会话缓存和二级Mapper缓存;SQL执行经SqlSession解析MappedStatement,交由Executor执行。
|
15小时前
|
设计模式 缓存 Java
Day04 每日必会
在订单支付完成后通知配送中心等异步、解耦场景中常用MQ,如使用TopicExchange话题模式实现灵活路由。结合Spring的IOC、AOP、三级缓存及事务管理,保障系统稳定与解耦。
|
15小时前
|
设计模式 Linux 开发工具
Day03 每日必会
熟悉Docker部署,掌握镜像与容器操作命令,如pull、run、exec等;熟练使用Linux常用指令,包括文件、进程、网络管理;排查日志常用cat、grep、tail;了解SpringMVC执行流程、核心注解及设计模式。
|
15小时前
|
Dubbo Java 应用服务中间件
Day02 每日必会
Gateway基于Spring WebFlux与Netty实现非阻塞高性能转发,启动时创建Netty Server接收请求,匹配路由并经过滤器处理后转发至目标服务,响应反向经过滤后返回。项目远程调用主要使用OpenFeign,底层为HTTP,也曾使用Dubbo。JVM部分涵盖模型、GC、类加载及调优。
|
14小时前
|
负载均衡 算法 搜索推荐
重复性工作中如何培养匠心
本文探讨在互联网低增长周期下,如何在重复性工作中培养“匠心”。通过分析结果价值、过程贡献与可预测性三个维度,指出即便在熟稔的领域,也能通过深挖价值、主动创新、超越预期来拓展成长空间,实现从执行到卓越的跃迁。
|
15小时前
|
负载均衡 中间件 Java
Day01 每日必会
微服务并非绝对优于单体,需结合业务场景。简单应用选单体更轻便,避免分布式复杂性;复杂系统可选微服务,解耦性强、易扩展。常用中间件如Nacos(注册/配置中心)、OpenFeign(远程调用)、Gateway(网关)。Nacos支持心跳机制,区分临时与非临时实例,兼具AP/CP模式,较Eureka更具灵活性。负载均衡常用轮询、加权轮询等,项目中多用轮询策略。
|
15小时前
|
Java 应用服务中间件 网络安全
Eclipse运行SSM/SSH项目教程
本教程介绍如何在Eclipse中配置JDK、Tomcat并导入Java项目,支持SSH/SSM框架,含数据库连接配置、项目运行步骤及常见问题解决,附在线考试与图书馆管理系统案例及视频讲解。
|
14小时前
|
架构师 前端开发 中间件
技术新人成长到Leader的路径
本文为技术人成长进阶指南,涵盖新人到技术leader的四大阶段:从踏实做事、建立思维框架,到激发自我驱动力、打造核心竞争力;从修炼全局视角、成事思维,到成就他人、创造价值感。强调以事修人、以人成事,助力技术人实现持续成长与突破。(238字)
|
15小时前
|
存储 缓存 安全
One Trick Per Day
初始化Map应避免直接指定大小,建议用Guava或手动计算容量;禁用Executors创建线程池,防止OOM,推荐自定义ThreadPoolExecutor;Arrays.asList返回不可变列表,禁止修改操作;遍历Map优先使用entrySet或forEach;SimpleDateFormat非线程安全,勿定义为static,推荐ThreadLocal或Java8新时间类;并发修改记录需加锁,优先乐观锁,冲突高则用悲观锁。

热门文章

最新文章