SpringDataRedis:提供了RedisTemplate工具类,封装了各种Redis的操作
API | 返回值 | 操作类型 |
---|---|---|
redisTemplate.opsForValue() | Value | String |
redisTemplate.opsForHash() | Hash | Hash |
redisTemplate.opsForList() | List | List |
redisTemplate.opsForSet() | Set | Set |
redisTemplate.opsForZSet() | ZSet | SortedSet |
-
创建SpringBoot工程引入Redis依赖和连接池依赖
<!--Redis依赖--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> <!--common-pool的依赖--> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-pool2</artifactId> </dependency>
-
在yml文件中配置连接信息
spring: redis: host: 192.168.163.101 port: 6379 password: 123321 lettuce: pool: max-active: 8 max-idle: 8 min-idle: 0 max-wait: 100
-
使用@AutoWired注入RedisTemplate redisTemplate
@Autowired private RedisTemplate<String, String> redisTemplate;
-
即可使用redisTemplate来操作redis
redisTemplate.opsForValue().set("name","腕豪"); String name = redisTemplate.opsForValue().get("name");
RedisTemplate序列化
RedisSerializer序列化配置
@Configuration
public class Config {
@Bean
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory connectionFactory) {
// 设置连接工厂
RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
// 创建JSON序列化工具
GenericJackson2JsonRedisSerializer jsonRedisSerializer = new GenericJackson2JsonRedisSerializer();
// 设置 Key 的序列化
redisTemplate.setKeySerializer(RedisSerializer.string());
redisTemplate.setHashKeySerializer(RedisSerializer.string());
// 设置 Value 的序列化
redisTemplate.setValueSerializer(jsonRedisSerializer);
redisTemplate.setHashKeySerializer(jsonRedisSerializer);
return redisTemplate;
}
}
注意:为了在反序列化时知道对象的类型,JSON序列化器会将类的class类型写入json结果中,存入Redis,会带来额外的内存开销
StringRedisTemplate
为节省内存空间,不推荐使用JSON序列化器来处理value,推荐使用String序列化器,要求只能存储String类型的key和value。需要存储java对象时,手动的去完成对象的序列化和反序列化
@Resource
private StringRedisTemplate stringRedisTemplate;
private static final ObjectMapper mapper = new ObjectMapper();
@Test
void contextLoads() {
stringRedisTemplate.opsForValue().set("name","腕豪");
Object name = stringRedisTemplate.opsForValue().get("name");
System.out.println(name);
}
@Test
void setUser() throws JsonProcessingException {
// 创建对象
User user = new User("剑豪", 10);
// 手动序列化
String json = mapper.writeValueAsString(user);
// 写入数据
stringRedisTemplate.opsForValue().set("user:3",json);
// 获取数据
String jsonUser = stringRedisTemplate.opsForValue().get("user:3");
// 反序列化为User对象
User user1 = mapper.readValue(jsonUser, User.class);
System.out.println(user1);
}
写入java对象时,手动吧对象序列化为json
读取redis时,手动把读取到的json反序列化为java对象
// 操作Hash
@Test
void hashTest() {
stringRedisTemplate.opsForHash().put("user:3","name","亚索");
stringRedisTemplate.opsForHash().put("user:3","age","18");
Map<Object, Object> entries = stringRedisTemplate.opsForHash().entries("user:3");
System.out.println(entries);
}