1. 背景
在 java 开发中集成 redis。
我们用到 Spring Data Redis 。
2.知识
Spring Data Redis 是更大的 Spring Data 系列的一部分,它提供了从 Spring 应用程序对 Redis 的轻松配置和访问。
它支持 两种 Redis 驱动程序:
- Lettuce
- Jedis
Spring Data Redis 实现了对底层的抽象, 无论是那一种驱动,使用起来是一样的。
3. 示例
3.1 导入依赖包
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency>
3.2 配置数据源
在配置文件 application.yml 里:
spring:redis:host: localhostport: 6379password: 123456database: 0
3.3 配置一个 RedisTemplate 对象
Springboot 强大的自动化配置会把 RedisConnectionFactory 对象配置好,直接用就好了。它会按 上一步的配置文件的参数配置好数据源。
RedisTemplate 是Spring 的模板方法,提供了对 redis 的抽象,我们注入一个配置,后续就可以自动装载了。
@Configuration
public class RedisConfig {/*** 通过 Spring 注入 一个 RedisTemplate** @param redisConnectionFactory* @return*/@Beanpublic RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory) {StringRedisTemplate redisTemplate = new StringRedisTemplate();redisTemplate.setValueSerializer(jackson2JsonRedisSerializer());redisTemplate.setConnectionFactory(redisConnectionFactory);return redisTemplate;}/*** 注入一个 json 序列化转换器** @return*/@Beanpublic Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer() {ObjectMapper objectMapper = new ObjectMapper();objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);objectMapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<>(Object.class);jackson2JsonRedisSerializer.setObjectMapper(objectMapper);return jackson2JsonRedisSerializer;}}
3.3 可以使用自动装载了
@Autowiredprivate RedisTemplate redisTemplate;
代码使用:
ValueOperations<String, String> valueOperations = redisTemplate.opsForValue();
final String KEY = String.format("users:%s", id);
String result = valueOperations.get(KEY);
4. 扩展
4.1 可以操作 hash结构
写入:
// 同时按 email 存一个id 的引用
final String KEY_MAIL = "users:by:email";
HashOperations<String, String, String> hashOperations = redisTemplate.opsForHash();
hashOperations.put(KEY_MAIL, email, result.getId() + "");
读取:
final String KEY_MAIL = "users:by:email";
HashOperations<String, String, String> hashOperations = redisTemplate.opsForHash();
String id = hashOperations.get(KEY_MAIL, email);
if (id != null) {return getEntity(Integer.parseInt(id));
}
return null;
5.附录
我的代码示例:https://github.com/vir56k/java_demo/tree/master/springboot_redis_demo
6.参考:
https://spring.io/projects/spring-data-redis#overview
https://docs.spring.io/spring-data/redis/docs/2.5.3/reference/html/#reference
© 著作权归作者所有,转载或内容合作请联系作者

喜欢的朋友记得点赞、收藏、关注哦!!!