手机一元云购网站建设网站开发工具评价
手机一元云购网站建设,网站开发工具评价,上海网页建站,本地网站asp iis一. 场景下单后库存校验或者秒杀场景下#xff0c;有很多利用“锁”的方案来解决问题。但是加锁其实是一件性价比很低的事#xff0c;所以我们采用用redislua的方式来实现这个功能。二. 思路阶段一#xff1a;在库存加减逻辑中分为2个步骤#xff1a;STEP1.读取库存#x…一. 场景下单后库存校验或者秒杀场景下有很多利用“锁”的方案来解决问题。但是加锁其实是一件性价比很低的事所以我们采用用redislua的方式来实现这个功能。二. 思路阶段一在库存加减逻辑中分为2个步骤STEP1.读取库存STEP2.读取库存。利用其他方法例如锁等也就是想控制好STEP2一定要紧跟STEP1,本质上就是确保获取的库存的最新的数据为最新。阶段二在相对较高的并发场景下redis被常用作库存管理我们需要通过最小成本的改动来实现库存的限制。但是redis的读取库存读取库存一般都是有上层应用代码控制有没有办法在一个函数调用中能串行执行这俩个步骤了阶段三众所周知redis是单线程的并且现在已经支持lua脚本那是不是可以利用该组合实现我们的场景了三. 设计方案这个方案就很简单了直接利用redistemplate执行lua脚本四. 代码4.1 lua脚本代码样例private static final String GET_COUPON_CODE local values redis.call(hmget,KEYS[1],recvCnt,couponCnt);\n //lua返回value的数组if tonumber(values[1]) tonumber(values[2]) then \n //lua的数组索引从1开始 values[1] recvCnt,values[2] couponCnt redis.call(hincrby,KEYS[1],recvCnt,1);\n return true;\n else\n return false;\n end\n;4.2 redis调用lua脚本//执行调用execute(GET_COUPON_CODE, keys);//此处将数值类型转化为Longpublic Long execute(String redisScript,List keys){RedisScript REDIS_SCRIPT new DefaultRedisScript(redisScript, Long.class);return redisTemplate.execute(REDIS_SCRIPT,keys);}4.3 lua基本用法redis.call()redis.pcall()call与pcall基本上一样。脚本报错时call会直接报错pcall不会报错会把错误信息放到lua table 的err字段中。五. 说明1.记得利用“\n”分行也可以利用string的append拼接2.values[n]对应有序数组keys需要控制好各数据顺序3.lua的数组索引从1开始六. 总结我们先分析场景通过多种方案对比选用了redislua的组合来满足我们的业务需要。利用redis单线程的特点以及redis2.6版本后开始对lua的支持我们采用redis执行lua脚本来确保我们查询修改的串行执行。后面我们展示了code的实现案例以及介绍了lua脚本的一些注意事项可以依葫芦画瓢形式自己实现自己的需求。综合而言我们分析场景应先分析其核心问题然后利用一些更简洁的方法或小技巧来落地。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/86661.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!