Sharing of operation classes using Memache as process lock in PHP_PHP tutorial

WBOY
Release: 2016-07-13 09:58:58
Original
749 people have browsed it

Sharing of operation classes for using Memache as process lock in PHP

This article mainly introduces the sharing of operation classes for using Memache as process lock in PHP. This article directly gives the class implementation. Code and application examples, friends in need can refer to it

?

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

//Use Memache as process lock

class lock_processlock{

//key prefix

protected $sLockKeyPre;

//Retry interval

protected $iLockRetryInterval;

//Number of retries

protected $iLockRetryCount;

//Lock expiration time

protected $iLockCacheTimeout;

//Callback function after lock expiration

protected $onLockTimeoutFunc;

//Instance of memache

protected $oMemcache;

//Number of retries after failure to store memcache

protected $iMemcacheRetryCount;

public function __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){

// If the lock is unsuccessful, call the callback function. If there is no callback function, use the

provided in this class.

$onLockTimeoutFunc ='onLockTimeout' ;

}

$this->onLockTimeoutFunc = $onLockTimeoutFunc;

}

/**

Connect memcache server

*/

public function connect() {

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

$this->oMemcache = new Memcache ();

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

}

return $this->oMemcache;

}

/*

Add key to MeMcache

*/

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

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

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

if($bRes){

return true ;

}

// If the lock is unsuccessful, re-lock after sleep

usleep($this->iLockRetryInterval*1000);

}

return false ;

}

/*

Lock

*/

public function lock($sLockID){

$oMemcache = $this->connect();

$sKey = $this->sLockKeyPre . $sLockID;

// If the lock is unsuccessful, you can try a few more times

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

// The value set here can be set at will

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

return true ;

}

// If the lock is unsuccessful, re-lock after sleep

usleep($this->iLockRetryInterval*1000);

}

// If it is still unsuccessful, the locking fails and the callback function is called, which is the operation that needs to be processed after the failure

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

//Call function

call_user_func($this->onLockTimeoutFunc);

}

}

/*

Unlock operation

*/

public function unlock($sLockID){

$oMemcache = $this->connect();

$sKey = $this->sLockKeyPre . $sLockID;

//Delete key

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

}

/**

If the locking is unsuccessful, perform the following operations

*/

public function onLockTimeout(){

echo ("lock timeout");

}

}

//Application Example

$oLock = new lock_processlock();

$lockResource = "test";

// Lock

$oLock->lock($lockResource);

// Unlock

www.bkjia.comtruehttp: //www.bkjia.com/PHPjc/976537.htmlTechArticleOperation class sharing using Memache as a process lock in PHP This article mainly introduces the use of Memache as a process lock in PHP Sharing of operation classes, this article directly gives the class implementation code and application examples...
Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template