在 Spring Boot 项目中配置 RedisTemplate 和 Maven 依赖!
【摘要】 🏆本文收录于「滚雪球学SpringBoot」专栏,专业攻坚指数级提升持续更新中,up!up!up!!欢迎点赞&&收藏&&订阅。@TOC ✨ 1. Maven 依赖在 Spring Boot 项目中使用 Redis,需要添加以下 Maven 依赖:<dependencies> <!-- Spring Data Redis 依赖 --> <dependency> <g...
🏆本文收录于「滚雪球学SpringBoot」专栏,专业攻坚指数级提升持续更新中,up!up!up!!欢迎点赞&&收藏&&订阅。
@TOC
✨ 1. Maven 依赖
在 Spring Boot 项目中使用 Redis,需要添加以下 Maven 依赖:
<dependencies>
<!-- Spring Data Redis 依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<!-- Jackson 序列化依赖 -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</dependency>
<!-- Jedis 连接池 (可选) -->
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
</dependency>
<!-- 或 Lettuce 连接池 (推荐) -->
<dependency>
<groupId>io.lettuce.core</groupId>
<artifactId>lettuce-core</artifactId>
</dependency>
</dependencies>
🌟 2. 配置 RedisTemplate
RedisTemplate
是 Spring 提供的操作 Redis 的工具类,用于执行 Redis 的各种操作。以下是如何在 Spring Boot 中自定义配置 RedisTemplate
的写法。
配置类
import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.PropertyAccessor;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;
@Configuration
public class RedisConfig {
@Bean
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
redisTemplate.setConnectionFactory(redisConnectionFactory);
// 设置 Key 的序列化器
StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();
redisTemplate.setKeySerializer(stringRedisSerializer);
redisTemplate.setHashKeySerializer(stringRedisSerializer);
// 设置 Value 的序列化器
GenericJackson2JsonRedisSerializer jackson2JsonRedisSerializer = new GenericJackson2JsonRedisSerializer();
redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);
redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer);
redisTemplate.afterPropertiesSet();
return redisTemplate;
}
}
🌐 3. 使用 RedisTemplate
配置完成后,可以在业务逻辑中直接使用 RedisTemplate
操作 Redis。
Service 示例
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
import java.util.concurrent.TimeUnit;
@Service
public class RedisService {
@Autowired
private RedisTemplate<String, Object> redisTemplate;
// 保存数据到 Redis
public void save(String key, Object value, long timeout) {
redisTemplate.opsForValue().set(key, value, timeout, TimeUnit.SECONDS);
}
// 从 Redis 获取数据
public Object get(String key) {
return redisTemplate.opsForValue().get(key);
}
// 删除 Redis 中的数据
public void delete(String key) {
redisTemplate.delete(key);
}
}
⚙️ 4. 配置 Spring Boot 的 application.yml
确保你的 Redis 服务地址和端口正确,可以通过 application.yml
配置 Redis 连接信息。
spring:
redis:
host: 127.0.0.1
port: 6379
password: # 如果没有密码,留空
database: 0
lettuce:
pool:
max-active: 8
max-idle: 8
min-idle: 0
timeout: 2000ms
🛠️ 5. RedisTemplate 序列化器详解
为什么需要自定义序列化器?
默认情况下,RedisTemplate
使用 JdkSerializationRedisSerializer
对对象进行序列化,这种方式会将数据存储为二进制,导致在 Redis 客户端中直接查看数据时不够直观。为了解决这个问题,我们可以使用 StringRedisSerializer
或 GenericJackson2JsonRedisSerializer
。
StringRedisSerializer
:将键值序列化为字符串格式,直观易读。GenericJackson2JsonRedisSerializer
:将值序列化为 JSON 格式,支持复杂对象序列化。
对比表:
序列化器类型 | 优点 | 缺点 |
---|---|---|
JdkSerializationRedisSerializer |
默认序列化,直接支持 Java 对象 | 数据不可读,跨语言支持较差 |
StringRedisSerializer |
易于阅读,可用于纯字符串数据 | 不支持对象的序列化 |
GenericJackson2JsonRedisSerializer |
支持对象序列化,JSON 格式可读,跨语言 | 序列化 JSON 消耗一定性能 |
🌟 6. RedisTemplate 实战案例
保存用户对象到 Redis
User 对象:
import java.io.Serializable;
public class User implements Serializable {
private String id;
private String name;
private int age;
// Constructors, Getters and Setters
}
保存和获取用户:
@Service
public class UserService {
@Autowired
private RedisTemplate<String, Object> redisTemplate;
private static final String USER_KEY_PREFIX = "user:";
// 保存用户
public void saveUser(User user) {
String key = USER_KEY_PREFIX + user.getId();
redisTemplate.opsForValue().set(key, user, 3600, TimeUnit.SECONDS); // 有效期1小时
}
// 获取用户
public User getUser(String userId) {
String key = USER_KEY_PREFIX + userId;
return (User) redisTemplate.opsForValue().get(key);
}
// 删除用户
public void deleteUser(String userId) {
String key = USER_KEY_PREFIX + userId;
redisTemplate.delete(key);
}
}
测试示例:
@SpringBootTest
public class RedisTemplateTest {
@Autowired
private UserService userService;
@Test
public void testRedisTemplate() {
// 创建用户
User user = new User();
user.setId("123");
user.setName("Alice");
user.setAge(25);
// 保存用户
userService.saveUser(user);
// 获取用户
User cachedUser = userService.getUser("123");
System.out.println("Cached User: " + cachedUser);
// 删除用户
userService.deleteUser("123");
}
}
🖥️ 7. RedisTemplate 常用操作
1. 操作字符串
redisTemplate.opsForValue().set("key", "value");
String value = (String) redisTemplate.opsForValue().get("key");
2. 操作哈希表
redisTemplate.opsForHash().put("hashKey", "field", "value");
String value = (String) redisTemplate.opsForHash().get("hashKey", "field");
3. 操作列表
redisTemplate.opsForList().leftPush("listKey", "value1");
redisTemplate.opsForList().rightPush("listKey", "value2");
List<Object> values = redisTemplate.opsForList().range("listKey", 0, -1);
4. 操作集合
redisTemplate.opsForSet().add("setKey", "value1", "value2");
Set<Object> values = redisTemplate.opsForSet().members("setKey");
5. 操作有序集合
redisTemplate.opsForZSet().add("zsetKey", "value1", 1.0);
Set<Object> values = redisTemplate.opsForZSet().range("zsetKey", 0, -1);
✨ 总结
通过上述配置和使用示例,你已经可以在 Spring Boot 项目中使用 RedisTemplate
高效操作 Redis 数据。
- 重点:
- 配置
RedisTemplate
,自定义序列化器以提高可读性。 - 使用 Redis 数据类型(字符串、哈希、列表、集合等)完成多种业务需求。
- 通过
RedisTemplate
实现复杂的对象存储和读取。
- 配置
如果你对 Redis 的使用还有疑问或遇到其他问题,欢迎随时交流!🎉
🧧福利赠与你🧧
无论你是计算机专业的学生,还是对编程有兴趣的小伙伴,都建议直接毫无顾忌的学习此专栏「滚雪球学SpringBoot」,bug菌郑重承诺,凡是学习此专栏的同学,均能获取到所需的知识和技能,全网最快速入门SpringBoot,就像滚雪球一样,越滚越大, 无边无际,指数级提升。
最后,如果这篇文章对你有所帮助,帮忙给作者来个一键三连,关注、点赞、收藏,您的支持就是我坚持写作最大的动力。
同时欢迎大家关注公众号:「猿圈奇妙屋」 ,以便学习更多同类型的技术文章,免费白嫖最新BAT互联网公司面试题、4000G pdf电子书籍、简历模板、技术文章Markdown文档等海量资料。
✨️ Who am I?
我是bug菌,CSDN | 掘金 | InfoQ | 51CTO | 华为云 | 阿里云 | 腾讯云 等社区博客专家,C站博客之星Top30,华为云2023年度十佳博主,掘金多年度人气作者Top40,掘金等各大社区平台签约作者,51CTO年度博主Top12,掘金/InfoQ/51CTO等社区优质创作者;全网粉丝合计 30w+;更多精彩福利点击这里;硬核微信公众号「猿圈奇妙屋」,欢迎你的加入!免费白嫖最新BAT互联网公司面试真题、4000G PDF电子书籍、简历模板等海量资料,你想要的我都有,关键是你不来拿。

-End-
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
作者其他文章
评论(0)