首先我们需要在pom中导入有关redis的包
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-redis</artifactId>
<version>1.4.7.RELEASE</version>
</dependency>
在application.yml中我们需要对redis进行配置。需要配置的有:host,port,timeout,jedis等,如下图所示:
spring.redis:
host: localhost
port: 6379
timeout: 1000
jedis:
pool:
min-idle: 5
max-idle: 10
max-wait: -1
在config包中我们可以写一个RedisConfig,可以用来指定序列化的方式。
@Configuration
public class RedisConfig {
@Bean
public RedisTemplate<String,Object> redisTemplate(RedisConnectionFactory redisConnectionFactory){
RedisTemplate<String,Object> redisTemplate = new RedisTemplate<>();
redisTemplate.setConnectionFactory(redisConnectionFactory);
//指定kv的序列化方式
Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);
redisTemplate.setKeySerializer(new StringRedisSerializer());
return redisTemplate;
}
}
首先我们需要对User类进行创建,配置dao层和service层,最后在控制层里我们可以对业务进行实现,以下是部分代码:
public class userController {
@Resource
private UserMapper userMapper;
@Resource
private RedisTemplate redisTemplate;
@RequestMapping("/user")
public String queryuser(Model model, HttpServletRequest request, HttpSession session, @RequestParam(defaultValue = "1") Integer pageNo, @RequestParam(defaultValue = "3") Integer size){
PageHelper.startPage(pageNo,size);
User user = (User)session.getAttribute("user");
//先从缓存获取数据,如果有则直接返回,如果无,则查询mysql,并将数据设置到缓存
String key = "user";
List<User> o = (List<User>)redisTemplate.opsForValue().get(key);
PageInfo<User> info;
//防止高并发情况下,多次查询数据库
if(o==null){
synchronized (this.getClass()){
o = (List<User>)redisTemplate.opsForValue().get(key);
if(o==null){
log.debug("查询数据库");
List<User> alluser = userMapper.findAllUser();
info = new PageInfo<>(alluser);
redisTemplate.opsForValue().set(key,alluser);
}
else {
info = new PageInfo<>(o);
}
}
}
else{
info = new PageInfo<>(o);
}
model.addAttribute("alluser", info);
return "userlist";
}
}