下面是Spring Boot 整合Redis的完整攻略:
准备工作
在开始配置之前,我们需要完成几个基本的准备工作。
- 添加Redis依赖
使用Spring Boot集成Redis需要在pom.xml中添加spring-boot-starter-data-redis依赖,建议使用最新版本。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
- 配置Redis连接信息
在application.properties(或application.yml)配置文件中添加Redis连接信息,包括host、port、password等,具体可根据环境情况自行配置,如下所示:
spring.redis.host=127.0.0.1
spring.redis.port=6379
spring.redis.password=123456
- 编写Redis配置类
为了方便使用,在项目中可以自定义Redis配置类,用于配置RedisTemplate、StringRedisTemplate等操作Redis的Bean对象。以下是一个配置类的示例:
@Configuration
@EnableCaching
public class RedisConfig {
@Value("${spring.redis.host}")
private String host;
@Value("${spring.redis.port}")
private int port;
@Value("${spring.redis.password}")
private String password;
@Value("${spring.redis.timeout}")
private int timeout;
/**
* 配置Jedis连接工厂
*
* @return JedisConnectionFactory
*/
@Bean
public JedisConnectionFactory jedisConnectionFactory() {
RedisStandaloneConfiguration config = new RedisStandaloneConfiguration(host, port);
config.setPassword(RedisPassword.of(password));
return new JedisConnectionFactory(config);
}
/**
* 配置RedisTemplate
*
* @return RedisTemplate
*/
@Bean
public RedisTemplate<String, Object> redisTemplate() {
RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
redisTemplate.setConnectionFactory(jedisConnectionFactory());
redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());
return redisTemplate;
}
/**
* 配置StringRedisTemplate
*
* @return StringRedisTemplate
*/
@Bean
public StringRedisTemplate stringRedisTemplate() {
StringRedisTemplate stringRedisTemplate = new StringRedisTemplate();
stringRedisTemplate.setConnectionFactory(jedisConnectionFactory());
return stringRedisTemplate;
}
/**
* 配置缓存管理器
*
* @return CacheManager
*/
@Bean
public CacheManager cacheManager() {
RedisCacheConfiguration redisCacheConfiguration = RedisCacheConfiguration.defaultCacheConfig()
.serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(new StringRedisSerializer()))
.serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(new GenericJackson2JsonRedisSerializer()));
return RedisCacheManager.builder(jedisConnectionFactory())
.cacheDefaults(redisCacheConfiguration)
.build();
}
}
使用Redis
完成准备工作后,就可以使用Redis来存储、操作数据了。
示例1:存储及读取对象类型数据
@Component
public class RedisUtils {
@Autowired
private RedisTemplate<String, Object> redisTemplate;
/**
* 存储对象到Redis
*
* @param key 键
* @param value 值
*/
public void set(String key, Object value) {
redisTemplate.opsForValue().set(key, value);
}
/**
* 从Redis中获取指定对象
*
* @param key 键
* @param clazz 对象类型
* @param <T> 类型
* @return 对象
*/
public <T> T get(String key, Class<T> clazz) {
Object value = redisTemplate.opsForValue().get(key);
if (value == null) {
return null;
}
return JSONObject.parseObject(JSONObject.toJSONString(value), clazz);
}
}
在上面的示例中,我们首先通过@Autowired注解注入了RedisTemplate对象,然后我们编写了set方法和get方法,前者可以将指定的对象存储到Redis中,后者可以从Redis中获取指定类型的对象。这里类型使用了泛型,配合JSONObject.parseObject方法可以使得对象可以自动转换为指定的类型。
示例2:使用缓存
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserDao userDao;
@Autowired
private StringRedisTemplate stringRedisTemplate;
@Override
@Cacheable(value = "user", key = "#id")
public User getById(int id) {
User user = userDao.getById(id);
if (user != null) {
stringRedisTemplate.opsForValue().set("user_" + user.getId(), JSONObject.toJSONString(user), Duration.ofMinutes(30));
}
return user;
}
@Override
@CachePut(value = "user", key = "#user.id")
public User add(User user) {
userDao.add(user);
return user;
}
@Override
@CacheEvict(value = "user", key = "#id")
public void deleteById(int id) {
userDao.deleteById(id);
}
}
在上面的示例中,我们定义了一个UserService接口,用于对用户信息进行操作。在实现类中,我们首先通过@Autowired注解注入了UserDao对象和StringRedisTemplate对象。然后我们为获取用户(byId)方法添加了缓存注解@Cacheable,并指定了缓存的名称为user,缓存的key为用户的id。对于添加新用户(add)和删除指定用户(deleteById)的方法,我们添加了缓存注解@CachePut和@CacheEvict,分别用于在更新了数据和删除了数据后,同步更新缓存数据。
以上就是Spring Boot集成Redis的完整攻略了,希望对您有所帮助。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Spring Boot 项目集成Redis的方式详解 - Python技术站