Spring Boot 系列:配置 Redis

作为目前最火的的NoSql数据库,Redis现在已成为后台开发人员的标配,本文主要主要介绍SpringBoot 2.*Redis 的整合。

一、Spring Data Redis

Spring Boot 中,默认集成的 RedisSpring Data Redis,默认底层的连接池使用了 lettuce ,开发者可以自行修改为自己的熟悉的,例如 Jedis

Spring Data Redis 针对 Redis 提供了非常方便的操作模板 RedisTemplate

1.1 RedisTemplate中定义了5种数据结构操作

redisTemplate.opsForValue();  //操作字符串
redisTemplate.opsForHash();   //操作hash
redisTemplate.opsForList();   //操作list
redisTemplate.opsForSet();    //操作set
redisTemplate.opsForZSet();   //操作有序set

当然,我们平时用的最多的可能是StringRedisTemplate,那这个StringRedisTemplate是何许人也?

1.2 StringRedisTemplateRedisTemplate

  1. StringRedisTemplate继承自RedisTemplate;
  2. 两者的数据是不共通的StringRedisTemplate只能管理StringRedisTemplate里面的数据,同样,RedisTemplate只能管理RedisTemplate中的数据;
  3. RedisTemplate中存取数据都是字节数组;StringRedisTemplate中存取数据都是字符串。

二、上手实战

2.1 导入依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-pool2</artifactId>
    <version>2.0</version>
</dependency>

需要手动引入 commos-pool2 的依赖,因为默认的连接池lettuce需要该依赖。

2.2 application.ymlredis参数配置

spring:
  redis:
    host: 47.98.178.84
    port: 6379
    database: 0
    password: password
    timeout: 60s  # 连接超时时间,2.0 中该参数的类型为Duration,这里在配置的时候需要指明单位
    # 连接池配置,2.0中直接使用jedis或者lettuce配置连接池(使用lettuce,依赖中必须包含commons-pool2包)
    lettuce:
      pool:
        # 最大空闲连接数
        max-idle: 500
        # 最小空闲连接数
        min-idle: 50
        # 等待可用连接的最大时间,负数为不限制
        max-wait:  -1s
        # 最大活跃连接数,负数为不限制
        max-active: -1

2.3 Redis配置类-RedisConfig

@Configuration
@ConditionalOnClass(RedisOperations.class)
@EnableCaching
public class RedisConfig {

    /**
     * 采用RedisCacheManager作为缓存管理器
     * @param factory
     * @return
     */
    @Bean
    public CacheManager cacheManager(RedisConnectionFactory factory) {
        // 生成一个默认配置,通过config对象即可对缓存进行自定义配置
        RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig();
        // 设置缓存的默认过期时间,也是使用Duration设置
        config = config.entryTtl(Duration.ofMinutes(1))
                .disableCachingNullValues();     // 不缓存空值

        // 设置一个初始化的缓存空间set集合
        Set<String> cacheNames =  new HashSet<>();
        cacheNames.add("my-redis-cache1");
        cacheNames.add("my-redis-cache2");

        // 对每个缓存空间应用不同的配置
        Map<String, RedisCacheConfiguration> configMap = new HashMap<>();
        configMap.put("my-redis-cache1", config);
        configMap.put("my-redis-cache2", config.entryTtl(Duration.ofSeconds(120)));
        // 使用自定义的缓存配置初始化一个cacheManager
        RedisCacheManager cacheManager = RedisCacheManager.builder(factory)
                // 注意这两句的调用顺序,一定要先调用该方法设置初始化的缓存名,再初始化相关的配置
                .initialCacheNames(cacheNames)
                .withInitialCacheConfigurations(configMap)
                .build();
        return cacheManager;
    }
}

@ConditionalOnClass(RedisOperations.class)表示:该配置在 RedisOperations 存在的情况下才会生效(即项目中引入了 Spring Data Redis)

2.4 测试类

@SpringBootTest
@RunWith(SpringRunner.class)
public class StringCacheTest {

    private static final Logger logger = LoggerFactory.getLogger(StringCacheTest.class);

    @Resource
    private StringRedisTemplate stringRedisTemplate;

    @Resource
    private RedisTemplate redisTemplate;

    /**
     * 测试 StringRedisTemplate
     */
    @Test
    public void stringRedisTemplateTest() {
        stringRedisTemplate.opsForValue().set("name","redis测试");
        String name = stringRedisTemplate.opsForValue().get("name");
        logger.info(name);
        stringRedisTemplate.delete("name");
        name = stringRedisTemplate.opsForValue().get("name");
        logger.info(name);
    }
    /**
     * 测试 RedisTemplate
     */
    @Test
    public void redisTemplateTest() {
        redisTemplate.opsForValue().set("name","redis测试");
        String name = (String) redisTemplate.opsForValue().get("name");
        logger.info(name);
        redisTemplate.delete("name");
        name = (String) redisTemplate.opsForValue().get("name");
        logger.info(name);
    }

}

三、总结

3.1 Redis 可视化客户端 rdm

通常情况下,我们可以在命令行下查看 Redis 数据库,但是可视化工具能更真实地让我们看到数据的结构。

这里分享我用的一个Mac版的客户端,打开链接,点击 Download 即可下载。

3.2 示例源码

Github 示例代码

3.1 日常求赞

博主祖传秘籍 Spring Boot 葵花宝典 开源中,欢迎前来吐槽,提供线索,告诉博主接下来更新哪方面文章,共同进步!

3.2 文化交流

  1. 风尘博客
  2. 风尘博客-掘金
  3. 风尘博客-博客园
  4. 风尘博客-CSDN
  5. Github

最新文章,欢迎关注:公众号-风尘博客;交流观点,欢迎添加:个人微信

风尘博客个人微信号

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值