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