Spring Boot 整合 Redis 超详细教程


前言

Redis 是一种高性能的键值存储数据库,而 Spring Boot 是一个简化了开发过程的 Java 框架。将两者结合,可以轻松地在 Spring Boot 项目中使用 Redis 来实现数据缓存、会话管理和分布式锁等功能。

话不多说直接干货!!!


一、pom.xml 中添加 Redis 依赖

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

二、配置 Redis 连接信息

application.yml 配置文件中添加 Redis 连接信息,根据自己 Redis 服务器配置,修改主机和端口信息

spring:
    redis:
       # 地址
       host: localhost
       # 端口,默认为6379
       port: 6379
       # 数据库索引
       database: 0
       # 密码
       password: 

三.使用 RedisTemplate 进行操作

1、RedisTemplate Bean配置类

@Configuration
public class RedisConfiguration {
	
	/**
	 JSON 序列化器来对值进行序列化和反序列化
	*/
	@Bean
	public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory cf) {
	  RedisTemplate<String, Object> rt= new RedisTemplate<>();
	  rt.setConnectionFactory(cf);
	  rt.setKeySerializer(new StringRedisSerializer());
	  rt.setValueSerializer(new GenericJackson2JsonRedisSerializer());
	  return rt;
	}
	}

2、注入 RedisTemplate

	/**
	在服务类或控制器中注入 RedisTemplate
	*/
	@Autowired
	private RedisTemplate<String, Object> redisTemplate;

3、 Redis 操作

//使用注入的 RedisTemplate 来进行 Redis 操作,设置键值对、获取值

	/** 
	设置键值对
	*/
	redisTemplate.opsForValue().set("key", "value");
	
	/**  
	获取值
	*/
	String value = (String) redisTemplate.opsForValue().get("key");


四. Spring Cache 简化缓存操作

1、pom.xml中添加 Spring Cache 依赖

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

2、启用类添加缓存支持注解

	//开启spring cache
	@EnableCaching
	@SpringBootApplication
	public class Application {
	  // ...
	}

3、使用缓存注解

@Service
public class redisService {

  @Cacheable(value = "cacheName", key = "#code")
  public Object getData(String id) {
    // 从数据库或其他数据源获取数据
    return data;
  }

  @CachePut(value = "cacheName", key = "#code")
  public Object updateData(String id, Object newData) {
    // 更新数据库或其他数据源的数据
    return newData;
  }

  @CacheEvict(value = "cacheName", key = "#code")
  public void deleteData(String id) {
    // 删除数据库或其他数据源的数据
  }
}

五. 实现分布式锁 Redisson

1、pom.xml中添加 Redisson 依赖

  <dependency>
    <groupId>org.redisson</groupId>
    <artifactId>redisson-spring-boot-starter</artifactId>
    <version>3.16.3</version>
  </dependency>

2、yml中进行Redisson配置

spring:
    redis:
       # 地址
       redisson: 
       	config: classpath:redisson-single.yml #在 redisson-single.yml 配置文件中配置 Redisson 的连接信息

3、Redisson 获取锁

	@Autowired
	private RedissonClient redissonClient;
	
	public void doSomething() {
	  RLock lock = redissonClient.getLock("lockName");
	  try {
	    lock.lock();
	    // 执行需要加锁的操作
	  } finally {
	    lock.unlock();
	  }
	}

六. Redis相关配置

1、redis.conf连接池配置

打开 Redis 配置文件 redis.conf

# 最大连接数
maxclients 10000
# TCP 连接的队列长度
tcp-backlog 500
# 连接池中的最大空闲连接数
maxidle 100
# 连接池中的最小空闲连接数
minidle 10
# 连接超时时间(毫秒)
timeout 3000
# 是否开启 TCP 连接的保活机制
tcp-keepalive 0

2、客户端Jedis连接池配置对象JedisPoolConfig配置

@Configuration
public class JedisConfig {
	
	 @Bean
	 public JedisPoolConfig jedisPoolConfig() {
	   JedisPoolConfig poolConfig = new JedisPoolConfig();
	   poolConfig.setMaxTotal(10000);
	   poolConfig.setMaxIdle(100);
	   poolConfig.setMinIdle(10);
	   poolConfig.setMaxWaitMillis(3000);
	   // 其他配置项设置
	   return poolConfig;
	 }
	
	 @Bean
	 public JedisConnectionFactory jedisConnectionFactory(JedisPoolConfig poolConfig) {
	   RedisStandaloneConfiguration config = new RedisStandaloneConfiguration();
	   config.setHostName("127.0.0.1");
	   config.setPort(6379);
	   // 其他 Redis 配置项设置
	   JedisClientConfiguration clientConfig = JedisClientConfiguration.builder()
	       .usePooling().poolConfig(poolConfig)
	       .build();
	   return new JedisConnectionFactory(config, clientConfig);
	 }
	
	 @Bean
	 public RedisTemplate<String, Object> redisTemplate(JedisConnectionFactory connectionFactory) {
	   RedisTemplate<String, Object> template = new RedisTemplate<>();
	   template.setConnectionFactory(connectionFactory);
	   template.setKeySerializer(new StringRedisSerializer());
	   template.setValueSerializer(new GenericJackson2JsonRedisSerializer());
	   return template;
	 }
}

3、超时时间设置

1、在 Redis 配置文件中设置 timeout 参数,用于控制 Redis 操作的超时时间,以防止长时间的阻塞或无响应操作

timeout 5000 //单位为毫秒

2、通过 JedisClientConfiguration 进行配置,将读取操作的超时时间设置为 5秒

	@Bean
	public JedisClientConfiguration jedisClientConfiguration() {
	  Duration timeout = Duration.ofSeconds(5);
	  return JedisClientConfiguration.builder()
	      .readTimeout(timeout)
	      .build();
	}
	
	@Bean
	public JedisConnectionFactory jedisConnectionFactory(JedisClientConfiguration clientConfig) {
	  // 其他配置项设置
	  return new JedisConnectionFactory(config, clientConfig);
	}
  • 15
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Spring Boot 可以很方便地与 Redis 进行集成。以下是一个简单的 Spring Boot 整合 Redis 的示例: 1. 添加 Redis 依赖 在 `pom.xml` 添加 Redis 相关依赖: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> ``` 2. 配置 Redis 连接信息 在 `application.properties` 文件中配置 Redis 的连接信息: ```properties spring.redis.host=localhost spring.redis.port=6379 spring.redis.password= ``` 如果 Redis 没有设置密码,则 `spring.redis.password` 可以不用配置。 3. 编写 Redis 配置类 创建一个 Redis 配置类,用于配置 RedisTemplate 和 RedisConnectionFactory: ```java @Configuration public class RedisConfig { @Bean public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) { RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>(); redisTemplate.setConnectionFactory(redisConnectionFactory); redisTemplate.setKeySerializer(new StringRedisSerializer()); redisTemplate.setValueSerializer(new GenericToStringSerializer<>(Object.class)); return redisTemplate; } @Bean public RedisConnectionFactory redisConnectionFactory() { RedisStandaloneConfiguration redisStandaloneConfiguration = new RedisStandaloneConfiguration(); redisStandaloneConfiguration.setHostName("localhost"); redisStandaloneConfiguration.setPort(6379); return new JedisConnectionFactory(redisStandaloneConfiguration); } } ``` 4. 使用 RedisTemplate 操作 Redis 在需要使用 Redis 的地方注入 RedisTemplate,然后就可以使用其提供的方法操作 Redis 了: ```java @RestController @RequestMapping("/redis") public class RedisController { @Autowired private RedisTemplate<String, Object> redisTemplate; @GetMapping("/set") public String set(String key, String value) { redisTemplate.opsForValue().set(key, value); return "success"; } @GetMapping("/get") public String get(String key) { Object value = redisTemplate.opsForValue().get(key); return value != null ? value.toString() : ""; } } ``` 以上示例中,我们使用了 RedisTemplate 的 `opsForValue` 方法来进行 Redis 的读写操作。 这样,我们就完成了 Spring Boot 整合 Redis 的操作。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值