use of com.xatu.gmall.entity.PmsSkuImage in project GMall by 18391713434.
the class SkuServiceImpl method saveSkuInfo.
public void saveSkuInfo(PmsSkuInfo pmsSkuInfo) {
// 插入SkuInfo
skuInfoMapper.insert(pmsSkuInfo);
// 插入平台属性关联
List<PmsSkuAttrValue> pmsSkuAttrValueList = pmsSkuInfo.getSkuAttrValueList();
for (PmsSkuAttrValue pmsSkuAttrValue : pmsSkuAttrValueList) {
pmsSkuAttrValue.setSkuId(pmsSkuInfo.getId());
skuAttrValueMapper.insert(pmsSkuAttrValue);
}
// 插入销售属性关联
List<PmsSkuSaleAttrValue> pmsSkuSaleAttrValueList = pmsSkuInfo.getSkuSaleAttrValueList();
for (PmsSkuSaleAttrValue pmsSkuSaleAttrValue : pmsSkuSaleAttrValueList) {
pmsSkuSaleAttrValue.setSkuId(pmsSkuInfo.getId());
skuSaleAttrValueMapper.insert(pmsSkuSaleAttrValue);
}
// 插入图片信息
List<PmsSkuImage> pmsSkuImageList = pmsSkuInfo.getSkuImageList();
for (PmsSkuImage pmsSkuImage : pmsSkuImageList) {
pmsSkuImage.setSkuId(pmsSkuInfo.getId());
skuImageMapper.insert(pmsSkuImage);
}
}
use of com.xatu.gmall.entity.PmsSkuImage in project GMall by 18391713434.
the class SkuServiceImpl method getSkuById.
public PmsSkuInfo getSkuById(String skuId) {
/*PmsSkuInfo pmsSkuInfo = skuInfoMapper.selectById(skuId);
List<PmsSkuImage> skuImageList = skuImageMapper.selectList(new QueryWrapper<PmsSkuImage>().eq("sku_id", skuId));
pmsSkuInfo.setSkuImageList(skuImageList);*/
PmsSkuInfo pmsSkuInfo = null;
// 链接缓存
Jedis jedis = redisUtil.getJedis();
// 查询缓存
String skuKey = "sku:" + skuId + ":info";
String skuJson = jedis.get(skuKey);
try {
if (StringUtils.isNotBlank(skuJson)) {
pmsSkuInfo = JSON.parseObject(skuJson, PmsSkuInfo.class);
} else {
// 如果缓存没有,查询mysql
// 设置分布式锁
// String OK = jedis.set("sku:" + skuId + ":lock",token,"nx","px",10*1000); //拿到10秒控制权限
String token = UUID.randomUUID().toString();
// 拿到10秒控制权限
String OK = jedis.set("sku:" + skuId + ":lock", token, "nx", "px", 10 * 1000);
if (StringUtils.isNotBlank(OK) && OK.equals("OK")) {
// 设置成功,有权在10秒的过期时间内访问数据库
pmsSkuInfo = skuInfoMapper.selectById(skuId);
List<PmsSkuImage> skuImageList = skuImageMapper.selectList(new QueryWrapper<PmsSkuImage>().eq("sku_id", skuId));
pmsSkuInfo.setSkuImageList(skuImageList);
// mysql查询结果存入redis
if (pmsSkuInfo != null) {
jedis.set("sku:" + skuId + ":info", JSON.toJSONString(pmsSkuInfo));
} else {
// 数据库中不存在该sku
// 为了防止缓存穿透,null或者空字符串设置给redis
jedis.setex("sku:" + skuId + ":info", 60 * 3, JSON.toJSONString(""));
}
// 在访问mysql之后,将分布式锁释放
// jedis.del("sku:" + skuId + ":lock");
String lockToken = jedis.get("sku:" + skuId + ":lock");
if (StringUtils.isNotBlank(lockToken) && lockToken.equals(token)) {
// 用token确认删除的是自己的锁
// jedis.eval("lua"):可以使用lua脚本,在查询key的同时删除该key,防止高并发下的意外发生
jedis.del("sku:" + skuId + ":lock");
}
} else {
// 设置失败自旋(该线程睡眠几秒后,重新尝试访问)
try {
Thread.sleep(3000);
} catch (Exception e) {
e.printStackTrace();
}
return getSkuById(skuId);
}
}
} catch (Exception e) {
e.printStackTrace();
} finally {
jedis.close();
}
return pmsSkuInfo;
// //Redisson锁是包装的JUC内的锁策略,是Java代码层面的分布式锁
// RLock lock = redisson.getLock("anyLock");//声明锁
// // 加锁以后10秒钟自动解锁
// // 无需调用unlock方法手动解锁
// PmsSkuInfo pmsSkuInfo = null;
// //链接缓存
// Jedis jedis = RedisUtil.getJedis();
// //查询缓存
// String skuKey = "sku:"+skuId+":info";
// String skuJson = jedis.get(skuKey);
// try{
// if(StringUtils.isNotBlank(skuJson)){
// pmsSkuInfo = JSON.parseObject(skuJson, PmsSkuInfo.class);
// }else{
// //如果缓存没有,查询mysql
// //设置分布式锁
// // 尝试加锁,最多等待100秒,上锁以后10秒自动解锁
// boolean res = lock.tryLock(3, 10, TimeUnit.SECONDS);
// if (res) {
// try {
// pmsSkuInfo = skuInfoMapper.selectById(skuId);
// List<PmsSkuImage> skuImageList = skuImageMapper.selectList(new QueryWrapper<PmsSkuImage>().eq("sku_id", skuId));
// pmsSkuInfo.setSkuImageList(skuImageList);
// //mysql查询结果存入redis
// if(pmsSkuInfo!=null){
// jedis.set("sku:"+skuId+":info",JSON.toJSONString(pmsSkuInfo));
// }else{
// //数据库中不存在该sku
// //为了防止缓存穿透,null或者空字符串设置给redis
// jedis.setex("sku:"+skuId+":info",60*3, JSON.toJSONString(""));
// }
// }catch (Exception e){
// e.printStackTrace();
// } finally {
// lock.unlock();
// }
// }else{
// return getSkuById(skuId); //如果得不到锁,重新访问
// }
//
// }
// }catch (Exception e){
// e.printStackTrace();
// }finally {
// jedis.close();
// }
// return pmsSkuInfo;
}
Aggregations