国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

redis在日常開發(fā)工作中的常見用法

這篇具有很好參考價(jià)值的文章主要介紹了redis在日常開發(fā)工作中的常見用法。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

redis是一款內(nèi)存型數(shù)據(jù)庫,在開發(fā)工作中經(jīng)常用到,功能強(qiáng)大;

特別開一篇文章用來記錄一下它的常見用法,算是一種總結(jié);

它最主要的特點(diǎn)就是高可用的,速度快,分布式;有人說速度快,能有我本地的全局靜態(tài)變量快?但是在大型的項(xiàng)目中,多個(gè)服務(wù)器部署時(shí),其他服務(wù)實(shí)例節(jié)點(diǎn)如何獲取到你單個(gè)節(jié)點(diǎn)JVM中存儲(chǔ)的這個(gè)全局靜態(tài)變量?數(shù)據(jù)不一致怎么辦?如果只是用來讀取還好,但凡涉及到修改,都建議使用redis管理這部分常用而又準(zhǔn)備的數(shù)據(jù);

日常的工作可以是為某個(gè)業(yè)務(wù)功能開發(fā),也可以是單純的為實(shí)現(xiàn)某一項(xiàng)自認(rèn)為的技術(shù)開發(fā);

我總結(jié)了下一些常用的場景:

1、用于分布式的數(shù)據(jù)鎖

在一個(gè)告警的模塊,我們對單個(gè)對象的告警消息提示要做頻率限制,不然會(huì)導(dǎo)致頻繁推送單個(gè)對象的告警消息;例如:單個(gè)對象在10分鐘內(nèi),最多僅可提示一條消息;代碼片段如下:

//如果最近10分鐘內(nèi)已推送信息,則跳過
if (!redisTemplate.opsForValue().setIfAbsent(PARK_COUPON_ERROR_REDIS_KEY + order.getId(), 1, errmsgInterval, TimeUnit.SECONDS)) {
    continue;
}

在一個(gè)抽獎(jiǎng)秒殺的功能中,我用redis來防止用戶頻繁點(diǎn)擊,超過活動(dòng)限定次數(shù)的抽獎(jiǎng),避免數(shù)據(jù)錯(cuò)亂的情況;

//避免 單用戶頻繁點(diǎn)擊
Boolean setIfAbsent = redisTemplate.opsForValue().setIfAbsent(userKey, LocalDateTime.now().toString(), Duration.ofSeconds(10));
if (ObjectUtil.isNotEmpty(setIfAbsent) && !setIfAbsent) {
    log.info("單用戶加redis失敗 ,耗時(shí){}ms", stopwatch.getTotalTimeMillis());
    throw new ServiceException("請勿頻繁點(diǎn)擊領(lǐng)券");
}

2、用于內(nèi)存存儲(chǔ)高頻調(diào)用數(shù)據(jù)

在redis中存儲(chǔ)高頻數(shù)據(jù)的作用非常大,可以有效地降低程序的處理時(shí)間;但是一般建議將該模塊設(shè)計(jì)巧妙一些,而不是一股腦將所有數(shù)據(jù)全部扔進(jìn)去;redis是內(nèi)存數(shù)據(jù)庫,比通過mysql查詢的效率往往高得多,因此可以提高程序的處理效率,且對于高頻的查詢數(shù)據(jù)放入redis中可以減少mysql的查詢壓力;

例如:秒殺活動(dòng)中的獎(jiǎng)品,打亂一次性存入隊(duì)列,后續(xù)抽獎(jiǎng)按順序取出即可;不用查詢MySQL

//將抽獎(jiǎng)的隨機(jī)性轉(zhuǎn)移到獎(jiǎng)品元素入隊(duì)順序的隨機(jī)性
Collections.shuffle(prizeList);
redisTemplate.opsForList().leftPushAll(LOTTERY_LOTTERY_PRIZE + lotteryId, prizeList);

例如:抽獎(jiǎng)活動(dòng)中,用戶再次點(diǎn)擊,判斷用戶是否還剩余抽獎(jiǎng)的權(quán)限,而不用查詢數(shù)據(jù)庫,對于這種限制一天一次,或者限制一周N次這樣的情況;

List<ChargingUserMarketingCoupon> userCouponList = chargingUserMarketingCouponService.list(new QueryWrapper<ChargingUserMarketingCoupon>().lambda().
eq(ChargingUserMarketingCoupon::getMarketingId, lotteryId).
eq(ChargingUserMarketingCoupon::getUserId, SecureUtil.getUserId()).
ge(ChargingUserMarketingCoupon::getCreateTime, start).
le(ChargingUserMarketingCoupon::getCreateTime, end));
String key = LOTTERY_USER_DELIVERY_NUM + ":" + lotteryId + ":" + DateUtil.format(start, "yyyyMMdd") + ":" + AuthUtil.getUserId();
redissonClient.getAtomicLong(key).set(userCouponList.size());

可以巧妙設(shè)計(jì)KEY,來實(shí)現(xiàn)對單個(gè)對象,某個(gè)日期中抽獎(jiǎng)次數(shù)的存儲(chǔ)和更新;

3、用于實(shí)現(xiàn)一些特殊的場景

例如:抽獎(jiǎng)活動(dòng),使用隊(duì)列一次性將獎(jiǎng)品全部入隊(duì),然后再出隊(duì)列,便不用查詢數(shù)據(jù)庫,且可以方便實(shí)現(xiàn)隊(duì)列出完就識別為抽獎(jiǎng)活動(dòng)結(jié)束的邏輯;

		Object o = null;
		try {
			o = redisTemplate.opsForList().leftPop(LOTTERY_LOTTERY_PRIZE + lottery.getId(), 1, TimeUnit.SECONDS);
		} catch (Exception e) {
			e.printStackTrace();
			throw new ServiceException("當(dāng)前抽獎(jiǎng)人數(shù)過多,請稍后重試!");
		}
		//仍然為NULL,則說明獎(jiǎng)品發(fā)放完畢,leftPop操作沒有元素
		if (ObjectUtils.isEmpty(o)) {
			throw new ServiceException("本次活動(dòng)獎(jiǎng)品已發(fā)放完畢,請關(guān)注下次活動(dòng)!");
		}

這里需要注意,redis中的隊(duì)列元素在出隊(duì)完畢后,key會(huì)自動(dòng)刪除的;此時(shí)可能會(huì)報(bào)錯(cuò),而不是取出NULL數(shù)據(jù),開發(fā)時(shí)踩過坑;

就記錄這么多吧,要搬磚了;

總之一句話,就是合理使用redis的各大數(shù)據(jù)結(jié)構(gòu)和特性,來實(shí)現(xiàn)產(chǎn)品的特殊功能;

開發(fā)過程中要考慮周到,對于redis中數(shù)據(jù)存入后僅讀取的情況還好,對于要頻繁修改的數(shù)據(jù)還要考慮多線程并發(fā)等的問題;注意開發(fā)過程中可能的踩坑;文章來源地址http://www.zghlxwxcb.cn/news/detail-708788.html

到了這里,關(guān)于redis在日常開發(fā)工作中的常見用法的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Android應(yīng)用程序中使用 Gemini Pro AI開發(fā)——2年工作經(jīng)驗(yàn)如何淘汰10年工作經(jīng)驗(yàn)的Android開發(fā)?

    Android應(yīng)用程序中使用 Gemini Pro AI開發(fā)——2年工作經(jīng)驗(yàn)如何淘汰10年工作經(jīng)驗(yàn)的Android開發(fā)?

    上周,谷歌推出了最強(qiáng)大的基礎(chǔ)模型 Gemini 。 Gemini 是多模式的AI——它可以接受文本和圖像輸入。 谷歌為 Android 開發(fā)者引入了一種在設(shè)備上,利用最小模型Gemini Nano的方法。此功能可通過 AICore 在部分設(shè)備上使用,這是一項(xiàng)處理模型管理、運(yùn)行時(shí)、安全功能等的系統(tǒng)服務(wù),可

    2024年01月18日
    瀏覽(28)
  • 從事軟件開發(fā)工作的一些感悟

    從事軟件開發(fā)工作的一些感悟

    隨著科技的飛速發(fā)展,計(jì)算機(jī)領(lǐng)域成為了一個(gè)充滿機(jī)遇和挑戰(zhàn)的領(lǐng)域。對于計(jì)算機(jī)這個(gè)行業(yè),我一直有著濃厚的興趣,這份興趣驅(qū)使我不斷學(xué)習(xí),不斷成長。在這篇文章中,我將分享我的編程經(jīng)歷以及一些建議,希望能夠給那些剛剛踏入編程領(lǐng)域的人一些啟發(fā)。 我的編程之路

    2024年02月08日
    瀏覽(25)
  • vue前端開發(fā)準(zhǔn)備工作ing...

    在項(xiàng)目開始前需要將項(xiàng)目的包管理工具問題解決,這里我使用的包管理工具是yarn。 安裝yarn 在你的vue文件目錄下的終端安裝 npm i -g yarn 創(chuàng)建項(xiàng)目 如果你使用的npm包管理工具就使用如下命令創(chuàng)建項(xiàng)目 如果是yarn: 安裝依賴 在你創(chuàng)建的項(xiàng)目文件下的終端安裝 npm: npm install yarn:

    2024年01月17日
    瀏覽(111)
  • 前端開發(fā)的工作職責(zé)精選【10篇】

    前端開發(fā)的工作職責(zé)精選【10篇】

    ? 前端開發(fā)的工作職責(zé)1 1、使用Div+css并結(jié)合Javascript負(fù)責(zé)產(chǎn)品的前端開發(fā)和頁面制作; 2、熟悉W3C標(biāo)準(zhǔn)和各主流瀏覽器在前端開發(fā)中的差異,能熟練運(yùn)用DIV+CSS,提供針對不同瀏覽器的前端頁面解決方案; 3、負(fù)責(zé)相關(guān)產(chǎn)品的需求以及前端程序的實(shí)現(xiàn),提供合理的前端架構(gòu); 4、與產(chǎn)

    2024年02月13日
    瀏覽(97)
  • mac 10.13.6安裝后開發(fā)準(zhǔn)備工作

    git下載安裝 xcode舊版安裝搜索 brew國內(nèi)源安裝 brew國內(nèi)源安裝地址2 brew更換源 SwitchHosts github hosts nfts磁盤讀寫工具 更新ssl證書 證書下載 brew 更新curl(60) ssl錯(cuò)誤解決: https://site.ip138.com/ vi 命令: i 插入 :wq 保存退出

    2024年02月11日
    瀏覽(24)
  • 前端開發(fā)的工作職責(zé)精選【10篇】(合集)

    前端開發(fā)的工作職責(zé)精選【10篇】(合集)

    ? 前端開發(fā)的工作職責(zé)1 1、使用Div+css并結(jié)合Javascript負(fù)責(zé)產(chǎn)品的前端開發(fā)和頁面制作; 2、熟悉W3C標(biāo)準(zhǔn)和各主流瀏覽器在前端開發(fā)中的差異,能熟練運(yùn)用DIV+CSS,提供針對不同瀏覽器的前端頁面解決方案; 3、負(fù)責(zé)相關(guān)產(chǎn)品的需求以及前端程序的實(shí)現(xiàn),提供合理的前端架構(gòu); 4、與產(chǎn)

    2024年02月16日
    瀏覽(92)
  • JavaWeb課程設(shè)計(jì)項(xiàng)目實(shí)戰(zhàn)(03)——開發(fā)準(zhǔn)備工作

    JavaWeb課程設(shè)計(jì)項(xiàng)目實(shí)戰(zhàn)(03)——開發(fā)準(zhǔn)備工作

    本文原創(chuàng)作者:谷哥的小弟 作者博客地址:http://blog.csdn.net/lfdfhl 在正式進(jìn)入項(xiàng)目開發(fā)之前請先完成以下準(zhǔn)備工作。 請創(chuàng)建數(shù)據(jù)庫和表并完成數(shù)據(jù)初始化工作。 請?jiān)贛ySQL數(shù)據(jù)庫中創(chuàng)建名為studentinformationmanagement的庫。 在本項(xiàng)目中有以下兩張表: 1、用戶表 2、學(xué)生表 用戶表詳情

    2024年02月15日
    瀏覽(24)
  • 前端開發(fā)是做什么的?工作職責(zé)

    前端開發(fā)是做什么的?工作職責(zé)

    想要了解前端從業(yè)者的工作職責(zé),需要從一個(gè)完整網(wǎng)站應(yīng)用產(chǎn)生流程入手,一個(gè)網(wǎng)站應(yīng)用從無到有的過程大致如下 : 1)產(chǎn)品經(jīng)理與甲方反復(fù)溝通交流,逐步確定產(chǎn)品需求完成設(shè)計(jì)草圖; 2)產(chǎn)品經(jīng)理根據(jù)需求和草圖進(jìn)行分析,提交 PRD(需求文檔),并與開發(fā)人員協(xié)商軟件功

    2023年04月10日
    瀏覽(94)
  • 鴻蒙HarmonyOS應(yīng)用開發(fā)能找到工作么?_harmony os 應(yīng)用開發(fā)前景

    鴻蒙HarmonyOS應(yīng)用開發(fā)能找到工作么?_harmony os 應(yīng)用開發(fā)前景

    四、如何學(xué)習(xí)鴻蒙HarmonyOS應(yīng)用開發(fā)技術(shù)? 為了能夠幫助大家快速掌握鴻蒙(Harmony NEXT)應(yīng)用開發(fā)技術(shù)知識。 首先得是開發(fā)語言 ArkTS,這個(gè)尤為重要,然后就是ArkUI聲明式UI開發(fā)、Stage模型、網(wǎng)絡(luò)/數(shù)據(jù)庫管理、分布式應(yīng)用開發(fā)、進(jìn)程間通信與線程間通信技術(shù)、OpenHarmony多媒體技

    2024年04月27日
    瀏覽(32)
  • 開發(fā)一款提高效率工作的命令行程序

    開發(fā)工作中我們常用到\\\"時(shí)間戳和時(shí)間\\\"、\\\"生成guid\\\"、\\\"模擬身份證號\\\",來模擬數(shù)據(jù)校驗(yàn)和顯示;每一次都去找在線工具,確實(shí)可以,但我覺得挺麻煩,于是乎想到了自定義一個(gè)命令行。 目前我已經(jīng)實(shí)現(xiàn)以下功能: 具體怎樣實(shí)現(xiàn)呢? 創(chuàng)建控制臺(tái)應(yīng)用并安裝nuget包 McMaster.Extensio

    2024年02月02日
    瀏覽(25)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包