中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

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

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

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

前言:

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

冪等模型:

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

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

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

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

設(shè)置過(guò)期時(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    鎖過(guò)期時(shí)間(單位秒)* @param params     參數(shù)(通過(guò)參數(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ù)(通過(guò)參數(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)的邏輯需要 完整+精簡(jiǎn)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

http://www.risenshineclean.com/news/40759.html

相關(guān)文章:

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