spring boot 整合redis教程
添加Redis依赖
在pom.xml
文件中添加Spring Boot的Redis starter依赖:
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
配置Redis连接
在application.properties
或application.yml
中配置Redis连接信息:
spring.redis.host=localhost
spring.redis.port=6379
spring.redis.password=yourpassword
spring.redis.database=0
创建Redis配置类
自定义RedisTemplate配置,优化序列化方式:
@Configuration
public class RedisConfig {@Beanpublic RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {RedisTemplate<String, Object> template = new RedisTemplate<>();template.setConnectionFactory(factory);// 使用Jackson2JsonRedisSerializer序列化valueJackson2JsonRedisSerializer<Object> serializer = new Jackson2JsonRedisSerializer<>(Object.class);ObjectMapper mapper = new ObjectMapper();mapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);mapper.activateDefaultTyping(mapper.getPolymorphicTypeValidator(), ObjectMapper.DefaultTyping.NON_FINAL);serializer.setObjectMapper(mapper);// 使用StringRedisSerializer序列化keytemplate.setKeySerializer(new StringRedisSerializer());template.setValueSerializer(serializer);template.setHashKeySerializer(new StringRedisSerializer());template.setHashValueSerializer(serializer);template.afterPropertiesSet();return template;}
}
封装Redis工具类
创建常用Redis操作的封装类:
@Component
public class RedisUtil {@Autowiredprivate RedisTemplate<String, Object> redisTemplate;public void set(String key, Object value) {redisTemplate.opsForValue().set(key, value);}public Object get(String key) {return redisTemplate.opsForValue().get(key);}public void expire(String key, long timeout) {redisTemplate.expire(key, timeout, TimeUnit.SECONDS);}public void delete(String key) {redisTemplate.delete(key);}
}
使用Redis缓存
在Service层使用Spring Cache注解实现缓存:
@Service
public class UserServiceImpl implements UserService {@Cacheable(value = "user", key = "#id")public User getUserById(Long id) {// 数据库查询逻辑return userRepository.findById(id).orElse(null);}@CachePut(value = "user", key = "#user.id")public User updateUser(User user) {// 更新数据库逻辑return userRepository.save(user);}@CacheEvict(value = "user", key = "#id")public void deleteUser(Long id) {// 删除数据库记录userRepository.deleteById(id);}
}
测试Redis功能
编写测试类验证Redis功能:
@SpringBootTest
public class RedisTest {@Autowiredprivate RedisUtil redisUtil;@Testpublic void testRedis() {String key = "testKey";String value = "testValue";redisUtil.set(key, value);assertEquals(value, redisUtil.get(key));redisUtil.delete(key);assertNull(redisUtil.get(key));}
}
分布式锁实现
使用Redis实现简单的分布式锁:
public boolean tryLock(String lockKey, long expireTime) {return redisTemplate.opsForValue().setIfAbsent(lockKey, "locked", expireTime, TimeUnit.SECONDS);
}public void unlock(String lockKey) {redisTemplate.delete(lockKey);
}