Redis 实战篇1.4 (Redis优化秒杀)
Redis优化秒杀原流程思路Redis优化秒杀在Redis中库存用String数据类型存储为了确保一人一单则订单id存储用Set数据类型保证数据的唯一性lua脚本保证原子性异步秒杀方案案例需求创建订单还没完成明天继续// 解锁的lua脚本 private static final DefaultRedisScriptLong SECKILL_SCRIPT; // 静态代码赋值提升性能 static { SECKILL_SCRIPT new DefaultRedisScript(); // 通过spring提供的类找到脚本资源获取lua脚本 SECKILL_SCRIPT.setLocation(new ClassPathResource(seckill.lua)); // 设置返回类型 SECKILL_SCRIPT.setResultType(Long.class); } Override public Result createVoucherOrder(Long voucherId) { // 获取用户 Long userId UserHolder.getUser().getId(); // 1.执行lua脚本 Long result stringRedisTemplate.execute( SECKILL_SCRIPT, Collections.emptyList(), voucherId.toString(), userId.toString() ); // 2.判断结果是为0 int r result.intValue(); if(r ! 0){ // 2.1.不为0代表没有购买资格 return Result.fail(r 1 ? 库存不足 : 不能重复下单); } // 2.2 为0 有购买资格把下单信息保存到阻塞队列 long orderId redisIdWorker.nextId(order); // TODO 保存阻塞队列 // 3.返回订单id return Result.ok(orderId); }
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2480425.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!