一. 秒杀商品存入缓存
1. 客户访问-> seckill服务查询mysql-> seckill_goods表-> 缓存数据到MySQL-> 一是缓解高并发下数据库的查找压力, 二是利用redis的原子性操作避免超卖问题.
2. 新建服务changgou_service_seckill
(1)添加依赖: common-db/ eureka/ order-api/ seckill-api/ goods-api/ amqp/ oauth2 (2)添加changgou_service_seckill_api模块: 创建seckill/pojo/SeckillGoods.java 和 SeckillOrder.java (3)启动类SeckillApplication.java @SpringBootApplication @EnableEurekaClient @MapperScan(basePackages = {"com.changgou.seckill.dao"}) @EnableScheduling public class SecKillApplication { public static void main(String[] args) { //TimeZone.setDefault(TimeZone.getTimeZone("Asia/Shanghai")); SpringApplication.run(SecKillApplication.class, args); } //idWorker @Bean public IdWorker idWorker(){ return new IdWorker(1, 1); //传入snowflake算法的参数(工作id, 序列号范围) } /** * 设置 redisTemplate 的序列化设置 * @param redisConnectionFactory * @return */ @Bean public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) { // 1.创建 redisTemplate 模版 RedisTemplate<Object, Object> template = new RedisTemplate<>(); // 2.关联 redisConnectionFactory template.setConnectionFactory(redisConnectionFactory); // 3.创建 序列化类 GenericToStringSerializer genericToStringSerializer = new GenericToStringSerializer(Object.class); // 6.序列化类,对象映射设置 // 7.设置 value 的转化格式和 key 的转化格式 template.setValueSerializer(genericToStringSerializer); template.setKeySerializer(new StringRedisSerializer()); template.afterPropertiesSet(); return template; } @Bean public TokenDecode tokenDecode() { return new TokenDecode(); } } (4)配置文件application.yml server: port: 9011 spring: jackson: time-zone: GMT+8 application: name: seckill datasource: driver-class-name: com.mysql.jdbc.Driver url: jdbc:mysql://192.168.200.128:3306/changgou_seckill?useUnicode=true&characterEncoding=utf-8&useSSL=false&allowMultiQueries=true&serverTimezone=GMT%2b8 username: root password: root main: allow-bean-definition-overriding: true #当遇到同样名字的时候,是否允许覆盖注册 redis: host: 192.168.200.128 rabbitmq: host: 192.168.200.128 eureka: client: service-url: defaultZone: http://127.0.0.1:6868/eureka instance: prefer-ip-address: true feign: hystrix: enabled: true client: config: default: #配置全局的feign的调用超时时间 如果 有指定的服务配置 默认的配置不会生效 connectTimeout: 60000 # 指定的是 消费者 连接服务提供者的连接超时时间 是否能连接 单位是毫秒 readTimeout: 20000 # 指定的是调用服务提供者的 服务 的超时时间() 单位是毫秒 #hystrix 配置 hystrix: command: default: execution: timeout
SpringCloud商城day14 秒杀异步下单-2021-10-27
最新推荐文章于 2024-09-01 23:51:31 发布
本文介绍了如何在SpringCloud中实现秒杀系统的异步下单功能,首先通过缓存减轻数据库压力并利用Redis的原子性防止超卖。接着新建服务`changgou_service_seckill`,设置秒杀时间段,并利用时间工具类进行日期转换。同时,开启定时任务查询符合条件的秒杀商品。在促销商品首页,每2小时更新时间菜单,并根据秒杀时间段在Redis中查询商品展示。前端使用Vue.js处理立即抢购按钮交互。
摘要由CSDN通过智能技术生成