Redis 是一种高性能的键值存储数据库,而 Spring Boot 是一个简化了开发过程的 Java 框架。将两者结合,可以轻松地在 Spring Boot 项目中使用 Redis 来实现数据缓存、会话管理和分布式锁等功能。
在 pom.xml 文件中添加 Redis 相关依赖
org.springframework.boot spring-boot-starter-data-redis
在 application.properties 或 application.yml 配置文件中添加 Redis 连接信息
spring.redis.host=127.0.0.1 spring.redis.port=6379
根据自己 Redis 服务器配置,修改主机和端口信息
在配置类中创建 RedisTemplate Bean,用于进行 Redis 操作
@Configuration public class RedisConfig { @Bean public RedisTemplateredisTemplate(RedisConnectionFactory connectionFactory) { RedisTemplate template = new RedisTemplate<>(); template.setConnectionFactory(connectionFactory); template.setKeySerializer(new StringRedisSerializer()); template.setValueSerializer(new GenericJackson2JsonRedisSerializer()); return template; } }
上述示例中使用了 JSON 序列化器来对值进行序列化和反序列化,你也可以根据需要选择其他序列化器。
在服务类或控制器中注入 RedisTemplate
@Autowired private RedisTemplateredisTemplate;
使用注入的 RedisTemplate 来进行 Redis 操作,设置键值对、获取值等
// 设置键值对 redisTemplate.opsForValue().set("key", "value"); // 获取值 String value = (String) redisTemplate.opsForValue().get("key");
在 pom.xml 文件中添加 Spring Cache 相关依赖
org.springframework.boot spring-boot-starter-data-redis org.springframework.boot spring-boot-starter-cache
在启动类上添加 @EnableCaching 注解,启用缓存支持
@SpringBootApplication @EnableCaching public class Application { // ... }
在服务类或方法上使用 Spring Cache 提供的缓存注解,如 @Cacheable、@CachePut、@CacheEvict
@Service public class demoService { @Cacheable(value = "cacheName", key = "#id") public Object getData(String id) { // 从数据库或其他数据源获取数据 return data; } @CachePut(value = "cacheName", key = "#id") public Object updateData(String id, Object newData) { // 更新数据库或其他数据源的数据 return newData; } @CacheEvict(value = "cacheName", key = "#id") public void deleteData(String id) { // 删除数据库或其他数据源的数据 } }
在 pom.xml 文件中添加 Redisson 相关依赖
org.springframework.boot spring-boot-starter-data-redis org.redisson redisson-spring-boot-starter 3.16.3
在配置文件中添加 Redisson 配置,例如 application.properties
# 单节点 Redisson 配置 spring.redis.redisson.config=classpath:redisson-single-node.yml
在 redisson-single-node.yml 配置文件中配置 Redisson 的连接信息
在你的代码中使用 Redisson 获取分布式锁:
@Autowired private RedissonClient redissonClient; public void doSomething() { RLock lock = redissonClient.getLock("lockName"); try { lock.lock(); // 执行需要加锁的操作 } finally { lock.unlock(); } }
除了基本配置,还可以根据实际需求完善 Redis 的其他配置,例如连接池配置、超时设置等。
Redis 使用连接池来管理和复用与 Redis 服务器的连接,以提高连接的效率和性能。
打开 Redis 配置文件 redis.conf,找到以下配置项并进行修改
# 最大连接数 maxclients 10000 # TCP 连接的队列长度 tcp-backlog 511 # 连接池中的最大空闲连接数 maxidle 100 # 连接池中的最小空闲连接数 minidle 10 # 连接超时时间(毫秒) timeout 3000 # 是否开启 TCP 连接的保活机制 tcp-keepalive 0
在 Spring Boot 项目中,可以通过 Redis 连接池配置对象 JedisPoolConfig 进行配置
@Configuration public class RedisConfig { @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 RedisTemplateredisTemplate(JedisConnectionFactory connectionFactory) { RedisTemplate template = new RedisTemplate<>(); template.setConnectionFactory(connectionFactory); template.setKeySerializer(new StringRedisSerializer()); template.setValueSerializer(new GenericJackson2JsonRedisSerializer()); return template; } }
超时设置用于控制 Redis 操作的超时时间,以防止长时间的阻塞或无响应操作
在 Redis 配置文件中设置 timeout 参数,单位为毫秒,如下设置连接超时时间为 5000 毫秒
timeout 5000
通过 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); }
上一篇:数据查询sql习题综合二