1 引入pom依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
2 配置类(用于解决redis客户端乱码问题,也不算乱码)
@Configuration
public class RedisConfig {
@Bean
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {
RedisTemplate<String, Object> template = new RedisTemplate<String, Object>();
template.setConnectionFactory(factory);
Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
ObjectMapper om = new ObjectMapper();
om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
om.activateDefaultTyping(LaissezFaireSubTypeValidator.instance , ObjectMapper.DefaultTyping.NON_FINAL);
jackson2JsonRedisSerializer.setObjectMapper(om);
StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();
// key采用String的序列化方式
template.setKeySerializer(stringRedisSerializer);
// hash的key也采用String的序列化方式
template.setHashKeySerializer(stringRedisSerializer);
// value序列化方式采用jackson
template.setValueSerializer(jackson2JsonRedisSerializer);
// hash的value序列化方式采用jackson
template.setHashValueSerializer(jackson2JsonRedisSerializer);
template.afterPropertiesSet();
return template;
}
}
3 使用redis
@RestController
@RequestMapping("user")
public class UserController {
@Resource
UserService userService;
@Resource
RedisTemplate<String, Object> redisTemplate;
@GetMapping("/getUserlistFromRedisString")
public List<User> getUserlistFromRedisString() {
String key = "user:getUserlistFromRedisString";
Object o = redisTemplate.opsForValue().get(key);
if (o != null && ((List<User>) o).size() != 0) {
return (List<User>) o;
}
List<User> userlist = userService.getUserlist();
if (userlist != null && userlist.size() != 0) {
redisTemplate.opsForValue().set(key, userlist);
return userlist;
}
// 如果数据库redis都查不到数据 防止缓存穿透
redisTemplate.opsForValue().set(key, new User(), 30, TimeUnit.SECONDS);
return null;
}
@GetMapping("/getUserlistFromRedisList")
public List<User> getUserlistFromRedisList(Integer start, Integer end) {
String key = "user:getUserlistFromRedisList";
List<Object> list = redisTemplate.opsForList().range(key, start, end);
if (list != null) {
List<User> users = list.stream().map(o -> {
User user = (User) o;
return user;
}).collect(Collectors.toList());
return users;
}
List<User> userlist = userService.getUserlist();
if (userlist != null && userlist.size() != 0) {
redisTemplate.opsForList().rightPushAll(key, userlist.toArray());
return userlist;
}
// 如果数据库redis都查不到数据 防止缓存穿透
redisTemplate.opsForValue().set(key, new User(), 30, TimeUnit.SECONDS);
return null;
}
}