一.当采用reddis缓存的时候,如果同时,一万次访问,那么就会有10000次访问数据库所以就会对数据库造成巨大压力,这时候,就要用到线程
1.方法体上加锁(优点,防护住了并发锁,缺点降低了内存效率)
1 /** 2 * 最简洁的高并发处理,但是,牺牲效率大 3 * 4 * @return 5 */ 6 public synchronized List<Student> selectAllStudent1() { 7 8 // 字符串序列化器 9 RedisSerializer redisSerializer = new StringRedisSerializer(); 10 redisTemplate.setKeySerializer(redisSerializer); 11 12 /** 13 * 在高并发条件下,此处有问题,缓存穿透问题 14 */ 15 //查询关键字 16 List<Student> studentList = (List<Student>) redisTemplate.opsForValue().get("allStudents"); 17 18 if (null == studentList) { 19 20 //缓存为空,查询数据库 21 studentList = studentMapper.selectAllStudent(); 22 23 //把数据库中查询出的数据,放入redis中 24 redisTemplate.opsForValue().set("allStudents", studentList); 25 } 26 27 return studentList; 28 }