package com.product.service;
import com.alibaba.fastjson.JSON;
import com.product.dao.GoodsDao;
import com.product.entity.Goods;
import com.product.utils.JSONUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
@Component
public class GoodService {
public static final String SKILL_GOODS_PHONE = "SKILL_GOODS_PHONE";
public static final String SKILL_GOODS_QUEUE = "SKILL_GOODS_QUEUE";
@Autowired
private RedisTemplate redisTemplate;
@Autowired
private GoodsDao goodsDao;
@Scheduled(fixedDelay = 5000)
public void prepareGood() {
System.out.println("开始加载商品");
Set<Long> set = redisTemplate.boundHashOps(SKILL_GOODS_PHONE).keys();
List<Long> ids = new ArrayList<>();
for (Long id : set) {
ids.add(id);
}
List<Goods> list = null;
//只查询出不在内存当中的商品信息,并加载到内存
if (CollectionUtils.isEmpty(ids)) {
list = goodsDao.findAllGoods();
} else {
list = goodsDao.findGoods(ids);
}
if (!CollectionUtils.isEmpty(list)) {
for (Goods goods : list) {
redisTemplate.boundHashOps(SKILL_GOODS_PHONE).put(goods.getId(), JSON.toJSONString(goods));
redisTemplate.boundListOps(SKILL_GOODS_QUEUE+goods.getId()).leftPush(convertToArray(goods.getStock_count(), goods.getId()));
}
}
//查看当前缓存中所有的商品信息
Set keys = redisTemplate.boundHashOps(SKILL_GOODS_PHONE).keys();
for (Object s : keys) {
Goods goods = JSONUtil.toEntity((String) redisTemplate.boundHashOps(SKILL_GOODS_PHONE).get(s), Goods.class);
System.out.println(goods.getName() + " 库存剩余:" + goods.getStock_count());
}
}
private Long[] convertToArray(Integer stock_count, Long id) {
Long[] idlong = new Long[stock_count];
for (int i = 0; i < stock_count; i++) {
idlong[i] = id;
}
return idlong;
}
//查询商品信息
public Goods queryGoods (Long productId) {
return JSONUtil.toEntity((String) redisTemplate.boundHashOps(SKILL_GOODS_PHONE).get(productId), Goods.class);
}
//更新商品信息
public void update(Goods goods) {
goodsDao.save(goods);
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
SpringCloudAlibaba六微服务架构下的秒杀案例
共48个文件
class:16个
java:16个
xml:10个
需积分: 23 1 下载量 175 浏览量
2022-10-23
09:50:51
上传
评论
收藏 57KB ZIP 举报
温馨提示
背景 分布式微服务中的秒杀是怎么实现的呢?接着看下去吧 我们实现一个秒杀微服务,流程逻辑如下
资源详情
资源评论
资源推荐
收起资源包目录
springcloud-nacos - miaosha.zip (48个子文件)
springcloud-nacos - miaosha
product
pom.xml 832B
target
classes
application.yml 477B
com
product
dao
GoodsDao.class 979B
controller
ProductController.class 2KB
service
GoodService.class 4KB
entity
Goods.class 5KB
utils
JSONUtil.class 791B
ProductApplication.class 2KB
generated-sources
annotations
src
main
resources
application.yml 477B
java
com
product
dao
GoodsDao.java 677B
controller
ProductController.java 688B
service
GoodService.java 3KB
ProductApplication.java 1KB
entity
Goods.java 890B
utils
JSONUtil.java 328B
pom.xml 2KB
.idea
jpa-buddy.xml 196B
runConfigurations.xml 346B
misc.xml 766B
jarRepositories.xml 880B
encodings.xml 276B
compiler.xml 1KB
workspace.xml 7KB
skill
pom.xml 830B
target
classes
application.yml 479B
com
skill
dao
SkillOrderDao.class 411B
controller
SkillController.class 1KB
service
ProductService.class 2KB
MultiThreadOrder.class 4KB
SkillGoodsService.class 3KB
entity
Goods.class 5KB
SkillEntity.class 2KB
SkillOrder.class 5KB
utils
JSONUtil.class 787B
SkillApplication.class 2KB
generated-sources
annotations
src
main
resources
application.yml 479B
java
com
skill
dao
SkillOrderDao.java 269B
SkillApplication.java 1KB
controller
SkillController.java 641B
service
SkillGoodsService.java 2KB
MultiThreadOrder.java 2KB
ProductService.java 754B
entity
SkillOrder.java 731B
Goods.java 888B
SkillEntity.java 205B
utils
JSONUtil.java 326B
springcloud-nacos.ipr 5KB
springcloud-nacos.iws 20KB
共 48 条
- 1
BirdMan98
- 粉丝: 2w+
- 资源: 23
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0