Spring Boot使用Redis常用场景

Spring Boot使用Redis常用场景


一、概述:Redis 是什么?为什么要用它?

Redis(Remote Dictionary Server)是一个内存中的数据存储系统(类似一个“超级大字典”),它能存各种类型的数据(字符串、列表、哈希等),而且读写速度极快(因为数据存在内存里)。
简单说,Redis 就像电脑的“缓存抽屉”:当你的程序需要频繁读取或修改某些数据时(比如用户登录信息、商品销量),直接从 Redis 里拿,比从硬盘的数据库(如 MySQL)里拿快 10 倍甚至 更多倍!

二、Redis 支持的数据类型(5种最常用)

Redis 能存很多种“结构”的数据,就像不同形状的盒子,装不同的东西:

类型特点举例场景
字符串(String)最基础类型,存文本或数字(比如 “张三” 或 “100”)存用户手机号、商品库存数量
哈希(Hash)类似“小字典”,存键值对的集合(比如 {“name”:“张三”, “age”:18})存用户详细信息、商品属性
列表(List)有序的字符串列表(类似数组,可从左/右添加元素)存朋友圈动态列表、日志队列
集合(Set)无序、不重复的字符串集合(类似数学里的集合)存用户点赞的商品ID(去重)
有序集合(ZSet)类似集合,但每个元素有“分数”(按分数排序)存排行榜(比如积分排名)
三、Redis 的常见使用场景

Redis 能解决很多实际问题,最常用的 4 种场景:

  1. 缓存(最常用!):把高频访问的数据(比如商品详情、首页广告)存到 Redis,减少数据库查询次数。
  2. 计数器:用 Redis 的 INCR 命令(类似 +1 操作)统计文章阅读量、视频播放量,比数据库的 +1 快很多。
  3. 会话共享:多个服务器(比如 A 服务器和 B 服务器)共享用户登录状态(存 Redis 里,不用每个服务器单独存)。
  4. 分布式锁:在秒杀活动中,用 Redis 保证同一时间只有 1 个请求能修改库存(防止超卖)。
四、实际业务举例:商品详情页缓存

需求:用户访问商品详情页时,先从 Redis 查缓存;如果没有,再查数据库,并把结果存到 Redis(避免频繁查数据库)。

实现步骤

  1. 用户访问商品详情页(比如商品ID是 1001);
  2. 程序先查 Redis 是否有 product:1001 的缓存;
  3. 如果有,直接返回缓存数据;
  4. 如果没有,查 MySQL 数据库,拿到商品详情;
  5. 把商品详情存到 Redis(设 30 分钟过期),再返回给用户。
@Service
public class ProductService {@Autowiredprivate ProductMapper productMapper;  // 操作数据库的类(假设已定义)@Autowiredprivate RedisTemplate<String, Object> redisTemplate;public Product getProductDetail(Long productId) {String key = "product:" + productId;// 1. 先查 Redis 缓存Product product = (Product) redisTemplate.opsForValue().get(key);if (product != null) {return product; // 缓存有数据,直接返回}// 2. 缓存没有,查数据库product = productMapper.selectById(productId); // 3. 把数据库结果存到 Redis(设 30 分钟过期)if (product != null) {redisTemplate.opsForValue().set(key, product, 30, TimeUnit.MINUTES);}return product;}
}
五、总结:使用 Redis 的注意事项
  1. 缓存过期时间:一定要给缓存设过期时间(比如 30 分钟),否则 Redis 内存会被占满!
  2. 避免缓存击穿:高并发时,如果某个热点缓存突然过期(比如秒杀商品),会导致大量请求同时查数据库。可以用“分布式锁”(比如 Redis 的 setIfAbsent 命令)保证只有 1 个请求查数据库,其他请求等缓存更新。
  3. 数据一致性:如果数据库数据修改了,要及时删除或更新 Redis 里的旧缓存(比如用户修改了商品价格,要删除 product:1001 的缓存)。
  4. 内存监控:用 redis-cli 命令(或可视化工具如 RedisDesktopManager)监控内存使用情况,避免内存不足。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/912277.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/912277.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CAD文件处理控件Aspose.CAD教程:在 C# 中将 DXF 文件转换为 SVG - AutoCAD C# 示例

概述 使用 C# 轻松将DXF文件转换为SVG。此转换可更好地兼容 Web 应用程序&#xff0c;并增强 CAD 图纸的视觉呈现效果。使用Aspose.CAD for .NET &#xff0c;开发人员可以轻松实现此转换过程。该 SDK 提供强大的功能&#xff0c;使其成为 C# 开发人员的可靠选择。Aspose.CAD …

Gitee 持续集成与交付(CI/CD)篇

Gitee 持续集成与交付&#xff08;CI/CD&#xff09;篇 &#x1f680; 文章目录 Gitee 持续集成与交付&#xff08;CI/CD&#xff09;篇 &#x1f680;&#x1f3af; 什么是 CI/CD&#xff1f;&#x1f31f; Gitee Go 介绍✨ 核心特性&#x1f3a8; 支持的技术栈 &#x1f680;…

深度学习:PyTorch卷积神经网络图像分类案例分享

本文目录&#xff1a; 一、了解CIFAR-10数据集二、案例之导包三、案例之创建数据集四、案例之搭建神经网络&#xff08;模型构建&#xff09;五、案例之编写训练函数&#xff08;训练模型&#xff09;六、案例之编写预测函数&#xff08;模型测试&#xff09; 前言&#xff1a;…

记录多功能按键第二种写法使用定时器周期间隔判断.

逻辑是通过定时器溢出周期进行判断按下次数 比如设置定时器溢出周期为500MS,每次溢出都会判断按键按下次数,如果下个周期前没有触发按下,则结束键值判断.并确定触发键值.清空按下次数标志.测试比一个定时器周期按下按键次数判断写法要稳定... 记录STM32实现多功能按键_stm32一…

【安卓Sensor框架-1】SensorService 的启动流程

内核启动后&#xff0c;首个用户空间进程init&#xff08;pid1&#xff09;解析init.rc配置文件&#xff0c;启动关键服务&#xff08;如Zygote和ServiceManager&#xff09;。 Zygote服务配置为/system/bin/app_process --zygote --start-system-server&#xff0c;后续用于孵…

centos网卡绑定参考

同事整理分享&#xff1a; 1. 加载 Bonding 模块 modprobe bonding 获取网卡名称 ip a 找到接了网线的网卡名称&#xff0c;记下。 3. 配置物理网卡 创建并编辑 /etc/sysconfig/network-scripts/ifcfg-ens36&#xff08;ifcfg-后面的内容根据上面找到的具体网卡名称决定&#…

mbedtls ssl handshake error,res:-0x2700

用LinkSDK.c连接第三方云平台出现现象 解决方案&#xff1a; 在_tls_network_establish函数中加入 mbedtls_ssl_conf_authmode(&adapter_handle->mbedtls.ssl_config, MBEDTLS_SSL_VERIFY_NONE);原因解释&#xff1a;用连接方式是不用证书认证/跳过服务端认证。

Spring Security 的方法级权限控制是如何利用 AOP 的?

Spring Security 的方法级权限控制是 AOP 技术在实际应用中一个极其强大的应用典范。它允许我们以声明式的方式保护业务方法&#xff0c;将安全规则与业务逻辑彻底解耦。 核心思想&#xff1a;权限检查的“门卫” 你可以把 AOP 在方法级安全中的作用想象成一个尽职尽责的“门…

一键内网穿透,无需域名和服务器,自动https访问

cloudflare能将内网web转为外网可访问的地址。&#xff08;这和apiSQL有点类似&#xff0c;apiSQ可以将内网数据库轻松转换为外网的API&#xff0c;并且还支持代理内网已有API&#xff0c;增强安全增加API Key&#xff0c;以https访问等等&#xff09; 但Cloudfalre tunnel这个…

Sentinel(二):Sentinel流量控制

一、Sentinel 流控规则基本介绍 1、Snetinel 流控规则配置方式 Sentinel 支持可视化的流控规则配置&#xff0c;使用非常简单&#xff1b;可以在监控服务下的“簇点链路” 或 “流控规则” 中 给指定的请求资源配置流控规则&#xff1b;一般推荐在 “簇点链路” 中配置流控规则…

支持PY普冉系列单片机调试工具PY32linK仿真器

PY32 Link是专为 ‌PY32系列ARM-Cortex内核单片机‌&#xff08;如PY32F002A/030/071/040/403等&#xff09;设计的仿真器&#xff0c;支持全系列芯片的‌调试和仿真‌功能。‌开发环境兼容性‌支持主流IDE&#xff1a;‌Keil MDK‌ 和 ‌IAR Embedded Workbench‌&#xff0c;…

深入解析Python多服务器监控告警系统:从原理到生产部署

深入解析Python多服务器监控告警系统&#xff1a;从原理到生产部署 整体架构图 核心设计思想 无代理监控&#xff1a;通过SSH直接获取数据&#xff0c;无需在目标服务器安装代理故障隔离&#xff1a;单台服务器故障不影响整体监控多级检测&#xff1a;网络层→资源层→服务层层…

JUC:10.线程、monitor管程、锁对象之间在synchronized加锁的流程(未完)

一、monitor管程工作原理&#xff1a; 首先&#xff0c;synchronized是一个对象锁&#xff0c;当线程运行到某个临界区&#xff0c;这个临界区使用synchronized对对象obj进行了上锁&#xff0c;此时底层发生了什么&#xff1f; 1.当synchronized对obj上锁后&#xff0c;synch…

Elasticsearch(ES)分页

Elasticsearch&#xff08;简称 ES&#xff09;本身不适合传统意义上的“深分页”&#xff0c;但提供了多种分页方式&#xff0c;每种适用不同场景。我们来详细讲解&#xff1a; 一、基本分页&#xff08;from size&#xff09; 最常用的分页方式&#xff0c;类似 SQL 的 LIM…

原生微信小程序:用 `setData` 正确修改数组中的对象项状态(附实战技巧)

&#x1f4cc; 背景介绍 在微信小程序开发中&#xff0c;我们经常需要修改数组中某个对象的某个字段&#xff0c;比如&#xff1a; 列表中的某一项展开/收起多选状态切换数据列表中的临时标记等 一个常见的场景是&#xff1a; lists: [{ show: true }, { show: true }, { s…

Oracle 临时表空间相关操作

一、临时表空间概述 临时表空间&#xff08;Temporary Tablespace&#xff09;是Oracle数据库中用于存储临时数据的特殊存储区域&#xff0c;其数据在会话结束或事务提交后自动清除&#xff0c;重启数据库后彻底消失。主要用途包括&#xff1a; 存储排序操作&#xff08;如OR…

从静态到动态:Web渲染模式的演进和突破

渲染模式有好多种&#xff0c;了解下web的各种渲染模式&#xff0c;对技术选型有很大的参考作用。 一、静态HTML时代 早期&#xff08;1990 - 1995年&#xff09;网页开发完全依赖手工编写HTML&#xff08;HyperText Markup Language&#xff09;和CSS&#xff08;层叠样式表…

Flask(六) 数据库操作SQLAlchemy

文章目录 一、准备工作二、最小化可运行示例✅ 补充延迟绑定方式&#xff08;推荐方式&#xff09; 三、数据库基本操作&#xff08;增删改查&#xff09;1. 插入数据&#xff08;增&#xff09;2. 查询数据&#xff08;查&#xff09;3. 更新数据&#xff08;改&#xff09;4.…

PYTHON从入门到实践7-获取用户输入与while循环

# 【1】获取用户输入 # 【2】python数据类型的转换 input_res input("请输入一个数字\n") if int(input_res) % 10 0:print("你输入的数是10的倍数") else:print("你输入的数不是10的倍数") # 【3】while循环&#xff0c;适合不知道循环多少次…

学习笔记(C++篇)—— Day 8

1.STL简介 STL(standard template libaray-标准模板库)&#xff1a;是C标准库的重要组成部分&#xff0c;不仅是一个可复用的组件库&#xff0c;而且是一个包罗数据结构与算法的软件框架。 2.STL的六大组件 先这样&#xff0c;下一部分是string的内容&#xff0c;内容比较多&a…