当前位置: 首页 > news >正文

免费建站系统个人衡阳建设企业网站

免费建站系统个人,衡阳建设企业网站,给自己做网站,如何通过ftp上传网站前期准备 缓存选择考虑 Redis和Redis Cluster#xff08;分布式版本#xff09;#xff0c;是一个分布式缓存系统。其支持多种数据结构#xff0c;也支持MQ。Redis在性能上做了大量优化。因此使用Redis或者Redis Cluster就可以轻松实现一个强大的秒杀系统。 用Redis的这…前期准备 缓存选择考虑 Redis和Redis Cluster分布式版本是一个分布式缓存系统。其支持多种数据结构也支持MQ。Redis在性能上做了大量优化。因此使用Redis或者Redis Cluster就可以轻松实现一个强大的秒杀系统。 用Redis的这些命令就可以了。 RPUSH key value 插入秒杀请求 当插入的秒杀请求数达到上限时停止所有后续插入。 后台启动多个工作线程使用 LPOP key 读取秒杀成功者的用户id进行后续处理。 或者使用LRANGE key start end命令读取秒杀成功者的用户id进行后续处理。 每完成一条秒杀记录的处理就执行INCR key_num。一旦所有库存处理完毕就结束该商品的本次秒杀关闭工作线程也不再接收秒杀请求。 秒杀思路缓存redis定时器spring整合quartz 1、秒杀商品由商家后台添加秒杀商品数据保存在tb_seckilll_goods表中关键字段包括 idstatus(审核状态)start_time(开始时间)end_time(结束时间)stock_count(库存量) 2、写一个定时器定时从秒杀商品表中扫描数据将符合条件的商品加载到缓存redis中条件审核状态1start_time 当前时间 end_time库存量大于0 3、前端展示此处略 4、点击抢购拿着秒杀商品的id去缓存中查询如果缓存中商品不存在或者为空提示“已售罄”否则生成订单原子操作保存到缓存中防止用户重复秒杀订单表tb_seckill_order 5、库存-1判断减完之后缓存中商品的库存是否大于0大于0则更新缓存否则删除该秒杀商品的缓存并更新到数据库 6、异步处理所有秒杀订单和库存在内存redis后边异步同步到mysql 方案一使用商品ID作为分布式锁加锁后扣减库存 实现流程为: 用户发起秒杀请求到RedisRedis先使用商品ID作为key尝试加锁保证只有一个用户进入之后流程保证原子性如果加锁成功则查询库存。如果库存充足则扣减库存记录订单代表秒杀成功若库存不足直接返回秒杀失败 /*** 使用分布式锁秒杀加锁后再查询redis库存最后扣减库存* param lockId 锁ID* param userId 用户ID* param goodKey 商品ID* return 秒杀成功返回 true否则返回 false*/ private boolean subStock(String lockId, String userId, String goodKey) {// 尝试先加锁如果加锁成功再进行查询库存量和扣减库存操作此时只能有一个线程进入代码块if (redisLock.lock(lockId, userId, 4000)) {try {// 查询库存Integer stock (Integer) redisTemplate.opsForValue().get(goodKey);if (stock null) {System.out.println(商品不在缓存中);}// 如果剩余库存量大于零则扣减库存if (stock 0) {redisTemplate.opsForValue().decrement(goodKey);return true;} else {return false;}} finally {// 释放锁redisLock.unlock(lockId, userId);}}return false; } 该方案存在一些缺点 用户进来后都要抢锁即便是库存量已经为零仍然需要抢锁这无疑带来了很多无用争抢 锁的是商品ID锁粒度太大并发性能可以进一步优化 解决方案 抢锁前先查询库存如果库存已经为零则直接返回false不必参与抢锁过程 使用商品ID库存量作为锁降低锁粒度进一步提升并发性能; 方案二先查询再使用商品ID作为分布式锁加锁后扣减库存 实现流程为: 用户发起秒杀请求到RedisRedis先查询库存量然后根据商品ID库存量作为key尝试加锁保证只有一个用户进入之后流程保证原子性如果加锁成功则查询库存解决超卖问题第一步骤并发查有库存但是另外一个thread已经先行扣除成功需要原子操作再加一步查询。如果库存充足则扣减库存代表秒杀成功若库存不足直接返回秒杀失败 //查询库存是否0Integer curStock (Integer) redisTemplate.opsForValue().get(goodKey);if (curStock 0) {return false;} //尝试加锁实现秒杀下单过程if (redisLock.lock(lockId, userId, 4000)) {try {// 查询库存Integer stock (Integer) redisTemplate.opsForValue().get(goodKey);if (stock null) {System.out.println(商品不在缓存中);}// 如果剩余库存量大于零则扣减库存if (stock 0) {redisTemplate.opsForValue().decrement(goodKey);return true;} else {return false;}} finally {// 释放锁redisLock.unlock(lockId, userId);}}return false; JavaRedis系统实现 步骤参考Redis实现商品秒杀-CSDN博客 1、将数据库中的商品库存数量存入Redis中。 // 商品列表名称 String redisKey goods: seckillGoods.getId(); // 添加所有库存商品 for (int i 0; i seckillGoods.getGoodsCount(); i) {redisTemplate.opsForList().rightPush(redisKey, String.valueOf(seckillGoods.getId())); } 2、判断用户是否已经秒杀成功过。 // 查询用户是否已经秒杀过该商品 Object orderObj redisTemplate.opsForHash().get(seckill_orders, seckillUser.getId() : seckillGoods.getId()); if (orderObj ! null) {throw new SEckillException(ErrorCodeEnum.REPEAT_SEC_KILL_ERROR); } // 查询用户是否在排队中 Object userInQueueObj redisTemplate.opsForSet().isMember(seckill_queues: seckillGoods.getId(), seckillUser.getId()); if (userInQueueObj ! null) {throw new SEckillException(ErrorCodeEnum.WAITING_IN_QUEUE_ERROR); } 3、利用Redis的事务实现处理抢购成功的逻辑。 // 开启事务 redisTemplate.setEnableTransactionSupport(true); redisTemplate.multi(); // 从商品列表中弹出一个商品 redisTemplate.opsForList().leftPop(redisKey); // 利用setValueAt等方法获取用户信息和商品信息此处略过 // 判断是否获取到商品信息 if (seckillGoods null) {redisTemplate.discard();throw new SEckillException(ErrorCodeEnum.SEC_KILL_FINISH_ERROR); } // 秒杀成功生成秒杀订单 redisTemplate.opsForHash().put(seckill_orders, seckillUser.getId() : seckillGoods.getId(), seckillOrder); // 秒杀成功的商品写入Set中 redisTemplate.opsForSet().add(seckill_success: seckillGoods.getId(), String.valueOf(seckillGoods.getId())); // 提交事务 redisTemplate.exec();
http://www.hkea.cn/news/14423776/

相关文章:

  • 东莞工业品网站建设加强网络安全建设
  • 大旺建设局网站wordpress h5播放器
  • 怎么发布个人网站wordpress 当数据库
  • p2p网站建设方案策划书系统重装后 怎么装wordpress
  • 免费网站统计深圳设计公司推荐
  • 潍坊外贸网站建设北京顺义有网站建设公司吗
  • 如何在淘宝上做自己的网站校园网认证登录入口
  • 三亚旅游网站建设四川住建局和城乡建设厅
  • 网站广告设计长沙关键词优化推荐
  • 注册网站刀具与钢材范围实时热搜榜
  • 海尔网站建设广告页面模板网站
  • 360元网站建设国外做科研的网站
  • 江苏网站优化哪个网站可以做头像的
  • 做侵权电影网站什么后果制作英文网站多少钱
  • 女性手机网站模板抖音代运营合作方案ppt
  • 自己做的网站怎么接入数据库专门做二手房车的网站
  • 做代理网站佛山专业做网站的公司
  • 网站建设费用选网络专业帝国cms做招聘网站
  • 做网站要运用到代码吗网页开发者模式怎么打开
  • 厦门网站制作公司找哪家网站建设worldpress
  • 网站关键词优化多少钱a+网络推广平台
  • 旅游网站设计方案网站建设伍金手指下拉7
  • 国家重大建设项目库网站seo关键词优化软件怎么样
  • 17网站一起做网店深圳浙江建设工程信息网查询
  • 天津做网站的公司wordpress+魅族
  • 企业网站的主要栏目wordpress集成文库插件
  • 无锡网站建设品牌大全寻花问柳专注做一家男人最爱的网站
  • 国内免费建站平台陕西网站建设营销推广
  • 做公司网站怎么做手机版分享网络营销方式
  • 网站开发就业前景分析温州seo关键词优化