
redis
文章平均质量分 81
一个憨憨coder
热爱
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Redis 的持久化
Redis 提供了两种主要的持久化机制:RDB 和 AOF,以确保数据的可靠性和灾难恢复能力。RDB 通过定时快照将内存数据保存为二进制文件,适合快速恢复和备份,但可能丢失部分数据。AOF 则记录所有写操作命令,提供更高的数据安全性,但文件较大且恢复速度较慢。从 Redis 4.0 开始,混合持久化模式结合了 RDB 和 AOF 的优点,推荐使用。选择持久化方式时,需根据数据重要性、恢复速度和性能需求进行权衡。常见问题包括 RDB 失败、AOF 文件损坏等,可通过日志检查和工具修复解决。原创 2025-05-13 17:21:32 · 693 阅读 · 0 评论 -
Redis和数据库数据的一致性
在使用 Redis 作为缓存的系统中,保证 Redis 与数据库的数据一致性是一个关键问题。由于 Redis 和数据库是异步更新的,可能导致数据不一致、脏读等问题。常见的同步策略包括先更新数据库再删除缓存、先删除缓存再更新数据库等,其中先更新数据库再删除缓存是推荐的做法。为避免并发带来的数据不一致,可以使用分布式锁或设置缓存过期时间。高级方案如通过 Binlog 或 MQ 异步更新缓存适用于高并发场景,但架构复杂且存在延迟。最佳实践是结合多种策略,如使用分布式锁、设置缓存 TTL 和异步补偿机制,以确保数据原创 2025-05-11 17:10:04 · 1368 阅读 · 0 评论 -
使用 Caffeine + Redis 构建多级缓存
在高并发场景下,使用 Caffeine + Redis 构建多级缓存 是一种高效的架构设计。Caffeine 作为本地缓存,提供快速响应和低延迟;Redis 作为远程缓存,支持数据共享和大容量存储。多级缓存相较于单级缓存(仅 Redis)具有显著优势:本地内存访问速度极快,分担 Redis 流量压力,提升并发性能,并在 Redis 故障时可通过 Caffeine 降级使用。在 Spring Boot 中,可以通过配置 Caffeine 和 Redis 实现多级缓存,核心组件包括缓存配置类、Redis 配置类原创 2025-05-11 11:52:13 · 417 阅读 · 0 评论 -
如何避免Redis缓存雪崩、缓存击穿、缓存穿透?
在使用 Redis 缓存时,高并发场景下常遇到三种问题:缓存雪崩、缓存击穿和缓存穿透。缓存雪崩是指大量缓存 key 同时失效,导致数据库压力骤增;缓存击穿是热点 key 失效后,大量请求直接冲击数据库;缓存穿透则是查询不存在的数据,导致无效请求压垮系统。针对这些问题,解决方案包括设置随机过期时间、使用分布式锁、缓存空值和布隆过滤器等。在 Spring Boot 中,可以通过 RedisTemplate 和 Redisson 等工具实现这些方案,结合双重检查、异步更新和布隆过滤器等技术,有效提升系统的稳定性和原创 2025-05-11 11:32:42 · 472 阅读 · 0 评论 -
Redisson + Spring AOP 实现注解式锁
本文介绍了如何使用 Redisson + Spring AOP 实现一个注解式分布式锁 @DistributedLock,以简化分布式锁的使用。通过自定义注解 @DistributedLock,开发者可以轻松为方法添加分布式锁功能。文章详细展示了项目结构、Maven依赖、自定义注解、AOP切面处理以及Redisson配置类的实现。AOP切面类 DistributedLockAspect 负责解析注解中的锁键、等待时间和持有时间,并通过Redisson客户端进行加锁和释放锁的操作。整个方案通过注解的方式,显著原创 2025-05-11 11:17:27 · 411 阅读 · 0 评论 -
Redis 实现分布式锁
Redis 的单线程特性使其成为实现轻量级分布式锁的理想选择,常用于多个服务实例之间的资源访问协调。分布式锁的核心思想是通过 Redis 共享一把“锁”,确保同一时间只有一个服务能执行关键操作。Redis 提供了原子性的加锁命令 SET lock_key unique_value NX PX expire_time,并通过 Lua 脚本保证释放锁的原子性。对于 Java 开发者,Redisson 框架简化了分布式锁的实现,支持可重入锁、自动续租等高级功能。Redis 原生实现适合简单的分布式互斥访问,而 R原创 2025-05-11 10:14:57 · 252 阅读 · 0 评论 -
Redis 实现延迟队列
延迟队列是一种常见的需求,适用于订单超时取消、定时提醒、缓存预热等场景。Redis 通过有序集合(Sorted Set)可以高效实现延迟队列。具体实现包括:使用 ZADD 命令将任务添加到有序集合,ZRANGEBYSCORE 获取到期任务,ZREM 删除已处理任务。Java 客户端推荐使用 Lettuce 或 Jedis。通过 Spring Boot 项目,可以编写 Redis 工具类、定时任务处理器和测试 Controller 来完整实现延迟队列功能。优化建议包括使用 Lua 脚本保证原子性、消费确认机制原创 2025-05-10 10:48:59 · 467 阅读 · 0 评论 -
Redis 线程模型
Redis 的线程模型是其高性能和高并发能力的关键。早期版本采用单线程模型,处理客户端请求命令在主线程中串行执行,避免了多线程上下文切换和锁机制的开销,但存在命令阻塞和多核 CPU 利用不足的局限。Redis 6.0 引入了 I/O 多线程模型,提高了网络 I/O 吞吐量,充分利用多核资源,同时保持命令处理的原子性和一致性。Redis 7.0 进一步增强了多线程支持,引入了任务多线程,允许某些耗时命令异步执行。持久化操作通过子进程或后台线程完成,避免阻塞主线程。实践建议包括合理选择线程数、避免慢查询、结合集原创 2025-05-10 10:26:15 · 548 阅读 · 0 评论 -
Redis 数据类型
Redis 是一种开源的内存数据库,支持多种数据类型,适用于不同的应用场景。其主要数据类型包括: String:用于缓存、计数器等; Hash:适合存储结构化对象; List:可实现队列、栈等; Set:用于存储唯一值及集合运算; Sorted Set:支持排序,适用于排行榜等; Bitmaps:处理二进制数据,如签到系统; HyperLogLog:用于基数统计,如独立访客统计; Geospatial:支持地理位置查询; Stream:用于消息队列和日志处理。 这些数据类型在实际项目中广泛应用于用户缓存、排原创 2025-05-10 10:09:42 · 690 阅读 · 0 评论