成人性生交大片免费看视频r_亚洲综合极品香蕉久久网_在线视频免费观看一区_亚洲精品亚洲人成人网在线播放_国产精品毛片av_久久久久国产精品www_亚洲国产一区二区三区在线播_日韩一区二区三区四区区区_亚洲精品国产无套在线观_国产免费www

主頁 > 知識庫 > 使用lua+redis解決發(fā)多張券的并發(fā)問題

使用lua+redis解決發(fā)多張券的并發(fā)問題

熱門標簽:b2b外呼系統(tǒng) 高碑店市地圖標注app 南京手機外呼系統(tǒng)廠家 一個地圖標注多少錢 400電話辦理的口碑 臺灣電銷 四川穩(wěn)定外呼系統(tǒng)軟件 廊坊外呼系統(tǒng)在哪買 地圖標注工廠入駐

前言

公司有一個發(fā)券的接口有并發(fā)安全問題,下面列出這個問題和解決這個問題的方式。

業(yè)務(wù)描述

這個接口的作用是給會員發(fā)多張券碼。涉及到4張主體,分別是:用戶,券,券碼,用戶領(lǐng)取記錄。
下面是改造前的偽代碼。
主要是因為查出券碼那行存在并發(fā)安全問題,多個線程拿到同幾個券碼。以下都是基于如何讓取券碼變成原子的去展開。

public boolean sendCoupons(Long userId, Long couponId) {
 // 一堆校驗
 // ...
 // 查出券碼
 ListCouponCode> couponCodes = couponCodeService.findByCouponId(couponId, num);
 // batchUpdateStatus是一個被@Transactional(propagation = Propagation.REQUIRES_NEW)修飾的方法
 // 批量更新為已被領(lǐng)取狀態(tài)
 couponCodeService.batchUpdateStatus(couponCods);
 // 發(fā)券
 // 發(fā)權(quán)益
 // 新增用戶券碼領(lǐng)取記錄
}

改造過程

因為券碼是多張,想用lua+redis的list結(jié)構(gòu)去做彈出。為什么用這種方案是因為for update直接被否了。

這是寫的lua腳本。。

local result = {}
for i=1,ARGV[1],1 do
 result[i] = redis.call("lpop", KEYS[1])
end
return table.contact(result , "|")

這是寫的執(zhí)行l(wèi)ua腳本的client。。其實主要的解決方法就是在redis的list里rpush(存),lpop(取)取數(shù)據(jù)

@Slf4j
@Component
public class CouponCodeRedisQueueClient implements InitializingBean {

 /**
  * redis lua腳本文件路徑
  */
 public static final String POP_COUPON_CODE_LUA_PATH = "lua/pop-coupon-code.lua";
 public static final String SEPARATOR = "|";

 private static final String COUPON_CODE_KEY_PATTERN = "PROMOTION:COUPON_CODE_{0}";
 private String LUA_COUPON_CODE_SCRIPT;

 private String LUA_COUPON_CODE_SCRIPT_SHA;

 @Autowired
 private JedisTemplate jedisTemplate;

 @Override
 public void afterPropertiesSet() throws Exception {

  LUA_COUPON_CODE_SCRIPT = Resources.toString(Resources.getResource(POP_COUPON_CODE_LUA_PATH), Charsets.UTF_8);
  if (StringUtils.isNotBlank(LUA_COUPON_CODE_SCRIPT)) {

   LUA_COUPON_CODE_SCRIPT_SHA = jedisTemplate.execute(jedis -> {
    return jedis.scriptLoad(LUA_COUPON_CODE_SCRIPT);
   });
   log.info("redis lock script sha:{}", LUA_COUPON_CODE_SCRIPT_SHA);
  }

 }

 /**
  * 獲取Code
  *
  * @param activityId
  * @param num
  * @return
  */
 public ListString> popCouponCode(Long activityId, String num , int retryNum) {
  if(retryNum == 0){
   log.error("reload lua script error , try limit times ,activityId:{}", activityId);
   return Collections.emptyList();
  }
  ListString> keys = Lists.newArrayList();
  String key = buildKey(String.valueOf(activityId));
  keys.add(key);
  ListString> args = Lists.newArrayList();
  args.add(num);

  try {
   Object result = jedisTemplate.execute(jedis -> {
    if (StringUtils.isNotBlank(LUA_COUPON_CODE_SCRIPT_SHA)) {
     return jedis.evalsha(LUA_COUPON_CODE_SCRIPT_SHA, keys, args);
    } else {
     return jedis.eval(LUA_COUPON_CODE_SCRIPT, keys, args);
    }
   });
   log.info("pop coupon code by lua script.result:{}", result);
   if (Objects.isNull(result)) {
    return Collections.emptyList();
   }
   return Splitter.on(SEPARATOR).splitToList(result.toString());
  } catch (JedisNoScriptException jnse) {
   log.error("no lua lock script found.try to reload it", jnse);
   reloadLuaScript();
   //加載后重新執(zhí)行
   popCouponCode(activityId, num, --retryNum);
  } catch (Exception e) {
   log.error("failed to get a redis lock.key:{}", key, e);
  }
  return Collections.emptyList();
 }

 /**
  * 重新加載LUA腳本
  *
  * @throws Exception
  */
 public void reloadLuaScript() {
  synchronized (CouponCodeRedisQueueClient.class) {
   try {
    afterPropertiesSet();
   } catch (Exception e) {
    log.error("failed to reload redis lock lua script.retry load it.");
    reloadLuaScript();
   }
  }
 }

 /**
  * 構(gòu)建Key
  *
  * @param activityId
  * @return
  */
 public String buildKey(String activityId) {
  return MessageFormat.format(COUPON_CODE_KEY_PATTERN, activityId);
 }

}

當然這種操作需要去提前把所有券的券碼丟到redis里去,這里我們也碰到了一些問題(券碼量比較大的情況下)。比如開始直接粗暴的用@PostConstruct去放入redis,導(dǎo)致項目啟動需要很久很久。。這里就不展開了,說一下我們嘗試的幾種方法

  • @PostConstruct注解
  • CommandLineRunner接口
  • redis的pipeline技術(shù)
  • 先保證每個卡券有一定量的券碼在redis,再用定時任務(wù)定時(根據(jù)業(yè)務(wù)量)去補

到此這篇關(guān)于使用lua+redis解決發(fā)多張券的并發(fā)問題的文章就介紹到這了,更多相關(guān)redis多張券的并發(fā)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • Redis實現(xiàn)分布式Session管理的機制詳解
  • kubernetes環(huán)境部署單節(jié)點redis數(shù)據(jù)庫的方法
  • 銀河麒麟V10sp1服務(wù)器系統(tǒng)安裝redis不能使用的快速解決辦法
  • 使用docker搭建redis主從的方法步驟
  • 基于redis setIfAbsent的使用說明

標簽:南寧 定州 伊春 拉薩 甘南 泰州 畢節(jié) 河源

巨人網(wǎng)絡(luò)通訊聲明:本文標題《使用lua+redis解決發(fā)多張券的并發(fā)問題》,本文關(guān)鍵詞  使用,lua+redis,解決,發(fā),多張,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《使用lua+redis解決發(fā)多張券的并發(fā)問題》相關(guān)的同類信息!
  • 本頁收集關(guān)于使用lua+redis解決發(fā)多張券的并發(fā)問題的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    xx欧美视频| 九九在线观看免费视频| 姑娘第5集在线观看免费好剧| 免费人成黄页网站在线一区二区| 激情五月综合网| 久久狠狠久久综合桃花| 国产成人精品一区二区在线| 自拍偷拍福利视频| 国语精品免费视频| 女人帮男人橹视频播放| 国产午夜精品一区二区三区视频| 国产区一区二区三区| 国产激情在线| 99在线影院| 亚洲人成免费网站| 国产a∨精品一区二区三区仙踪林| 亚洲成人免费影院| 国产福利精品一区| 91麻豆精品久久毛片一级| 91九色精品国产一区二区| 香蕉久久一区二区不卡无毒影院| 国产乱淫a∨片免费视频| 色婷婷综合网| 成人精品视频网站| 一区二区三区播放| 在线播放国产一区| 国产精品久久久久久久免费软件| 奇米影视7777精品一区二区| 国产乱色精品成人免费视频| 国产欧美视频一区| 91精品国产自产在线| www.久久com| 99在线热播精品免费| 亚洲 欧美 视频| 日本特级黄色片| 成人免费视频国产免费观看| 国产精品看片资源| 欧美午夜精品一区二区三区| 亚洲欧美日韩三级| 欧美成人a在线| 欧美老人xxxx18| 小嫩嫩12欧美| av资源站一区| 亚洲成人激情在线| 三级黄色片免费观看| 欧美久久久久久久久久久| 日韩中文综合网| 国产日韩欧美在线播放不卡| 少妇人妻精品一区二区三区| 午夜美女久久久久爽久久| 久久久久久久久99精品大| 麻豆91精品91久久久| 精品久久久久久久久久久久久久久久久| 色av成人天堂桃色av| 99久久精品国产成人一区二区| 国产视频在线免费观看| 国产日韩欧美一区二区三区乱码| 欧美黄色性生活| 91麻豆精品国产综合久久久| 国产亚洲高清一区| 精品国产免费人成电影在线观...| 尤物视频网站在线观看| 91精品国产丝袜白色高跟鞋| 四虎在线免费观看| 18禁一区二区三区| 亚洲 欧美 中文字幕| 一区二区免费在线观看视频| 久草视频免费在线观看| 日韩美女一区二区三区在线观看| 久久婷婷国产综合精品青草| 在线观看污网站| av网站网址在线观看| 农村黄色一级片| 久久91超碰青草在哪里看| 成人动漫一区二区在线| 在线观看视频网站你懂得| 亚洲精品xxxx| 91碰在线视频| 成人免费视频在线观看| 国产专区在线| 精品成人无码久久久久久| 精品伊人久久久久7777人| 尤物在线观看视频| 久久久免费网站| 日韩欧美精品免费| 国产乱码精品一区二区三区忘忧草| 公肉吊粗大爽色翁浪妇视频| 国产在线观看无码免费视频| av电影在线地址| 三年中国中文在线观看免费播放| 日韩在线观看电影完整版高清免费| 色综合97天天综合网| 国产一区二区三区美女秒播| 亚洲午夜精品一区二区三区他趣| 99re免费99re在线视频手机版| 午夜精品久久久久久久四虎美女版| 超碰成人在线免费观看| 亚洲男女av一区二区| 色屁屁影院www国产高清麻豆| 欧美1区2区3区4区| 亚洲黄色小说在线观看| 亚洲人成在线观看一区二区| 日日夜夜天天操| 最新精品国产| kk眼镜猥琐国模调教系列一区二区| 成人羞羞网站| 主播大秀视频在线观看一区二区| 欧美一级三级| 亚洲国产aⅴ精品一区二区| 国产精品国产对白熟妇| 日产精品一线二线三线芒果| 国产夫妻在线视频| 性欧美video另类hd3| 国产精品久久久久久久久久久久| 欧美精品第三页| 国产专区在线| 欧美一级片在线播放| 国产91丝袜美女在线播放| 在线观看国产精品入口| 中文字幕在线第一页| 夜夜嗨aⅴ一区二区三区| 亚洲欧美视频在线播放| 伊人久久久久久久久久久久| 日韩毛片久久久| 黄色永久免费网站| 精品卡一卡卡2卡3网站| 久草资源在线观看| 亚洲精品97久久久babes| 色先锋资源久久综合| 91精品精品| 国产成人av免费观看| 在线看一级片| 色综合色综合| 中文字幕视频三区| 国产精品magnet| 人妻无码一区二区三区| 国产精品videossex撒尿| 中文字幕无码毛片免费看| 免费超碰在线| 日本成人免费| 欧美精品另类| 日韩精品一区二区三区四区视频| 野外性xxxxfreexxxxx欧美| siro系绝美精品系列| 国产永久免费高清在线观看| 国产日韩三区| 亚洲成人免费视| 久久免费一级片| 亚洲桃花岛网站| 日韩精品卡通动漫网站| 青青草免费在线视频观看| 日日躁夜夜躁aaaabbbb| 欧美一区二区三区网站| 欧美伊人久久| 欧美黑人经典片免费观看| 亚洲成av人影院在线观看| 这里视频有精品| 一区二区三区在线影院| 国产又黄又粗又长| 日本一区免费看| 欧美精品在线免费| 国产情侣av在线| 国产美女在线一区二区三区| 国产精品香蕉在线观看| 男人的天堂www| 久久亚洲资源中文字| 亚洲成a人片77777在线播放| 成人黄色片免费| 手机在线看片日韩| 果冻天美麻豆一区二区国产| 五月开心六月丁香综合色啪| 五月天在线免费视频| 99tv成人影院| 一区二区三区电影| 欧亚精品中文字幕| 播放灌醉水嫩大学生国内精品| 亚洲一区二区三区成人在线视频精品| 国产伦精品一区二区免费| 在线观看免费视频国产| 日韩成人xxxx| 殴美一级特黄aaaaaa| 一区二区三区高清在线观看| 全部孕妇毛片丰满孕妇孕| 国产盗摄x88av| 夜夜嗨av禁果av粉嫩avhd| 精品粉嫩超白一线天av| 欧美午夜激情影院| 国产精品视频久久一区| 欧美videossexotv100| 亚洲一区二区三区中文字幕| 国产一区二区三区在线看麻豆| 中文字幕这里只有精品| 3344国产精品免费看| 欧美日韩国产专区| 日韩经典中文字幕| 国产精品不卡一区二区三区在线观看| 国产精品偷乱一区二区三区| 新的色悠悠久久久| 国产露出视频在线观看| 超碰成人免费在线| 亚洲网站在线播放| 日韩一级视频免费观看在线| 九九热精品视频在线| 天天插天天狠天天透| 色系列之999| 佐山爱痴汉视频一区二区三区| 蜜桃精品一区二区| www免费在线观看视频| 欧美成人激情图片网| 日韩极品一区| 九九热精品免费视频| 成人综合网址| 黄网在线观看视频| 中文字幕高清在线观看| 久久久91精品国产一区二区精品| 亚洲成人黄色影院| 国产精品无码AV| 91国内外精品自在线播放| 免费搞黄视频| 亚洲一品av免费观看| 日韩一区免费视频| 欧美日韩成人一区| 欧美午夜大胆人体| 国产成都精品91一区二区三| 色94色欧美一区| 欧美成年人视频| 精品无码av一区二区三区| 中国女人一级一次看片| 欧美金发大战黑人最粗videos| 老司机福利在线观看| 久久久91麻豆精品国产一区| 亚洲精品88| 国产在线拍偷自揄拍精品| 欧美一级视频在线| 成人黄色片免费| 国产白浆在线| 亚洲综合一区二区| 精品在线观看国产| 中文字幕欧美日韩在线| 精品国产青草久久久久96| 黄色成人精品网站| 极品粉嫩小仙女高潮喷水久久| 色se01短视频永久免费| 西西人体44www大胆无码| 日本不卡免费高清视频在线| l8videosex性欧美69| 逼特逼视频在线| 亚洲国产精品午夜在线观看| 国产综合无码一区二区色蜜蜜| 狠狠操一区二区三区| 国产乱淫a∨片免费观看| 亚洲成人三级| 天堂аⅴ在线最新版在线| 久久久久久一二三区| 欧美久久综合网| 亚洲精品成av人片天堂无码| 影音先锋中文字幕在线播放| 国产精品三级在线观看无码| 欧美一区免费观看| 国产精品久久久久蜜臀| 国产又大又黄又粗| 一区二区三区性视频| 香蕉av777xxx色综合一区| 三级在线免费观看| 亚洲网站在线免费观看| 亚洲国产无线乱码在线观看| 欧美一级全黄| 久久99精品视频一区97| 亚洲精品mv在线观看| 亚洲成人av在线播放| 午夜精品一区二区三区四区| 国产精品国产三级国产aⅴ无密码| 欧美三级午夜理伦| 久久久久精彩视频| 97精品电影院| 久久天堂精品| 亚洲永久字幕| 风流老熟女一区二区三区| 国产精品无码人妻一区二区在线| 少妇人妻互换不带套| 天天干狠狠干| 美女视频亚洲色图| 亚洲AV无码一区二区三区少妇| 亚洲视频在线观看一区二区三区| 欧美精品1区2区3区| 亚洲精品视频网上网址在线观看| 国产乱码精品一区二区三区亚洲人| 亚洲 激情 在线| 伊人久久亚洲| 日韩激情在线播放| 国产综合久久久久影院| 成人免费一区二区三区| 精品国产电影一区二区| 免费在线观看av的网站| 自拍视频在线免费观看| 国产一区啦啦啦在线观看| 精品色蜜蜜精品视频在线观看| 中文字幕在线视频网| 午夜精品美女久久久久av福利| 精品国产一区探花在线观看| 99久久精品国产麻豆演员表| 国产乱码精品一区二区三区五月婷| 国产综合色精品一区二区三区| 久久亚洲国产成人亚| 欲香欲色天天天综合和网| 亚洲一级av毛片| 成人精品视频一区二区三区尤物| 在线观看免费视频黄| 日本中文在线一区| 欧美人成在线观看网站高清| 国产精品青草久久久久福利99| av午夜在线观看| 热久久久久久| 色婷婷综合久久久| 嫩草香蕉在线91一二三区| 国产日韩欧美不卡| 国产九色porn网址| 在线观看日韩av电影| 国产精品久久色| av老司机免费在线| 国产精品久久综合| 美女视频黄的免费| 91色p视频在线| 成人高潮视频| 69精品国产久热在线观看| 两根大肉大捧一进一出好爽视频| 蜜桃一级网站.| eeuss影院www在线观看手机|