?解決Redis 緩存雪崩(過期時間不一致) 和 緩存穿透(黑名單)
public Product getdetailById(Integer id) {String key = "product." + id;// 查詢黑名單中是否有該keyBoolean b = hashOperations.hasKey(PROODUCT_DETAIL_BLACK, key);if(b){log.error("商品不存在id=>{}",id);throw new BizException(201,"商品不存在在黑名單id=>"+id);}//如果黑名單沒有該key,先查緩存Product product = valueOperations.get(PROODUCT_DETAIL+id);if (ObjectUtil.isNotEmpty(product)) {return product;}//緩存不存在,查詢數據庫log.debug("緩存不存在,查詢數據庫");product = productDao.selectById(id);if(ObjectUtil.isEmpty(product)){log.error("數據庫中不存在該商品id=>{}",id);//在將該商品加入黑名單中hashOperations.put(PROODUCT_DETAIL_BLACK,key, DateUtil.now());throw new BizException(202,"商品不存在id=>"+id);}int i = RandomUtil.randomInt(-60, 60);//將查詢出來的數據放到redis中;valueOperations.set(PROODUCT_DETAIL+ id, product,60*24+i, TimeUnit.MINUTES);return product;}