一 分布式鎖

2021-08-20 09:24:48 字數 2454 閱讀 4974

drop

table

ifexists

`method_lock`;

create

table

`method_lock` (

`id`

int(11) unsigned not

null auto_increment comment '主鍵',

`method_name`

varchar(64) not

null comment '鎖定的方法名',

`desc`

varchar(255) not

null comment '備註資訊',

`update_time`

timestamp

notnull

default

current_timestamp

onupdate

current_timestamp,

primary

key (`id`),

unique

key`uidx_method_name` (`method_name`) using btree

) engine=innodb auto_increment=3

default charset=utf8 comment='鎖定中的方法';

insert

into method_lock (method_name, desc) values ('methodname', '測試的methodname');

delete

from method_lock where method_name ='methodname';

setnx key val:當且僅當key不存在時,set乙個key為val的字串,返回1;若key存在,則什麼都不做,返回0。
expire key timeout:為key設定乙個超時時間,單位為second,超過這個時間鎖會自動釋放,避免死鎖。
delete

key:刪除key

/**

* 分布式鎖的簡單實現**

* created by liuyang on 2017/4/20.

*/public

class

distributedlock

/*** 加鎖

*@param lockname 鎖的key

*@param acquiretimeout 獲取超時時間

*@param timeout 鎖的超時時間

*@return 鎖標識

*/public string lockwithtimeout(string lockname, long acquiretimeout, long timeout)

// 返回-1代表key沒有設定超時時間,為key設定乙個超時時間

if (conn.ttl(lockkey) == -1)

try catch (interruptedexception e)

}} catch (jedi***ception e) finally

}return retidentifier;

}/**

* 釋放鎖

*@param lockname 鎖的key

*@param identifier 釋放鎖的標識

*@return

*/public

boolean

releaselock(string lockname, string identifier)

retflag = true;

}conn.unwatch();

break;

}} catch (jedi***ception e) finally

}return retflag;

}}

/**

* created by liuyang on 2017/4/20.

*/public

class

service

public

void

seckill()

}

public

class

threada

extends

thread

@override

public

void

run()

}public

class

test

}}

public void seckill()

一 分布式鎖基礎

分布式鎖是控制分布式系統之間同步訪問共享資源的一種方式。在分布式系統中,常常需要協調他們的動作。如果不同的系統或是同乙個系統的不同主機之間共享了乙個或一組資源,那麼訪問這些資源的時候,往往需要互斥來防止彼此干擾來保證一致性,這個時候,便需要使用到分布式鎖。簡單的說在分布式系統下,有效的資源保證一致性...

分布式儲存架構一 分布式儲存概念

分布式儲存系統是由大量廉價普通pc伺服器通過internet互聯,對外作為乙個整體提供服務的系統。它的規模大且成本低。分布式儲存系統的特性 分布式儲存系統挑戰主要在於資料 狀態資訊的持久化,要求在自動遷移 自動容錯 併發讀寫的過程中保證資料的一致性。資料分布均勻 資料一致性 容錯能力 事務與併發控制...

分布式鎖 3 分布式鎖租約續期

redis分布式鎖在加鎖的時候,我們一般都會給乙個鎖的過期時間 ttl 這是為了防止加鎖後client宕機,鎖無法被釋放的問題。但是所有這種姿勢的用法都會面臨同乙個問題,就是沒發保證client的執行時間一定小於鎖的ttl。雖然大多數程式設計師都會樂觀的認為這種情況不可能發生,但是各種異常情況都會導...