现在的位置: 首页 > 综合 > 正文

memcached 笔记

2013年09月14日 ⁄ 综合 ⁄ 共 5075字 ⁄ 字号 评论关闭

cmd cls清屏

memcache(内存) 是一个高性能分布式的内存对象缓存系统,通过在内存里维护一个巨大的hash(key=>value)表
分担数据库的压力

hash表
key       value
mystr     "abc"
myarr     Array("aa","ccc");
Object    Object值

就是一个软件(服务软件)c/s软件
mysql             192.168.1.23     3306
apache             www.baidu.com   80
维护内存,是将数据在内存中使用,减少了I/O(从硬盘上的输入输出) 150k 开源
192.121.11.111    11211

memcache 软件   memchached
http     httpd
vsftp    vsftpd

memchached 是以守护程序方式运行于一个或多个服务器中,随时会接收客户端的连接和操作
客户端使用各种语言去编写  php/java/c/c++/perl/python/ruby等

网站上的执行效率主要是在存储数据库的输入输出的地方会降低网站的速度 本身的php会降低的很少
网页静态化 静态化的文件也是和数据库一样 也是存储到硬盘上的 php下次读取也要有文件的操作 也要有I/O的操作
效率不如直接在内存里访问的速度快

安装
基于libevent事件
linux下
安装libevent时
./configure-with-libevent=/usr
make && make install
安装memcached
./configure-with-libevent=/usr
make && make install
                128兆
启动 memcached -d -m 128 -l 192.168.1.111 -p 11211 -u root

停止 kiall cat /tmp/memcached pid
killall memcached

window
D:\Program Files\memcached>memcached.exe -d install
D:\Program Files\memcached>memcached.exe -d uninstall
D:\Program Files\memcached>memcached.exe -d install
D:\Program Files\memcached>memcached.exe -d start
                  默认内存大小64兆
memcached.exe -d -m 50 -l 127.0.0.1 -p 11211 start
端口可以随别改动 端口号一般是0-65535之间的 0-1024一般是系统用的端口号

-p 监听的端口
-l 连接的IP地址, 默认是本机
-d start 启动memcached服务
-d restart 重起memcached服务
-d stop|shutdown 关闭正在运行的memcached服务
-d install 安装memcached服务
-d uninstall 卸载memcached服务
-u 以的身份运行 (仅在以root运行的时候有效)
-m 最大内存使用,单位MB。默认64MB
-M 内存耗尽时返回错误,而不是删除项
-c 最大同时连接数,默认是1024
-f 块大小增长因子,默认是1.25-n 最小分配空间,key+value+flags默认是48
-h 显示帮助

telnet 192.168.1.128 80     apache
telnet 192.168.1.129 21     ftpd
telnet 192.168.1.130 22     ssh   
telnet 192.168.1.131 11211  memcached

在本机
telnet 127.0.0.1 11211
stats :使用stats命令查看当前memcache服务器的状态
STAT pid 376
STAT uptime 2325
STAT time 1321084621
STAT version 1.2.6
STAT pointer_size 32
STAT curr_items 3
STAT total_items 6
STAT bytes 189
STAT curr_connections 2
STAT total_connections 3
STAT connection_structures 3
STAT cmd_get 11
STAT cmd_set 9
STAT get_hits 6
STAT get_misses 5
STAT evictions 0
STAT bytes_read 814
STAT bytes_written 2109
STAT limit_maxbytes 67108864
STAT threads 1

pid     memcache服务器的进程ID
uptime     服务器已经运行的秒数
time     服务器当前的unix时间戳
version     memcache版本
pointer_size     当前操作系统 的指针大小(32位系统一般是32bit)
rusage_user     进程的累计用户时间
rusage_system     进程的累计系统时间
curr_items     服务器当前存储的items数量
total_items     从服务器启动以后存储的items总数量
bytes     当前服务器存储items占用的字节数
curr_connections     当前打开着的连接数
total_connections     从服务器启动以后曾经打开过的连接数
connection_structures     服务器分配的连接构造数
cmd_get     get命令(获取)总请求次数
cmd_set     set命令(保存)总请求次数
get_hits     总命中次数
get_misses     总未命中次数
evictions     为获取空闲内存而删除的items数(分配给memcache的空间用满后需要删除旧的items来得到空间分配给新的items)
bytes_read     总读取字节数(请求字节数)
bytes_written     总发送字节数(结果字节数)
limit_maxbytes     分配给memcache的内存大小(字节)
threads     当前线程数

set,add,replace

<command name> <key> <flags> <exptime> <bytes>\r\n <data block>\r\n

注:\r\n在windows下是Enter键
a) <command name> 可以是”set”, “add”, “replace”。
“set”表示按照相应的<key>存储该数据,没有的时候增加,有的覆盖。
“add”表示按照相应的<key>添加该数据,但是如果该<key>已经存在则会操作失败。
“replace”表示按照相应的<key>替换数据,但是如果该<key>不存在则操作失败。

 有时“add”,“replace”也会存储不上。

b) <key> 客户端需要保存数据的key。

c) <flags> 是一个16位的无符号的整数(以十进制的方式表示)。
该标志将和需要存储的数据一起存储,并在客户端get数据时返回。
客户可以将此标志用做特殊用途,此标志对服务器来说是不透明的。

d) <exptime> 过期的时间。
若为0表示存储的数据永远不过时(但可被服务器算法:LRU 等替换)。
如果非0(unix时间或者距离此时的秒数),当过期后,服务器可以保证用户得不到该数据(以服务器时间为标准)。

e) <bytes> 需要存储的字节数,当用户希望存储空数据时<bytes>可以为0

f) <data block>需要存储的内容,输入完成后,最后客户端需要加上”\r\n”(windows直接点击Enter)作为”命令头”的结束标志。

add my1 1 50000 10
1111111111
STORED
add my2 1 50000 10
2222222222
STORED
add my3 1 50000 10
3333333333
STORED
get my1
VALUE my1 1 10
1111111111
END
get my2
VALUE my2 1 10
2222222222
END
get my3
VALUE my3 1 10
3333333333
END

stats items
STAT items:1:number 3
STAT items:1:age 215
STAT items:1:evicted 0
STAT items:1:outofmemory 0
END
stats cachedump 1 1
ITEM my3 [10 b; 1321133972 s]
END
stats cachedump 1 0  //1表示items的id号 0表示取出所有的
ERROR
stats cachedump 1 2
ITEM my3 [10 b; 1321133972 s]
ITEM my2 [10 b; 1321133953 s]
END
stats cachedump 1 3
ITEM my3 [10 b; 1321133972 s]
ITEM my2 [10 b; 1321133953 s]
ITEM my1 [10 b; 1321133932 s]
END

在php中使用memcached

<?php
$mem = new Memcache;

/*集群  当添加数据的时候 会使用一种它特定的算法 分别向服务器添加一种数据*/
$mem->connect("localhost",11211);//$mem->pconnect("localhost",11211);持久连接
//$mem->addServer("server1",11211);
//$mem->addServer("server2",11211);

$mem->add('myvar',array('fuck','you'),MEMCACHE_COMPRESSED,3600);//mem会自动把数组序列化
//$mem->add('myvar','wwwww',MEMCACHE_COMPRESSED,3600);//add不会覆盖
$mem->set('myvar','wwwww',MEMCACHE_COMPRESSED,3600);
$arr = $mem->get('myvar');

echo '<pre>';
print_r($mem->getStats());
var_dump($mem->getStats());
echo '<pre>';

echo $mem->getVersion();
$mem->delete("mystr");
$mem->flush();
$mem->close();

memcached可以保存任何类型的数据

在php中什么地方使用memcache
一、数据库读出来的数据(select)使用memcache处理
二、在会话控制session中使用

有时候可以用sql语句作为key 用substr(md5(),0,8)处理一下

apache运行的时候消耗的cpu比较多
mem消耗的内存比较大
所以在同一台服务器上可以即装apache有装mem
 
安全  
1.内网

2.设置防火墙

php.ini中的配置:

[Memcache]

; 一个高性能的分布式的内存对象缓存系统,通过在内存里维护一个统一的巨大的hash表,
; 它能够用来存储各种格式的数据,包括图像、视频、文件以及数据库检索的结果等。

; 是否在遇到错误时透明地向其他服务器进行故障转移。
memcache.allow_failover = On

; 接受和发送数据时最多尝试多少个服务器,只在打开memcache.allow_failover时有效。memcache.max_failover_attempts = 20

; 数据将按照此值设定的块大小进行转移。此值越小所需的额外网络传输越多。
; 如果发现无法解释的速度降低,可以尝试将此值增加到32768。
memcache.chunk_size = 8192

; 连接到memcached服务器时使用的默认TCP端口。
memcache.default_port = 11211

; 控制将key映射到server的策略。默认值"standard"表示使用先前版本的老hash策略。
; 设为"consistent"可以允许在连接池中添加/删除服务器时不必重新计算key与server之间的映射关系。
;memcache.hash_strategy = "standard"; 控制将key映射到server的散列函数。默认值"crc32"使用CRC32算法,而"fnv"则表示使用FNV-1a算法。
; FNV-1a比CRC32速度稍低,但是散列效果更好。
;memcache.hash_function = "crc32"

抱歉!评论已关闭.