当前位置: 首页 > news >正文

Redis的使用总结

Redis 核心使用场景

  1. 缓存加速

    • 高频访问数据缓存(如商品信息、用户信息)

    • 缓解数据库压力,提升响应速度

  2. 会话存储

    • 分布式系统共享 Session(替代 Tomcat Session)

    • 支持 TTL 自动过期

  3. 排行榜/计数器

    • 实时排序(Sorted Set 实现)

    • 文章阅读量/点赞数统计(INCR 命令)

  4. 消息队列

    • List 实现简单队列(LPUSH/BRPOP)

    • Streams 实现可靠消息队列(Redis 5.0+)

  5. 分布式锁

    • SETNX 命令实现互斥锁

    • Redisson 客户端封装分布式锁

  6. 实时系统

    • 用户行为记录(最近搜索、浏览历史)

    • 实时数据统计(在线人数、地理位置)

Redis 数据类型与典型应用

数据类型结构特征典型场景操作命令示例
String二进制安全文本/数值缓存、计数器、分布式锁SET/GET/INCR/DECR
Hash字段值映射表存储对象(用户信息、商品详情)HSET/HGET/HGETALL
List双向链表消息队列、最新消息列表LPUSH/RPOP/LRANGE
Set无序唯一集合标签系统、共同好友SADD/SMEMBERS/SINTER
ZSet有序分值集合排行榜、延迟队列ZADD/ZRANGE/ZREVRANGE
Stream消息流(持久化队列)消息队列(支持消费者组)XADD/XREAD/XGROUP
BitMap位操作签到统计、用户画像SETBIT/BITCOUNT/BITOP
HyperLogLog基数估算算法UV 统计(去重计数)PFADD/PFCOUNT

键(Key)命名规范

  1. 层级结构业务模块:子模块:唯一标识

    • 示例:user:profile:1001

  2. 命名原则

    • 长度 ≤ 100 字符

    • 避免特殊字符(推荐字母数字 + 冒号)

    • 可读性优先(如 order:status:2024

Spring Boot 集成实践

1. 添加依赖
<!-- Spring Data Redis -->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId>
</dependency><!-- 连接池(推荐) -->
<dependency><groupId>org.apache.commons</groupId><artifactId>commons-pool2</artifactId>
</dependency>
2. 配置参数 (application.yml)
spring:redis:host: 127.0.0.1port: 6379password: yourpasswordlettuce:pool:max-active: 20max-idle: 10min-idle: 5
3. 核心组件配置
@Configuration
public class RedisConfig {@Beanpublic RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {RedisTemplate<String, Object> template = new RedisTemplate<>();template.setConnectionFactory(factory);template.setKeySerializer(RedisSerializer.string());template.setValueSerializer(RedisSerializer.json());return template;}@Beanpublic StringRedisTemplate stringRedisTemplate(RedisConnectionFactory factory) {return new StringRedisTemplate(factory);}
}
4. 使用示例
@Component
public class UserService {private final RedisTemplate<String, User> redisTemplate;// 存储用户信息public void cacheUser(User user) {redisTemplate.opsForValue().set("user:" + user.getId(), user, 30, TimeUnit.MINUTES);}// 获取用户信息public User getCachedUser(Long userId) {return redisTemplate.opsForValue().get("user:" + userId);}// 使用 Hash 存储对象public void cacheUserProfile(Long userId, Map<String, String> profile) {redisTemplate.opsForHash().putAll("user:profile:" + userId, profile);}
}
5. 注解缓存支持
@Configuration
@EnableCaching
public class CacheConfig {@Beanpublic CacheManager cacheManager(RedisConnectionFactory factory) {return RedisCacheManager.builder(factory).cacheDefaults(RedisCacheConfiguration.defaultCacheConfig().entryTtl(Duration.ofHours(1))).build();}
}// 业务使用
@Service
public class ProductService {@Cacheable(value = "products", key = "#productId")public Product getProductById(String productId) {// 数据库查询逻辑}
}

最佳实践建议

  1. 连接池配置:合理设置 max-active 防止连接耗尽

  2. 序列化选择:优先使用 JSON 序列化(Jackson2JsonRedisSerializer)

  3. 大Key规避:String 类型 value ≤ 10KB,集合元素 ≤ 1万

  4. 事务限制:Redis 事务非原子性,推荐使用 Lua 脚本

  5. 监控告警:集成 Prometheus + Grafana 监控 QPS、内存等指标

缓存穿透缓存雪崩缓存击穿

问题定义后果解决方案
缓存穿透请求的数据在缓存和数据库中都不存在大量无效请求打到数据库缓存空值、布隆过滤器、请求数据基础格式校验
缓存雪崩大量缓存同时过期,导致请求打到数据库数据库压力骤增,可能崩溃随机过期时间、多级缓存、限流与降级、热点数据永不过期
缓存击穿热点 key 过期时,大量请求同时访问数据库压力瞬间增大互斥锁、逻辑过期、提前刷新

http://www.xdnf.cn/news/63991.html

相关文章:

  • 电脑硬盘常见的几种接口类型
  • 方案精读:2024 华为数字政府智慧政务一网统管解决方案【附全文阅读】
  • Flowable7.x学习笔记(十)分页查询已部署 BPMN XML 流程
  • 博奥龙全系方案护航科研命脉
  • 让数据应用更简单:Streamlit与Gradio的比较与联系
  • AI音乐解决方案:1分钟可切换suno、udio、luno、kuka等多种模型,suno风控秒切换 | AI Music API
  • 基于瑞芯微RK3576国产ARM八核2.2GHz A72 工业评估板——ROS2系统使用说明
  • IDEA/WebStorm中Git操作缓慢的解决方案
  • OSPF --- LSA
  • elasticsearch7.15节点磁盘空间满了迁移数据到新磁盘
  • LangChain与图数据库Neo4j LLMGraphTransformer融合:医疗辅助诊断、金融风控领域垂直领域、法律咨询场景问答系统的技术实践
  • WebRTC通信技术EasyRTC音视频实时通话安全巡检搭建低延迟、高可靠的智能巡检新体系
  • docker学习笔记2-最佳实践
  • 腾讯一面-软件开发实习-PC客户端开发方向
  • 龙虎榜——20250421
  • 【前端样式】用 aspect-ratio 实现等比容器:视频封面与图片占位的终极解决方案
  • 基于超启发鲸鱼优化算法的混合神经网络多输入单输出回归预测模型 HHWOA-CNN-LSTM-Attention
  • 计算机组成与体系结构:内存层次结构(Memory Hierarchy)
  • # 04_Elastic Stack 从入门到实践(四)--3
  • 项目班——0419——functionbind生产消费(未完成)
  • 七、专家系统
  • C#进阶学习(九)委托的介绍
  • 前端技术未来的发展趋势分析
  • LLM大模型中的基础数学工具—— 约束优化
  • FPGA为什么快?——从架构到实现的深度解析
  • 第七届传智杯全国IT技能大赛程序设计赛道 国赛(总决赛)—— (B组)题解
  • SQL问题分析与诊断(8)——分析方法2
  • 【错误记录】Windows 命令行程序循环暂停问题分析 ( 设置 “ 命令记录 “ 选项 | 启用 “ 丢弃旧的副本 “ 选项 | 将日志重定向到文件 )
  • 利用WSL2的镜像功能访问Windows下的所有网卡
  • SpringBoot自定义验证器:企业级参数校验架构设计与实践