memcached: udp/11211 , tcp/11211
- 优点:是一款kv存储,能够快速的对数据进行查询,对过期数据进行惰性管理,即检查到过期数据(LRU),将其标记为过期,但不会清理,当下次有新的数据需要缓存这部分空间的时候,直接覆盖掉这部分就可以了,因此不会对过期数据采取动作而消耗性能
- 缺点:kv缓存的数据模式过于单一,不能处理更复杂的数据格式,并且无存储功能,默认没有认证功能,通常都是在系统内部完成数据的存储,但是可以通过sasl完成认证功能
INSTALL
- yum install -y memcached 即可,已收录到centos的base源中了
Use
- telnet 127.0.0.1 11211
- format: command flag timeout datasize
- command:add,append,prepend,delete
eg1:
# telnet 127.0.0.1 11211
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
add 1key 0 300 5
hello
STORED
get 1key
VALUE 1key 0 5
hello
END
append 1key 0 300 2
hi
STORED
get 1key
VALUE 1key 0 7
hellohi
END
prepend 1key 0 30 3
use
STORED
get 1key
VALUE 1key 0 10
usehellohi
END
get 1key
VALUE 1key 0 10
usehellohi
END
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
add 1key 0 300 5
hello
STORED
get 1key
VALUE 1key 0 5
hello
END
append 1key 0 300 2
hi
STORED
get 1key
VALUE 1key 0 7
hellohi
END
prepend 1key 0 30 3
use
STORED
get 1key
VALUE 1key 0 10
usehellohi
END
get 1key
VALUE 1key 0 10
usehellohi
END
add counts 0 300 2
20
STORED
incr counts 2
22
decr counts 1
21
stats items
STAT items:1:number 2
STAT items:1:age 107
STAT items:1:evicted 0
STAT items:1:evicted_nonzero 0
STAT items:1:evicted_time 0
STAT items:1:outofmemory 0
STAT items:1:tailrepairs 0
STAT items:1:reclaimed 2
STAT items:1:expired_unfetched 0
STAT items:1:evicted_unfetched 0
END
20
STORED
incr counts 2
22
decr counts 1
21
stats items
STAT items:1:number 2
STAT items:1:age 107
STAT items:1:evicted 0
STAT items:1:evicted_nonzero 0
STAT items:1:evicted_time 0
STAT items:1:outofmemory 0
STAT items:1:tailrepairs 0
STAT items:1:reclaimed 2
STAT items:1:expired_unfetched 0
STAT items:1:evicted_unfetched 0
END
quit
总结:
存储类命令:set,add,pretent,append,replace
获取类命令:get ,delete,incr/decr
统计类命令:stats ,stats items,stats slabs,stats sizes
清理类命令:flush_all
eg2:
# memcached -f 2 -vv -u root ///-f 指定增长因子,默认为1.25倍,即在指定的缓存空间中,指定每个chunk的增长因子,以避免空间的浪费,或者chunk的种类,两者取一
slab class 1: chunk size 96 perslab 10922
slab class 2: chunk size 192 perslab 5461
slab class 3: chunk size 384 perslab 2730
slab class 4: chunk size 768 perslab 1365
slab class 5: chunk size 1536 perslab 682
slab class 6: chunk size 3072 perslab 341
slab class 7: chunk size 6144 perslab 170
slab class 8: chunk size 12288 perslab 85
slab class 9: chunk size 24576 perslab 42
slab class 10: chunk size 49152 perslab 21
slab class 11: chunk size 98304 perslab 10
slab class 12: chunk size 196608 perslab 5
slab class 13: chunk size 393216 perslab 2
slab class 14: chunk size 1048576 perslab 1
slab class 1: chunk size 96 perslab 10922
slab class 2: chunk size 192 perslab 5461
slab class 3: chunk size 384 perslab 2730
slab class 4: chunk size 768 perslab 1365
slab class 5: chunk size 1536 perslab 682
slab class 6: chunk size 3072 perslab 341
slab class 7: chunk size 6144 perslab 170
slab class 8: chunk size 12288 perslab 85
slab class 9: chunk size 24576 perslab 42
slab class 10: chunk size 49152 perslab 21
slab class 11: chunk size 98304 perslab 10
slab class 12: chunk size 196608 perslab 5
slab class 13: chunk size 393216 perslab 2
slab class 14: chunk size 1048576 perslab 1
LAMP + memcached
yum install -y httpd php php-pecl-memcache memcached
[root@zhuyuan src]# cat
/var/www/html/mem.php
cat /var/www/html/mem.php
<?php
$mem = new Memcache;
$mem-> connect('127.0.0.1',11211) or die ("could not connetc.");
$version = $mem->getVersion();
echo "server's version is: $version ";
$mem->set('putty','sunset nimo',0,300);
?>
cat /var/www/html/mem.php
<?php
$mem = new Memcache;
$mem-> connect('127.0.0.1',11211) or die ("could not connetc.");
$version = $mem->getVersion();
echo "server's version is: $version ";
$mem->set('putty','sunset nimo',0,300);
?>
用浏览器访问地址,http://172.16.52.59/mem.php
]#
telnet 127.0.0.1 11211
telnet 127.0.0.1 11211
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
get putty
VALUE putty 0 11
sunset nimo
telnet 127.0.0.1 11211
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
get putty
VALUE putty 0 11
sunset nimo
分布式缓存:
取膜法:一旦增加新的memcached服务器容易产生雪崩效应
一致性哈希:除了解决取膜法的蝴蝶效应,还解决哈希环偏斜,将同一个节点虚拟映射分散到环上的多处,因此虚拟节点可以解决哈希环偏斜
若想以c语言来连接memcached
yum list all |grep "memcache"
libmemcached就是memcache的c库
yum install -y libmemcached
rpm -ql libmemcached|less
///可以看到提供了很多命令,比如memping检查主机与memcached连接服务是否正常
]# memping --servers=172.16.52.59
///因为本机的ip地址为59,并且连接了memcached,因此无报错
]# memping --servers=172.16.52.60
Failed to ping 172.16.52.60:11211 CONNECTION FAILURE
]# memping --servers=172.16.52.60
Failed to ping 172.16.52.60:11211 CONNECTION FAILURE