PHP_PHP チュートリアルで Memache をプロセス ロックとして使用した操作クラスの共有

WBOY
リリース: 2016-07-13 09:58:58
オリジナル
748 人が閲覧しました

PHP で Memache をプロセス ロックとして使用する操作クラスの共有

この記事では、PHP で Memache をプロセス ロックとして使用する操作クラスの共有を主に紹介し、クラスの実装コードとアプリケーション例を示します。ダウン

を参照してください。

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

//Memache をプロセス ロックとして使用する

クラスロック_プロセスロック{

// キーのプレフィックス

保護された$sLockKeyPre;

//再試行間隔

保護された$iLockRetryInterval;

//再試行回数

保護された$iLockRetryCount;

//ロックの有効期限

保護された$iLockCacheTimeout;

//ロック期限切れ後のコールバック関数

保護された$onLockTimeoutFunc;

//memache のインスタンス

保護された$oMemcache;

//ストレージ memcache 障害後の再試行回数

保護された$iMemcacheRetryCount;

パブリック関数 __construct ($onLockTimeoutFunc=NULL) {

$aLockConfig = get_config('', 'lock');

$this->sLockKeyPre = self::LOCK_KEY_PRE;

$this->iLockRetryInterval = self::LOCK_RETRY_INTERVAL;

$this->iLockRetryCount =self::LOCK_RETRY_COUNT;

$this->iLockCacheTimeout = self::LOCK_CACHE_TIMEOUT;

$this->iMemcacheRetryCount = self::LOCK_CACHE_TIMEOUT;

if(!$onLockTimeoutFunc){

// ロックが失敗した場合は、コールバック関数を呼び出します。コールバック関数がない場合は、このクラスで提供される

を使用します。

$onLockTimeoutFunc ='onLockTimeout' ;

}

$this->onLockTimeoutFunc = $onLockTimeoutFunc;

}

/**

memcacheサーバーに接続します

*/

パブリック関数 connect() {

if (! isset ( $this->oMemcache )) {

$this->oMemcache = 新しい Memcache ();

$this->oMemcache->connect ( '127.0.0.1', 11211 );

}

$this->oMemcache を返す;

}

/*

MeMcacheにキーを追加

*/

public addMemcache($sKey, $sValue, $iTimeout){

for($i= 0 ; $i<$this->iMemcacheRetryCount){

$bRes = $this->oMemcache->add($sKey, $sValue, $iTimeout);

if($bRes){

true を返す ;

}

// ロックが失敗した場合は、スリープして再ロックします

usleep($this->iLockRetryInterval*1000);

}

false を返す ;

}

/*

ロックされました

*/

公開関数ロック($sLockID){

$oMemcache = $this->connect();

$sKey = $this->sLockKeyPre ;

// ロックが失敗した場合は、さらに数回試すことができます

for($i = 0; $i iLockRetryCount; $i++){

// ここで設定した値は任意に設定可能です

if($this->addMemcache($sKey,'1',$this->iLockCacheTimeout)){

true を返す ;

}

// ロックが失敗した場合は、スリープして再ロックします

usleep($this->iLockRetryInterval*1000);

}

// それでも失敗する場合、ロックは失敗し、失敗後に処理する必要があるコールバック関数が呼び出されます

if(is_callable($this->onLockTimeoutFunc)){

//関数呼び出し

call_user_func($this->onLockTimeoutFunc);

}

}

/*

ロック解除操作

*/

公開関数ロック解除($sLockID){

$oMemcache = $this->connect();

$sKey = $this->sLockKeyPre .

//削除キー

return $this->oMemcache->delete($sKey);

}

/**

ロックに失敗した場合は、以下の操作を行ってください

*/

パブリック関数 onLockTimeout(){

echo (「ロックタイムアウト」);

}

}

//応用例

$oLock = 新しいlock_processlock();

$lockResource = "テスト";

// ロック

$oLock->lock($lockResource);

// ロックを解除する

http://www.bkjia.com/PHPjc/976537.htmlwww.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/976537.html技術記事この記事では、PHP で Memache をプロセス ロックとして使用する操作クラスの共有を主に紹介します。この記事では、クラスの実装コードとアプリケーションの例を直接示します...
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート