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

网站用的服务器是什么排版设计是什么意思

网站用的服务器是什么,排版设计是什么意思,帝国手机网站cms系统,做网站虚拟主机怎么选择SpringBootredislua 防止超卖 一、背景 工作中遇到了有人用 RedisTemplate 的 increment去做总库存的加减#xff0c;但是这种方式是保证不了原子性的还是会超卖。 redis 是可以保证原子性#xff0c;但是 RedisTemplate 里面的方法去调用redis是不能保证原子性 二、优化…SpringBootredislua 防止超卖 一、背景 工作中遇到了有人用 RedisTemplate 的 increment去做总库存的加减但是这种方式是保证不了原子性的还是会超卖。 redis 是可以保证原子性但是 RedisTemplate 里面的方法去调用redis是不能保证原子性 二、优化方案 使用 lua 脚本去执行 加减操作执行 redis 的命令来保证原子性 三、重点代码 RedisTemplate 注入 Configuration public class RedisConfig {SuppressWarnings({rawtypes, unchecked})Bean(name redisTemplate)public RedisTemplateString, Object redisTemplate(LettuceConnectionFactory lettuceConnectionFactory) {RedisTemplateString, Object redisTemplate new RedisTemplate();redisTemplate.setConnectionFactory(lettuceConnectionFactory);Jackson2JsonRedisSerializer jackson2JsonRedisSerializer new Jackson2JsonRedisSerializer(Object.class);ObjectMapper objectMapper new ObjectMapper();objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);objectMapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);jackson2JsonRedisSerializer.setObjectMapper(objectMapper);redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);redisTemplate.setKeySerializer(new StringRedisSerializer());redisTemplate.afterPropertiesSet();return redisTemplate;}抢购帮助类并支持集群模式 /*** Author liyue* date 2024/3/22 14:31**/ Component public class SecKillProvider {private static final String PRODUCT_KEY {cluster:}productstock;private static final String SECKILL_SCRIPT lua/seckill.lua;Resourceprivate RedisTemplateString, Object redisTemplate;public void initStock(int stock) {//24小时过期RedisUtils.setIfAbsentTimeout(PRODUCT_KEY, stock, 86400);}// DateUtil.format(new Date(), DatePattern.NORM_DATE_PATTERN))public boolean seckill(String userId) {//调用lua脚本并执行DefaultRedisScriptLong redisScript new DefaultRedisScript();redisScript.setResultType(Long.class);//返回类型是Long//lua文件存放在resources目录下的redis文件夹内redisScript.setScriptSource(new ResourceScriptSource(new ClassPathResource(SECKILL_SCRIPT)));Integer result (Integer) redisTemplate.opsForValue().get(PRODUCT_KEY);System.out.println(result);System.out.println(PRODUCT_KEY);Long stock redisTemplate.execute(redisScript, Arrays.asList(PRODUCT_KEY));System.out.println(执行完成----stock stock);if (stock 0) {// 抢购成功可以继续处理订单等逻辑System.out.println(User userId seckill success!);return true;} else {// 抢购失败库存不足System.out.println(User userId seckill failed!);return false;}} }lua 脚本 local stock tonumber(redis.call(get, KEYS[1])) if stock and stock 0 thenredis.call(decr, KEYS[1])return stock - 1 elsereturn -1 end并发测试类 /*** Author liyue* date 2024/3/22 15:14**/ RunWith(SpringRunner.class) SpringBootTest Slf4j public class SecKillProviderTest {Resourceprivate SecKillProvider secKillProvider;Testpublic void t() throws InterruptedException {secKillProvider.initStock(10);for (int i 0; i 2000; i) {new Thread(new Mythread(i)).start();}Thread.sleep(10000);}class Mythread implements Runnable {private int num;Mythread(int num) {this.num num;}SuppressWarnings(unchecked)SecKillProvider secKillProvider SpringUtil.getBean(secKillProvider);Overridepublic void run() {secKillProvider.seckill(String.valueOf(num));}} } 总结 使用这种方式读取文件可以优化成sha的方式去去读取。后面再进行调整测试类可以模拟并发情况。测试没有什么问题。 本文由mdnice多平台发布
http://www.zqtcl.cn/news/400236/

相关文章:

  • 嘉祥网站建设公司小企业网站建设多少钱
  • 做设计.不抠图网站114在线查询电话
  • 上饶网站制作需要多少钱网站百度地图标注
  • 微信网站二次开发广州番禺人才网
  • 支部网站及活动室建设免费建设网站有哪些
  • 深圳福田专业网站推广互联网网站开发有哪些职位
  • 手机网站生成西安北郊做网站
  • 深圳宝安区网站建设南通建设厅网站
  • 介绍做网站的标题在线图片编辑器好用吗
  • 金华建设网站公司笔记本销售网站开发的背景
  • 国外做的好看的网站设计网络营销推广方案怎么做
  • 网站建站业务wordpress网站域名地址
  • 烟台网站制作这做菠菜网站
  • 网站建设vr百度站长
  • 织梦网站广告代码如何写网页设计你若安好便是晴天作业
  • 网站建设 上海wordpress 知更鸟 公告
  • 建小说网站需要多少钱罗湖区住房和建设网站
  • 湖南专业网站建设服务做网站的底图尺寸多大
  • 山东省住房与建设厅网站首页有名的wordpress主题商
  • 常州市金坛区网站建设毕业设计代做淘宝好还是网站好
  • 品牌网站建设营销型网站设计网站整合方案
  • 网站开发设计师网站代理什么意思
  • 网站层级关系邯郸品牌商标vi设计策划公司
  • 网站开发产品需求说明小网站代码
  • 苏州网站推广排名网站建设方案范文8篇
  • 自己做考试题目网站广州番禺区美食攻略
  • 广州做网站如何如何制作一个网页
  • 网站定制开发收费标准是多少网站代码优化方案
  • 制作卡牌的网站深圳正规煤气公司
  • 手表网站哪家好网站用图片