




免费预览已结束,剩余1页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
秒杀和限流1 基于redis的秒杀方案抢库存发消息下订单Watch保证数量的一致性执行exec扣减incrBy事务multiRedis中的商品数量1 缓存秒杀模型redis是单线程的,所以在redis中所有命令都是原子操作。而当要多条redis命令同时执行而不被打断时,则需要使用redis的事务了。 - MULTI - EXEC - DISCARD - WATCHMULTI命令 用于开启一个事务,它总是返回OK。MULTI执行之后,客户端可以继续向服务器发送任意多条命令, 这些命令不会立即被执行,而是被放到一个队列中,当 EXEC命令被调用时, 所有队列中的命令才会被执行。EXEC命令 负责触发并执行事务中的所有命令: 如果客户端成功开启事务后执行EXEC,那么事务中的所有命令都会被执行。 如果客户端在使用MULTI开启了事务后,却因为断线而没有成功执行EXEC,那么事务中的所有命令都不会被执行。 需要特别注意的是:即使事务中有某条/某些命令执行失败了,事务队列中的其他命令仍然会继续执行Redis不会停止执行事务中的命令,而不会像我们通常使用的关系型数据库一样进行回滚。DISCARD命令 当执行 DISCARD 命令时, 事务会被放弃, 事务队列会被清空,并且客户端会从事务状态中退出。WATCH 命令 可以为Redis事务提供 check-and-set (CAS)行为。被WATCH的键会被监视,并会发觉这些键是否被改动过了。 如果有至少一个被监视的键在 EXEC 执行之前被修改了, 那么整个事务都会被取消, EXEC 返回nil-reply来表示事务已经失败。2 实现方案(jedis或者redisson)1 基于jedis的实现jedis.watch(productKey);/保证一致性Transaction tx = jedis.multi();/开启事务tx.incrBy(productKey, -1);/扣减库存List list = tx.exec();/执行事务mq.send(order);/发出订单2 基于redisson的实现RSemaphore semaphore = redissonClient.getSemaphore(SEC_KILL + skuId + );boolean b = semaphore.tryAcquire();/setnxex(user) /控制频率,规定时间内只能秒一个2限流(算法介绍)1 漏桶算法漏桶算法很好的解决了时间边界处理不够平滑的问题,在每次请求进桶前都将执行“漏水”的操作,然后再计算当前水量,即不以时间为界限,而以流量为界限进行计算,回避了时间边界的问题。long timeStamp = getNowTime(); int capacity = 10000;/ 桶的容量,即最大承载值int rate = 1;/水漏出的速度,即服务器的处理请求的能力int water = 100;/当前水量,即当前的即时请求压力/当前请求线程进入漏桶方法,true则不被拒绝,false则说明当前服务器负载水量不足,则被拒绝public static bool control() long now = getNowTime();/当前请求时间/先执行漏水代码/rate是固定的代表服务器的处理能力,所以可以认为“时间间隔*rate”即为漏出的水量 water = Math.max(0, water - (now - timeStamp) * rate);/请求时间-上次请求时间=时间间隔 timeStamp = now;/更新时间,为下次请求计算间隔做准备 if (water capacity) / 执行漏水代码后,发现漏桶未满,则可以继续加水,即没有到服务器可以承担的上线 water +; return true; else return false;/水满,拒绝加水,到服务器可以承担的上线,拒绝请求 2 令牌桶算法令牌桶算法的原理是系统会以一个恒定的速度往桶里放入令牌,而如果请求需要被处理,则需要先从桶里获取一个令牌,当桶里没有令牌可取时,则拒绝服务。long timeStamp=getNowTime(); int capacity; / 桶的容量 int rate ;/令牌放入速度int tokens;/当前水量 bool control() /先执行添加令牌的操作 long now = getNowTime(); tokens = max(capacity, tokens+ (now - timeStamp)
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 乐理音程考试题库及答案
- 森林防护巡护知识培训课件
- 森林家庭防火知识培训课件
- 棋王课件中职
- 海南省养老护理员职业资格技师考试题(含答案)
- 2025年精细化工作业面试宝典涵盖各类工艺作业预测题
- 2025年裁判台球考试题及答案
- 2025年公路水运安全员(交安abc)考试考核题库答案
- 2025年项目经理从业资格认证考试模拟试题集及答题技巧
- 2025年软件工程师职称评定预测试题及答案参考
- 2025年秋季学期(统编版)二年级上册语文教学工作计划及教学进度表
- 2025年福建省厦门市【辅警协警】笔试真题(含答案)
- (2025年标准)委托他人要账协议书
- 2025年广西中考语文试题卷(含答案)
- JB-T 4088.1-2022 日用管状电热元件 第1部分:通用要求
- 重点单位消防八本台帐
- 售后维修服务单
- 中小学教师违反职业道德行为处理办法课件
- 《复变函数》课程说课
- 医院免疫检验报告(性激素6项)
- 表单-公司董监高、股东、核心技术人员调查表(上市或尽调使用)
评论
0/150
提交评论