2021-12-03 SpringBoot 中 Redis 使用连接池 与 @ConfigurationProperties

SpringBoot 中 Redis 的使用

  • Redis
  • @ConfigurationProperties 注解
  • 代码实现
    • CacheServer
    • RedisServerImpl

Redis

通常在使用 redis 的时候,我需要导入 spring-boot-starter-data-redis 的依赖之外,我们还可以配置一个 redis 的连接池,减少创建连接与销毁连接的损耗

在 redis 的 Lettuce 配置类中 说可以允许导入 commons-pool2 来导入 redis 的连接池
2021-12-03 SpringBoot 中 Redis 使用连接池 与 @ConfigurationProperties_第1张图片
以及配置连接相关参数
2021-12-03 SpringBoot 中 Redis 使用连接池 与 @ConfigurationProperties_第2张图片

@ConfigurationProperties 注解

我们可以通过使用 @ConfigurationProperties 注解来使用时配置的方式选择不同的缓存厂家,如:
2021-12-03 SpringBoot 中 Redis 使用连接池 与 @ConfigurationProperties_第3张图片

当我们想换其它缓存工具时,只需要切换配置文件中的cache.type=redis,就可以达到切换缓存工具,通过配置文件避免了源代码的修改
2021-12-03 SpringBoot 中 Redis 使用连接池 与 @ConfigurationProperties_第4张图片

代码实现

CacheServer

/**
 * @Author zsl
 * @Date 2021/12/29 11:08
 */
public interface CacheServer {
    /**
     * 设置字符串缓存
     */
    void set(String key, String value);

    /**
     * 设置带过期时间的字符串缓存
     */
    void set(String key, String value, long timeout);

    /**
     * 获取字符串缓存
     */
    String get(String key);

    /**
     * 设置缓存
     */
    void setObject(Object key, Object value);

    /**
     * 设置带过期时间的缓存
     */
    void setObject(Object key, Object value, long timeout);

    /**
     * 获取存
     */
    Object getObject(Object key);

    /**
     * 删除缓存
     */
    void delete(String key);

    /**
     * 设置缓存过期时间
     */
    void expire(String key, long timeout);

    /**
     * 查看缓存是否存在
     */
    boolean contains(String key);
}

RedisServerImpl

/**
 * @Author zsl
 * @Date 2021/12/29 17:24
 */
@Component
@ConditionalOnProperty(prefix = "cache", name = "type", havingValue = "redis")
public class RedisServerImpl implements CacheServer {
    @Autowired
    private RedisTemplate<Object, Object> redisTemplate;

    @Autowired
    private StringRedisTemplate stringRedisTemplate;

    @Override
    public void set(String key, String value) {
        stringRedisTemplate.opsForValue().set(key, value);
    }

    @Override
    public void set(String key, String value, long timeout) {
        stringRedisTemplate.opsForValue().set(key, value, timeout, TimeUnit.SECONDS);
    }

    @Override
    public String get(String key) {
        return stringRedisTemplate.opsForValue().get(key);
    }

    @Override
    public void setObject(Object key, Object value) {
        redisTemplate.opsForValue().set(key, value);
    }

    @Override
    public void setObject(Object key, Object value, long timeout) {
        redisTemplate.opsForValue().set(key, value, timeout, TimeUnit.SECONDS);
    }

    @Override
    public Object getObject(Object key) {
        return redisTemplate.opsForValue().get(key);
    }

    @Override
    public void delete(String key) {
        redisTemplate.delete(key);
        stringRedisTemplate.delete(key);
    }

    @Override
    public void expire(String key, long timeout) {
        redisTemplate.expire(key, timeout, TimeUnit.SECONDS);
        stringRedisTemplate.expire(key, timeout, TimeUnit.SECONDS);
    }

    @Override
    public boolean contains(String key) {
        return stringRedisTemplate.hasKey(key) || redisTemplate.hasKey(key);
    }
}

你可能感兴趣的:(#,工具,redis,spring,boot,缓存)