Spring Boot3.4.1 集成redis

发布于:2025-05-31 ⋅ 阅读:(20) ⋅ 点赞:(0)

Spring Boot3.4.1 集成redis

第一步 引入依赖
<!-- redis 缓存操作 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<!-- pool 对象池 -->
<!-- 使用lettuce客户端需要引入commons-pool2依赖 -->
<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-pool2</artifactId>
</dependency>
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.2.31</version>
</dependency>
第二步 引入配置
spring:
  # redis 配置
  redis:
    # 地址
    host: 127.0.0.1
    # 端口,默认为6379
    port: 6379
    # 密码,没有不填
    password: ''
    # 连接超时时间
    timeout: 10s
    lettuce:
      pool:
        # 连接池中的最小空闲连接
        min-idle: 0
        # 连接池中的最大空闲连接
        max-idle: 8
        # 连接池的最大数据库连接数
        max-active: 8
        # #连接池最大阻塞等待时间(使用负值表示没有限制)
        max-wait: -1ms
第三步 编写redis配置类
@Configuration
@EnableCaching
public class RedisConfig {
    @Bean
    public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory connectionFactory){
        RedisTemplate<String, Object> template = new RedisTemplate<>();
        template.setConnectionFactory(connectionFactory);
        template.setValueSerializer(new StringRedisSerializer());
        // 使用StringRedisSerializer序列化和反序列化redis的key值
        template.setKeySerializer(new StringRedisSerializer());
        // 使用StringRedisSerializer序列化和反序列化redis hash类型的key值
        template.setHashKeySerializer(new StringRedisSerializer());
        // 序列化和反序列化redis hash类型的value值
        template.setHashValueSerializer(new StringRedisSerializer());
        template.afterPropertiesSet();
        return template;
    }
}
第四步 编写操作工具类
@Component
public class RedisUtils
{
    @Autowired
    private RedisTemplate<String, Object>   redisTemplate;
    /**  默认过期时长,单位:秒 */
    public final static long                DEFAULT_EXPIRE = 60 * 60 * 24;

    public void set(String key, Object value)
    {
        set(key, value, DEFAULT_EXPIRE);
    }

    public void set(String key, Object value, long expire)
    {
        redisTemplate.opsForValue().set(key, toJson(value));
        redisTemplate.expire(key, expire, TimeUnit.SECONDS);
    }
    public String get(String key)
    {
        return redisTemplate.opsForValue().get(key).toString();
    }
    public <T> T get(String key, Class<T> clazz)
    {
        String value = redisTemplate.opsForValue().get(key).toString();
        return value == null ? null : fromJson(value, clazz);
    }
    public void delete(String key)
    {
        redisTemplate.delete(key);
    }
    private String toJson(Object object)
    {
        if (object instanceof Integer || object instanceof Long || object instanceof Float || object instanceof Double
                || object instanceof Boolean || object instanceof String)
        {
            return String.valueOf(object);
        }
        return JSON.toJSONString(object);
    }
    private <T> T fromJson(String json, Class<T> clazz)
    {
        return JSON.parseObject(json, clazz);
    }
}
第五步 测试
@RestController
@RequestMapping("test")
public class TestController {

    @Autowired
    private RedisUtils redisUtils;

    @RequestMapping("/hello")
    public String hello() {
        redisUtils.set("test1","hello world");
        System.out.println(redisUtils.get("test1"));
        return "hello";
    }
}

网站公告

今日签到

点亮在社区的每一天
去签到