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

Spring Boot整合Redis指南

一、环境准备

在开始整合前,请确保已完成以下准备工作:

  1. 已安装Redis服务(安装指南)
  2. 创建好Spring Boot项目

二、添加依赖

在项目的pom.xml中添加以下依赖:

<!-- 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>

三、配置Redis连接

application.yml中配置Redis连接信息:

spring:redis:host: 127.0.0.1       # Redis服务器地址port: 6379            # Redis服务器端口password: xxxx        # Redis密码(没有密码可不填)database: 0           # 使用的数据库索引timeout: 5000         # 连接超时时间(毫秒)lettuce:pool:max-active: 8     # 连接池最大连接数max-idle: 8       # 连接池最大空闲连接数min-idle: 0       # 连接池最小空闲连接数max-wait: 1000ms  # 获取连接最大等待时间

四、Redis操作方式

Spring Boot提供了两种主要的Redis操作模板:

1. StringRedisTemplate(推荐)

适用于字符串类型的键值操作:

@RestController
@RequestMapping("/redis")
public class RedisController {@Autowiredprivate StringRedisTemplate stringRedisTemplate;@GetMapping("/set")public String set(@RequestParam String key, @RequestParam String value) {stringRedisTemplate.opsForValue().set(key, value);return "Set success";}@GetMapping("/get")public String get(@RequestParam String key) {return stringRedisTemplate.opsForValue().get(key);}
}

2. RedisTemplate(对象存储)

适用于存储Java对象,需要配置序列化:

@Configuration
public class RedisConfig {@Beanpublic RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory factory) {RedisTemplate<Object, Object> template = new RedisTemplate<>();template.setConnectionFactory(factory);// 使用JSON序列化器GenericJackson2JsonRedisSerializer jsonSerializer = new GenericJackson2JsonRedisSerializer();// 设置序列化方式template.setKeySerializer(new StringRedisSerializer());template.setValueSerializer(jsonSerializer);template.setHashKeySerializer(new StringRedisSerializer());template.setHashValueSerializer(jsonSerializer);template.afterPropertiesSet();return template;}
}

使用示例:

@Service
public class RedisObjectService {@Autowiredprivate RedisTemplate<Object, Object> redisTemplate;public void saveObject(String key, Object value) {redisTemplate.opsForValue().set(key, value);}public Object getObject(String key) {return redisTemplate.opsForValue().get(key);}
}

五、Redis数据结构操作

1. 字符串(String)操作

// 设置值(带过期时间)
stringRedisTemplate.opsForValue().set("key", "value", Duration.ofMinutes(10));// 获取值
String value = stringRedisTemplate.opsForValue().get("key");// 删除键
stringRedisTemplate.delete("key");// 检查键是否存在
boolean exists = stringRedisTemplate.hasKey("key");

2. 列表(List)操作

// 左侧推入元素
stringRedisTemplate.opsForList().leftPush("taskList", "task1");// 右侧弹出元素
String task = stringRedisTemplate.opsForList().rightPop("taskList");// 获取列表范围
List<String> tasks = stringRedisTemplate.opsForList().range("taskList", 0, -1);

3. 集合(Set)操作

// 添加元素
stringRedisTemplate.opsForSet().add("mySet", "A", "B", "C");// 获取所有元素
Set<String> members = stringRedisTemplate.opsForSet().members("mySet");// 检查元素是否存在
boolean isMember = stringRedisTemplate.opsForSet().isMember("mySet", "A");

4. 哈希(Hash)操作

// 设置哈希字段
stringRedisTemplate.opsForHash().put("user:1001", "name", "Tom");// 获取哈希字段
String name = (String) stringRedisTemplate.opsForHash().get("user:1001", "name");// 获取所有字段
Map<Object, Object> user = stringRedisTemplate.opsForHash().entries("user:1001");

5. 有序集合(ZSet)操作

// 添加元素
stringRedisTemplate.opsForZSet().add("ranking", "Tom", 100);// 获取排名
Set<String> topUsers = stringRedisTemplate.opsForZSet().range("ranking", 0, 2);// 获取元素分数
Double score = stringRedisTemplate.opsForZSet().score("ranking", "Tom");

六、最佳实践建议

  1. 连接池配置:根据应用并发量合理配置连接池参数
  2. 键命名规范:使用冒号分隔的命名空间(如user:1001:profile
  3. 序列化选择:优先使用StringRedisTemplate处理字符串,复杂对象使用JSON序列化
  4. 异常处理:添加适当的异常处理逻辑
  5. 过期时间:为缓存数据设置合理的过期时间

通过以上配置和示例,您可以在Spring Boot项目中轻松集成Redis,实现高效的数据缓存和存储功能。

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

相关文章:

  • 强化学习理论基础:从Q-learning到PPO的算法演进(2)
  • RabbitMQ RPC模式Python示例
  • go写前端打包的自动化工具
  • oracle内存参数调整
  • 【Redis】解码Redis中的list类型,基本命令,内部编码方式以及适用的场景
  • 流程管理系统技术选型避坑指南(含开源)
  • 优化 ArcPy 脚本性能
  • Jmeter并发测试和持续性压测
  • AI+实时计算如何赋能金融系统?DolphinDB 在国泰君安期货年度中期策略会的演讲
  • 鸿蒙版FlutterSDK3.27.4可以使用了
  • 报道称CoreWeave洽谈收购Core Scientific,后者涨超30%
  • 人工智能-基础篇-2-什么是机器学习?(ML,监督学习,半监督学习,零监督学习,强化学习,深度学习,机器学习步骤等)
  • 报表控件stimulsoft教程:在报表、仪表板和 PDF 表单自动生成缩略图
  • 华为云鸿蒙应用入门级开发者认证 实验(HCCDA-HarmonyOS Cloud Apps)
  • 【缓存技术】深入分析如果使用好缓存及注意事项
  • C++(模板与容器)
  • python中学物理实验模拟:斜面受力分析
  • 苍穹外卖day3--公共字段填充+新增菜品
  • python基于协同过滤的动漫推荐系统
  • 【51单片机5毫秒定时器】2022-6-1
  • Linux 内核 TCP 的核心引擎:tcp_input.c 与 tcp_output.c 的协同之道
  • Miniconda+Jupyter+PyCharm初始环境配置
  • 物联网与低代码:Node-RED如何赋能工业智能化与纵横智控的创新实践
  • 【已解决】Android Studio gradle遇到unresolved reference错误
  • 【机器学习深度学习】线性回归
  • 【thinkphp5】Session和Cache记录微信accesstoken
  • 【原创】【4】【辅助工具】基于视觉模型+FFmpeg+MoviePy实现短视频自动化二次编辑+多赛道
  • Gartner《敏捷化组织团队拓扑方法论》学习心得
  • [特殊字符]推客带货小程序解决方案——0门槛裂变营销,佣金赚不停!
  • 华为交换机 USG6311E 新建 vlan