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。雖然大多數程式設計師都會樂觀的認為這種情況不可能發生,但是各種異常情況都會導...