Redis 学习总结(2) Java 操作 Redis 的示例
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: localhost
port: 6379
password: 123456
database: 0
3.3 配置一个 RedisTemplate 对象
Springboot 强大的自动化配置会把 RedisConnectionFactory 对象配置好,直接用就好了。它会按 上一步的配置文件的参数配置好数据源。
RedisTemplate 是Spring 的模板方法,提供了对 redis 的抽象,我们注入一个配置,后续就可以自动装载了。
@Configuration
public class RedisConfig {
/**
* 通过 Spring 注入 一个 RedisTemplate
*
* @param redisConnectionFactory
* @return
*/
@Bean
public RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory) {
StringRedisTemplate redisTemplate = new StringRedisTemplate();
redisTemplate.setValueSerializer(jackson2JsonRedisSerializer());
redisTemplate.setConnectionFactory(redisConnectionFactory);
return redisTemplate;
}
/**
* 注入一个 json 序列化转换器
*
* @return
*/
@Bean
public 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 可以使用自动装载了
@Autowired
private 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
©
著作权归作者所有,转载或内容合作请联系作者

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