標籤:
轉載自 http://oursimplehouse.blog.sohu.com/63588732.html
安裝 memcached:
1、下載memcached-1.2.2.tar.gz
2、tar xvzf memcached-1.2.2.tar.gz
3、./configure;make;make install
安裝python API組件:
1、下載python-memcached-1.39.tar.gz
2、tar xvzf python-memcached-1.39.tar.gz
3、python setup.py install
啟動memcached
memcached -d -m 64 -l 10.1.41.113 -p 11211
啟動的這個memcached為一個後台守護進程模式(-d), 然後緩衝的空間為64M(-m), 監聽(-l)伺服器10.1.41.113的11212號連接埠(-p)
root下要加-u 指定user參數
memcached -u bj1822 -d -m 64 -l 10.1.41.113 -p 11211
memcached -h
memcached 1.2.2
-p <num> TCP port number to listen on (default: 11211)
-U <num> UDP port number to listen on (default: 0, off)
-s <file> unix socket path to listen on (disables network support)
-l <ip_addr> interface to listen on, default is INDRR_ANY
-d run as a daemon
-r maximize core file limit
-u <username> assume identity of <username> (only when run as root)
-m <num> max memory to use for items in megabytes, default is 64 MB
-M return error on memory exhausted (rather than removing items)
-c <num> max simultaneous connections, default is 1024
-k lock down all paged memory
-v verbose (print errors/warnings while in event loop)
-vv very verbose (also print client commands/reponses)
-h print this help and exit
-i print memcached and libevent license
-b run a managed instanced (mnemonic: buckets)
-P <file> save PID in <file>, only used with -d option
-f <factor> chunk size growth factor, default 1.25
-n <bytes> minimum space allocated for key+value+flags, default 48
編寫python程式:
import memcache, time
mc = memcache.Client([‘10.1.41.113:11211‘], debug=0)
串連到10.1.41.113的11211連接埠,也就是memcachd啟動的連接埠。
mc.set("some_key", "Some value")
設定key和value,第三個參數預設為0,也就是資料永不逾時。
如果這樣設定:
mc.set("some_key", "Some value",1)
表示一秒後逾時
過兩秒列印value的話
time.sleep ( 2)
value = mc.get("some_key")
print value
結果就是None了。
刪除
mc.set("another_key", 3) mc.delete("another_key")
自增和自減
mc.set("key", "1") mc.incr("key") mc.decr("key")
關於LRU
LRU是緩衝超過儲存上限時刪掉隊尾也就是最長時間沒人訪問的元素,參數是-M。但設定了-M和到期時效會存在將未失效的元素刪去的風險。所以網上有人改了下代碼,增加對到期時效的判斷:
返回逾時時間的代碼:
if (exptime > REALTIME_MAXDELTA)
return (rel_time_t) (exptime - stats.started);
else {
return (rel_time_t) (exptime + current_time);
}
memcached的失效時間格式有兩種,當大於60*60*24*30也就是30天的秒數時就是到期距1970年1月1日零時的秒數,否則是有效秒數。
刪除cache的代碼:
for (search = tails[id]; tries>0 && search; tries--, search=search->prev) {
if (search->refcount==0) {
item_unlink(search);
break;
}
}
增加條件:
search->exptime && search->exptime <= current_time
這樣就可以保證刪除的都是到期了的元素了。
python 使用memcached