国产亚洲精品福利在线无卡一,国产精久久一区二区三区,亚洲精品无码国模,精品久久久久久无码专区不卡

當(dāng)前位置: 首頁 > news >正文

福建泉州網(wǎng)站建設(shè)網(wǎng)絡(luò)營銷推廣處點(diǎn)

福建泉州網(wǎng)站建設(shè),網(wǎng)絡(luò)營銷推廣處點(diǎn),wordpress 多用戶主題,曲靖網(wǎng)站推廣前言: 相信很多小伙伴對緩存鎖都不陌生,但是簡單的緩存鎖想要用好還是需要一些功力。本文總結(jié)了筆者多年使用緩存所的一些心得,歡迎交流探討~ 冪等模型: 冪等場景一般由查重寫入兩步操作組成,兩步操作組成一個(gè)最小完…

前言:

相信很多小伙伴對緩存鎖都不陌生,但是簡單的緩存鎖想要用好還是需要一些功力。本文總結(jié)了筆者多年使用緩存所的一些心得,歡迎交流探討~

冪等模型:

冪等場景一般由查重+寫入兩步操作組成,兩步操作組成一個(gè)最小完整邏輯,再通過緩存鎖保證原子性

實(shí)現(xiàn):

實(shí)現(xiàn)redis分布式鎖需要注意兩個(gè)關(guān)鍵點(diǎn):保證原子性、設(shè)置過期時(shí)間

保證原子性的目的:是為了保證同一時(shí)間只有一個(gè)請求能獲取到鎖

設(shè)置過期時(shí)間的目的:是為了防止解鎖失敗導(dǎo)致死鎖

public class MethodLock {private static final Logger logger = LoggerFactory.getLogger(MethodLock.class);public static final String KEY_SEPARATOR = ":";public static final String PARAM_SEPARATOR = "_";public static final String KEY_PARAM_SEPARATOR = "#";public static final String SET_SUCCESS_RESULT = "OK";public static final String METHOD_LOCK = "doraemon:method:lock";private static Jedis jedis;private static Jedis getJedis() {if (jedis == null) {jedis = 自行實(shí)現(xiàn);}return jedis;}/*** 獲取鎖** @param methodName 方法名,類名加方法名(例:MethodLock.getLock)* @param timeout    鎖過期時(shí)間(單位秒)* @param params     參數(shù)(通過參數(shù)控制鎖的粒度)* @return*/public static boolean getLock(String methodName, long timeout, String... params) {String method = "getLock|獲取鎖|";try {String key = getKey(methodName, params);String result = getJedis().set(key, methodName, "nx", "ex", timeout <= 0 ? 5 : timeout);if (Objects.equals(SET_SUCCESS_RESULT, result)) {return true;}} catch (Exception e) {logger.error(method + "執(zhí)行失敗,methodName={},timeout={},params={}", methodName, timeout, JSONObject.toJSONString(params), e);}return false;}/*** 釋放鎖** @param methodName 方法名,類名加方法名(例:MethodLock.getLock)* @param params     參數(shù)(通過參數(shù)控制鎖的粒度)* @return*/public static boolean delLock(String methodName, String... params) {String method = "delLock|釋放鎖|";try {String key = getKey(methodName, params);long result = getJedis().del(key);if (result > 0) {return true;}} catch (Exception e) {logger.error(method + "執(zhí)行失敗,methodName={},params={}", methodName, JSONObject.toJSONString(params), e);}return false;}/*** 【私有方法】獲取redis key** @param methodName* @param params* @return*/protected static String getKey(String methodName, String... params) {if (StringUtils.isBlank(methodName)) {return null;}String key = METHOD_LOCK + KEY_SEPARATOR + methodName;if (params != null && params.length > 0) {key += KEY_PARAM_SEPARATOR + Joiner.on(PARAM_SEPARATOR).useForNull("null").join(params);}return key;}

注意事項(xiàng):

1、鎖范圍內(nèi)的邏輯需要 完整+精簡

鎖范圍內(nèi)指的是:獲取鎖和釋放鎖中間的邏輯,只有必須保證原子性的關(guān)鍵的邏輯才能放入到鎖范圍內(nèi),其他的一些不相關(guān)邏輯完全可以放在鎖范圍外處理

完整:加鎖的目的是為了解決并發(fā)問題,所以鎖里面的邏輯要求完整,不完整的邏輯=沒加鎖

比如冪等場景下:一般是 查重+寫入 兩個(gè)操作需要保證原子性,這兩個(gè)操作加起來就是一個(gè)完整邏輯

精簡:精簡的意思是在保證完整的前提下,不要有多余的邏輯,以免鎖占用時(shí)間過長,進(jìn)而影響性能

2、鎖粒度選擇要恰當(dāng)

鎖粒度指的是:鎖對請求條件篩選的粗細(xì)程度,例如用戶購買商品下單時(shí)可以 1、根據(jù)用戶id加鎖,2、也可以根據(jù)用戶id + 商品id加鎖,1和2就是兩種粒度

鎖的粒度太大會導(dǎo)致鎖的范圍過大,可能會影響當(dāng)前邏輯之外的業(yè)務(wù)

鎖的粒度太小會導(dǎo)致鎖的范圍過小,可能會導(dǎo)致鎖失效

3、鎖過期時(shí)間設(shè)置要合理

一般建議過期時(shí)間 = 邏輯執(zhí)行時(shí)間 * 150%

過期時(shí)間太小可能導(dǎo)致在邏輯執(zhí)行完成前,鎖過期失效

過期時(shí)間太大+解鎖失敗,可能導(dǎo)致在鎖過期失效之前重試的請求被拒之門外

4、加鎖在try之前,鎖中的邏輯使用try catch包圍,解鎖在finally里處理

若加鎖操作在try catch中,并發(fā)場景下未獲取鎖的操作會執(zhí)行到finally里將鎖解除,影響正常邏輯

防止邏輯中出現(xiàn)異常,阻斷流暢,導(dǎo)致解鎖操作執(zhí)行不到

5、基于redis的分布式鎖并不100%可靠

在一些特殊情況下,比如redis宕機(jī),數(shù)據(jù)丟失,可能會導(dǎo)致鎖失效

http://aloenet.com.cn/news/40759.html

相關(guān)文章:

  • 南皮網(wǎng)站建設(shè)站長工具域名
  • 中英互譯網(wǎng)站怎么做谷歌瀏覽器下載安裝2022
  • 怎么在導(dǎo)航網(wǎng)站上做推廣seo研究學(xué)院
  • wordpress怎么在上面建幾個(gè)分類seo網(wǎng)絡(luò)營銷外包
  • 企業(yè)網(wǎng)站開發(fā)模板windows優(yōu)化大師靠譜嗎
  • 欽州市建設(shè)工程質(zhì)量監(jiān)督站網(wǎng)站汕頭百度推廣公司
  • 貴港住房城鄉(xiāng)建設(shè)廳網(wǎng)站今日新聞聯(lián)播主要內(nèi)容
  • 西昌網(wǎng)站建設(shè)我想在百度上發(fā)布廣告怎么發(fā)
  • php建設(shè)網(wǎng)站工具百度搜索推廣流程
  • 私人訂制寧波受歡迎全網(wǎng)seo優(yōu)化
  • 網(wǎng)站建設(shè)的前景長沙優(yōu)化網(wǎng)站廠家
  • 建設(shè)網(wǎng)站需要哪些流程百度seo費(fèi)用
  • 制造業(yè)人才網(wǎng)正規(guī)seo排名多少錢
  • 公眾平臺注冊網(wǎng)站怎么優(yōu)化搜索
  • 網(wǎng)站icp備案 年檢2345網(wǎng)址導(dǎo)航中國最好
  • 如何開發(fā)一個(gè)app建設(shè)一個(gè)網(wǎng)站關(guān)鍵詞搜索熱度查詢
  • 廣西搜索推廣東莞網(wǎng)絡(luò)優(yōu)化排名
  • 網(wǎng)站IcP在哪查今日剛剛發(fā)生的國際新聞
  • 哈爾濱網(wǎng)站建設(shè)1元錢2021年經(jīng)典營銷案例
  • 做企業(yè)網(wǎng)站的第一步需要啥紹興seo優(yōu)化
  • 四川seo整站優(yōu)化吧谷歌瀏覽器官方app下載
  • 國外做美食視頻網(wǎng)站谷歌海外推廣怎么做
  • 淄博網(wǎng)站建設(shè)推廣優(yōu)化自媒體賬號申請
  • 網(wǎng)站制作系統(tǒng)長沙官網(wǎng)seo技術(shù)廠家
  • 黃石規(guī)劃建設(shè)局網(wǎng)站一鍵優(yōu)化清理手機(jī)
  • 做一個(gè)網(wǎng)上商城網(wǎng)站建設(shè)費(fèi)用多少錢市場調(diào)研分析報(bào)告范文
  • 網(wǎng)站開發(fā)素材包網(wǎng)站的宣傳與推廣
  • 網(wǎng)站建設(shè)后臺管理怎么進(jìn)入烏魯木齊seo
  • 商城網(wǎng)站模版代碼重慶seo整站優(yōu)化方案范文
  • 開發(fā)動態(tài)網(wǎng)站有哪些技術(shù)百度人工客服電話24小時(shí)