【SpringBoot专题】SpringBoot集成Redis

304 阅读2分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第1天,点击查看活动详情

众所周知,SpringBoot最大的特点就是简化配置,一站式依赖引入。这里快速集成SpringBoot-Redis依赖,并进一步封装RedisTemplate。

引入依赖

1.引入POM文件相关依赖

<!--  加载 spring  boot  redis 包  -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

配置application.yml

2.在配置文件application.xml中,增加配置项:

spring:
    #Redis配置
    redis:
      host: 127.0.0.1
      port: 6379
      password:
      #连接超时时间(毫秒)
      timeout: 30000
      #连接池中的最大连接数
      poolMaxTotal: 10
      #连接池中的最大空闲数
      poolMaxIdle: 10
      #连接池最大阻塞等待时间(使用负值表示没有限制)
      poolMaxWait: 3

设置redis数据库密码

3.连接Redis数据库需要验证身份,因此首先应该在redis.conf文件vim修改bind-port为0.0.0.0(即注释掉127.0.0.1绑定),然后设置数据库密码/关闭安全模式(不推荐无密码)。

这里需要如果设置redis的密码,请打开客户端执行以下命令

 redis 127.0.0.1:6379> config set requirepass “你的密码”

设置完毕后,验证是否设置成功

redis 127.0.0.1:6379> auth “你的密码”

配置序列化规则RedisCofig

4.最后需要设置Redis序列化规则,增加如下类代码

/**
 * 开源版本请务必保留此注释头信息,若删除gemframe官方保留所有法律责任追究!
 * 本软件受国家版权局知识产权以及国家计算机软件著作权保护(登记号:2018SR503328)
 * 不得恶意分享产品源代码、二次转售等,违者必究。
 * Copyright (c) 2020 gemframework all rights reserved.
 * http://www.gemframework.com
 * 版权所有,侵权必究!
 */
package com.gemframework.common.config.redis;

import org.springframework.cache.CacheManager;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.cache.RedisCacheConfiguration;
import org.springframework.data.redis.cache.RedisCacheManager;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.*;
import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.RedisSerializationContext;
import org.springframework.data.redis.serializer.RedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;

import javax.annotation.Resource;
import java.time.Duration;

@Configuration
@EnableCaching
public class GemRedisConfig {

   @Resource
   private RedisConnectionFactory factory;


   @Bean
   public RedisTemplate<String, Object> redisTemplate() {
      RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
      // 设置value的序列化规则和 key的序列化规则
      redisTemplate.setKeySerializer(new StringRedisSerializer());
      redisTemplate.setHashKeySerializer(new StringRedisSerializer());
      redisTemplate.setHashValueSerializer(new GenericJackson2JsonRedisSerializer());
      redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());
      redisTemplate.setDefaultSerializer(new GenericJackson2JsonRedisSerializer());
      redisTemplate.setConnectionFactory(factory);
      return redisTemplate;
   }

   public CacheManager cacheManager(RedisConnectionFactory factory) {
      RedisSerializer<String> redisSerializer = new StringRedisSerializer();
      // 配置序列化(解决乱码的问题),过期时间30秒
      RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig()
            .entryTtl(Duration.ofSeconds(1800000))
            .serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(redisSerializer))
            .serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(new GenericJackson2JsonRedisSerializer()))
            .disableCachingNullValues();

      RedisCacheManager cacheManager = RedisCacheManager.builder(factory)
            .cacheDefaults(config)
            .build();
      return cacheManager;
   }

   @Bean
   public HashOperations<String, String, Object> hashOperations(RedisTemplate<String, Object> redisTemplate) {
      return redisTemplate.opsForHash();
   }

   @Bean
   public ValueOperations<String, Object> valueOperations(RedisTemplate<String, Object> redisTemplate) {
      return redisTemplate.opsForValue();
   }

   @Bean
   public ListOperations<String, Object> listOperations(RedisTemplate<String, Object> redisTemplate) {
      return redisTemplate.opsForList();
   }

   @Bean
   public SetOperations<String, Object> setOperations(RedisTemplate<String, Object> redisTemplate) {
      return redisTemplate.opsForSet();
   }

   @Bean
   public ZSetOperations<String, Object> zSetOperations(RedisTemplate<String, Object> redisTemplate) {
      return redisTemplate.opsForZSet();
   }
}

欢迎关注白羊🐏,感谢观看ヾ(◍°∇°◍)ノ゙