memcached是一套分布式的高速缓存系统,由LiveJournal的Brad Fitzpatrick开发,但被许多网站使用。这是一套开放源代码软件,以BSD license授权发布。
memcached缺乏认证以及安全管制,这代表应该将memcached服务器放置在防火墙后。
memcached的API使用三十二比特的循环冗余校验(CRC-32)计算键值后,将数据分散在不同的机器上。当表格满了以后,接下来新增的数据会以LRU机制替换掉。由于memcached通常只是当作缓存系统使用,所以使用memcached的应用程序在写回较慢的系统时(像是后端的数据库)需要额外的代码更新memcached内的数据。
memcached作为缓存文件服务,默认是操作系统里面是可以直接yum -y install memcached进行安装的。
/etc/init.d/memcached 是属于系统shell编写的管理脚本,下面这个脚本是python脚本编写出来的memcached管理脚本,和shell编写的脚本实现的效果一样。
代码如下
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
|
#!/usr/bin/python
import sys
import os
from subprocess import Popen,PIPE
class Process( object ):
'''memached rc script'''
args = { 'USER' : 'memcached' ,
'PORT' : 11211 ,
'MAXCONN' : 1024 ,
'CACHESIZE' : 64 ,
'OPTION' :''}
def __init__( self ,name,program,workdir):
self .name = name
self .program = program
self .workdir = workdir
def _init( self ):
'''/var/tmp/memcached'''
if not os.path.exists( self .workdir):
os.mkdir( self .workdir)
os.chdir( self .workdir)
def _pidFile( self ):
'''/var/tmp/memcached/memcached.pid'''
return os.path.join( self .workdir, "%s.pid" % self .name)
def _writePid( self ):
if self .pid:
with open ( self ._pidFile(), 'w' ) as fd:
fd.write( str ( self .pid))
def _readConf( self ,f):
with open (f) as fd:
lines = fd.readlines()
return dict ([ i.strip().replace( '"' ,' ').split(' = ') for i in lines])
def _parseArgs( self ):
conf = self ._readConf( '/etc/sysconfig/memcached' )
if 'USER' in conf:
self .args[ 'USER' ] = conf[ 'USER' ]
if 'PORT' in conf:
self .args[ 'PORT' ] = conf[ 'PORT' ]
if 'MAXCONN' in conf:
self .args[ 'MAXCONN' ] = conf[ 'MAXCONN' ]
if 'CACHESIZE' in conf:
self .args[ 'CACHESIZE' ] = conf[ 'CACHESIZE' ]
options = [ '-u' , self .args[ 'USER' ],
'-p' , self .args[ 'PORT' ],
'-m' , self .args[ 'CACHESIZE' ],
'-c' , self .args[ 'MAXCONN' ]]
os.system( "chown %s %s" % ( self .args[ 'USER' ], self .workdir))
return options
def start( self ):
pid = self ._getPid()
if pid:
print "%s is running..." % self .name
sys.exit()
self ._init()
cmd = [ self .program] + self ._parseArgs() + [ '-d' , '-P' , self ._pidFile()]
p = Popen(cmd,stdout = PIPE)
#self.pid = p.pid
#self._writePid()
print "%s start Sucessful \t\t [OK]" % self .name
def _getPid( self ):
p = Popen([ 'pidof' , self .name],stdout = PIPE)
pid = p.stdout.read().strip()
return pid
def stop( self ):
pid = self ._getPid()
if pid:
os.kill( int (pid), 15 )
if os.path.exists( self ._pidFile()):
os.remove( self ._pidFile())
print "%s is stopped \t\t\t [OK]" % self .name
def restart( self ):
self .stop()
self .start()
def status( self ):
pid = self ._getPid()
if pid:
print "%s is already running" % self .name
else :
print "%s is not running" % self .name
def help ( self ):
print "Usage:%s {start|stop|status|restart|} " % __file__
def main():
name = 'memcached'
prog = '/usr/bin/memcached'
args = '-u nobody -p 11211 -c 1024 -m 64'
wd = '/var/tmp/memcached'
pm = Process(name = name,
program = prog,
workdir = wd)
try :
cmd = sys.argv[ 1 ]
except IndexError,e:
print "Option error"
sys.exit()
if cmd = = 'start' :
pm.start()
elif cmd = = 'stop' :
pm.stop()
elif cmd = = 'restart' :
pm.restart()
elif cmd = = 'status' :
pm.status()
else :
pm. help ()
if __name__ = = '__main__' :
main()
|
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。
原文链接:https://blog.51cto.com/xushaojie/1812466