springboot redis 用法简介

本文介绍如何在Spring Boot项目中整合Redis,并提供了一个简单的测试案例。包括pom.xml依赖配置、application.yml文件中的Redis连接配置、RedisConfig.java中RedisTemplate的定制配置,以及使用@RunWith和@SpringBootTest进行单元测试。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

pom.xml

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

application.yml

 #redis 配置
    redis:
      database: 0
      host: 127.0.0.1
      port: 6379
      password:
      pool:
        max-active: 8
        max-wait: -1
        max-idle: 8
        min-idle: 0
      timeout: 0

RedisConfig.java


@Configuration
@EnableCaching
public class RedisConfig extends CachingConfigurerSupport {


    @Bean
    public KeyGenerator keyGenerator() {

        return new KeyGenerator() {
            @Override
            public Object generate(Object o, Method method, Object... objects) {
                StringBuilder sb = new StringBuilder();
                sb.append(o.getClass().getName());
                sb.append(method.getName());
                for (Object param : objects
                        ) {
                    sb.append(param.toString());
                }
                return sb.toString();
            }
        };

    }


    @Bean
    public CacheManager cacheManager(RedisTemplate redisTemplate) {
        RedisCacheManager rcm = new RedisCacheManager(redisTemplate);
        //设置缓存过期时间
        // rcm.setDefaultExpiration(60);//秒
        //设置value的过期时间
        return rcm;
    }

    /**
     * RedisTemplate配置
     *
     * @param factory
     * @return
     */
    @Bean
    public RedisTemplate<String, String> redisTemplate(RedisConnectionFactory factory) {
        StringRedisTemplate template = new StringRedisTemplate(factory);
        Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
        ObjectMapper om = new ObjectMapper();
        om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
        om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
        jackson2JsonRedisSerializer.setObjectMapper(om);
        template.setValueSerializer(jackson2JsonRedisSerializer);//如果key是String 需要配置一下StringSerializer,不然key会乱码 /XX/XX
        template.afterPropertiesSet();
        //template.setStringSerializer();
        return template;
    }

}

简单的测试


@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(classes = {LiveApplication.class})
public class RedisTest {


    @Autowired
    RedisTemplate redisTemplate;

    @Autowired
    StringRedisTemplate stringRedisTemplate;

    @Autowired
    LiveRoomMapper liveRoomMapper;

    @Test
    public void test() {
        stringRedisTemplate.opsForValue().set("name", "xiaozhun");
        Assert.assertEquals("xiaozhun", stringRedisTemplate.opsForValue().get("name"));
    }

    //批量删除
    @Test
    public void delete() {
        Set<Serializable> keys = redisTemplate.keys("name*");
        if (keys.size() > 0)
            redisTemplate.delete(keys);
    }


    //初始化channelID:callback_url 集合
    @Test
    public void initChannelId() {
        List<LiveRoom> list = liveRoomMapper.selectAll();
        list.forEach(liveRoom -> {
            stringRedisTemplate.opsForValue().set("channelId:" + liveRoom.getChannelId(), liveRoom.getCallbackUrl()+"");
        });
    }
}

更多工具类参见 :
https://my.oschina.net/wangxincj/blog/825838

<think>好的,我现在要解决用户的问题:“如何在Spring Boot中集成和使用Redis?请提供教程、示例配置和连接池的说明。”首先,我需要回忆一下Spring Boot集成Redis的基本步骤,然后结合提供的引用内容来组织回答。 首先,用户需要集成Redis,所以应该从添加依赖开始。根据引用[2],Spring Boot 2.x默认使用Lettuce,而1.5.x使用Jedis。所以需要说明不同版本的依赖配置,比如在pom.xml中添加spring-boot-starter-data-redis。同时,可能需要提到排除Lettuce并引入Jedis的情况,如果用户想用Jedis的话。 接下来是配置文件,引用[1]和[4]提到了在application.properties中设置Redis的连接参数,比如host、port、password,以及连接池的设置。例如spring.redis.host=localhost,还有连接池相关的配置如max-active、max-idle等。需要详细说明这些配置项的作用和示例值。 然后是关于连接池的配置,引用[1]提到通过JedisPoolConfig进行配置,而引用[2]比较了Jedis和Lettuce的区别,特别是连接池的必要性。需要解释在Spring Boot中如何通过配置文件或Java配置类来设置连接池参数,比如使用@Configuration类,并创建RedisConnectionFactory和RedisTemplate的Bean。这里引用[4]中的配置类示例可能有用,需要说明如何设置序列化方式,避免出现序列化错误,如引用[5]提到的对象存储问题。 接下来是RedisTemplate的使用,引用[3]和[5]给出了测试用例,演示如何注入RedisTemplate并进行操作。需要指导用户如何编写测试类,使用opsForValue().set和get方法,并处理对象的序列化问题。例如,使用GenericJackson2JsonRedisSerializer来序列化对象,避免出现无法序列化的情况。 还需要提到常见问题,比如序列化异常,如引用[5]中的例子,当存储自定义对象时,如果没有正确配置序列化方式,会报错。解决办法就是配置RedisTemplate的序列化器,使用JSON序列化。 最后,生成相关问题,可能涉及性能优化、不同客户端的区别、如何存储复杂数据类型等。 需要确保回答结构清晰,分步骤讲解,每一步都给出代码示例或配置示例,并引用相关的引用来源。例如,在配置连接池时,引用[1]和[2]中的信息。在配置RedisTemplate时,引用[4]和[5]的内容。测试部分引用[3]的示例。 另外,要注意用户提到的系统级指令,比如数学公式的格式,但这个问题不涉及数学公式,所以可能不需要处理。但需要遵守其他格式要求,如代码块使用正确的标记,引用标识放在适当的位置。 现在,需要整理这些思路,分步骤写出教程,示例配置,连接池设置,RedisTemplate配置,测试代码,以及常见问题处理。同时,确保引用正确,例如在讲解连接池配置时引用[^1],在比较Jedis和Lettuce时引用[^2],测试代码引用[^3],配置类引用[^4],序列化问题引用[^5]。</think>### Spring Boot 集成 Redis 使用教程 #### 1. 添加依赖 在 `pom.xml` 中添加 Spring Boot Data Redis 依赖: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> ``` - **使用 Jedis**(适用于 Spring Boot 1.5.x 或手动切换): ```xml <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> </dependency> ``` - **Lettuce** 是 Spring Boot 2.x 默认客户端,无需额外配置[^2]。 --- #### 2. 配置 Redis 连接参数 在 `application.properties` 中设置 Redis 连接和连接池参数: ```properties # 基础配置 spring.redis.host=localhost spring.redis.port=6379 spring.redis.password= # 连接池配置(以 Lettuce 为例) spring.redis.lettuce.pool.max-active=8 spring.redis.lettuce.pool.max-idle=4 spring.redis.lettuce.pool.min-idle=1 spring.redis.lettuce.pool.max-wait=2000 ``` 若使用 Jedis,将 `lettuce` 替换为 `jedis`[^1]。 --- #### 3. 配置 RedisTemplate(解决序列化问题) 通过 Java 配置类自定义序列化方式,避免存储对象时出现序列化错误[^4]: ```java @Configuration public class RedisConfig { @Bean public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) { RedisTemplate<String, Object> template = new RedisTemplate<>(); template.setConnectionFactory(factory); // 设置 Key 的序列化为 String template.setKeySerializer(new StringRedisSerializer()); // 设置 Value 的序列化为 JSON template.setValueSerializer(new GenericJackson2JsonRedisSerializer()); return template; } } ``` --- #### 4. 使用 RedisTemplate 操作数据 注入 `RedisTemplate` 并调用 API 进行数据操作: ```java @SpringBootTest public class RedisTest { @Autowired private RedisTemplate<String, Object> redisTemplate; @Test public void testString() { // 存储字符串 redisTemplate.opsForValue().set("greeting", "Hello Spring Boot Redis"); System.out.println(redisTemplate.opsForValue().get("greeting")); } @Test public void testObject() { // 存储自定义对象(需实现 Serializable 接口) User user = new User("张三", 25); redisTemplate.opsForValue().set("user:1", user); User cachedUser = (User) redisTemplate.opsForValue().get("user:1"); System.out.println(cachedUser); } } ``` --- #### 5. 连接池配置说明 - **JedisPoolConfig**:适用于 Jedis,需手动配置最大连接数、超时时间等参数。 - **Lettuce**:基于 Netty 实现,支持异步和非阻塞操作,连接池参数通过配置文件直接设置[^2]。 --- #### 常见问题解决 - **序列化异常**:未配置 `RedisTemplate` 的序列化器时,存储对象会报错。需按步骤 3 配置 JSON 序列化[^5]。 - **连接超时**:检查 Redis 服务是否启动,或调整连接池的 `max-wait` 参数。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值