在 Spring Boot 项目中配置 RedisTemplate 和 Maven 依赖!

举报
bug菌 发表于 2024/12/31 10:05:43 2024/12/31
370 0 0
【摘要】 🏆本文收录于「滚雪球学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 客户端中直接查看数据时不够直观。为了解决这个问题,我们可以使用 StringRedisSerializerGenericJackson2JsonRedisSerializer

  • 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 数据。

  • 重点
    1. 配置 RedisTemplate,自定义序列化器以提高可读性。
    2. 使用 Redis 数据类型(字符串、哈希、列表、集合等)完成多种业务需求。
    3. 通过 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

抱歉,系统识别当前为高风险访问,暂不支持该操作

    全部回复

    上滑加载中

    设置昵称

    在此一键设置昵称,即可参与社区互动!

    *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

    *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。