Linux服务器安装memcached
博客专区 > webphp 的博客 > 博客详情
Linux服务器安装memcached
webphp 发表于3个月前
Linux服务器安装memcached
  • 发表于 3个月前
  • 阅读 2
  • 收藏 0
  • 点赞 0
  • 评论 0

腾讯云 十分钟定制你的第一个小程序>>>   

Linux服务器端安装memcached,服务器环境为Centos6.5

    1、可以选择编译安装Libevent和Memcache。今天在这里直接使用Centos中的yum源安装

    2、使用系统中的依赖管理工具(yum  apt-get)

    3、安装 yum install memcached

yum install memcached

 

    4、安装过程中会弹出选择是否安装依赖包libevent

    5、安装成功启动memcached

/usr/bin/memcached -d -l 127.0.0.1-p 11211-m 150-u root

 

参数说明 :

 -d:后台守护进程

 -l:是监听的服务器IP地址

 -p:设置Memcache 的监听端口

 -m:分配给memcache使用的内存数量(单位为M)

 -u:是运行Memcache的用呢

 -c:选项是最大运行的并发连接数,默认为1024

 -P:是设置保存Memcached的pid文件

 

    6、查看是否启动成功

        ps -ef | grep memcach //查看是否有进程

    7、在命令链接memcache

//格式 telnet ip port
telnet 127.0.0.011211
Trying127.0.0.1...
Connected to 127.0.0.1.
Escape character is'^]'.
set str 004
baip
STORED
get str
VALUE str 04
END

    8、可以计算缓存命中率

    命中率=get_hits / (get_hits + get_misses)

    get_hits表示命中次数

    get_misses表示未命中次数

    注意:这个命中率是从memcached启动开始所有的请求的综合值,不能反映一个时间段内的情况

    9、stats items  统计各slab class中的item的情况

        执行stats items,可以看到STAT items行,如果memcached存储内容很多,那么这里也会列出很多的STAT items行。

        number 3 表示当前有3个值

        age:反应了当前还在缓存的数据中最久的时间

        evicted:如果一个slab的evicted属性不是0,则说明当前slab出现了提前剔除数据的情况,这个slab可能是你需要注意的。

        evicted_time:如果evicted不为0,则evicited_time就代表最后被剔除的数据时间缓存的时间。

    10、stats slabs  统计slabs的使用情况

        chunk_size    当前slab每个chunk的大小

        chunk_per_page     每个page能够存放的chunk数

        total_pages  分配给当前slab的page总数

        total_chunks 当前slab最多能够存放的chunk数,应该等于chunck_per_page * total_page

        used_chunks 已经被占用的chunks总数

        free_chunks  过期数据空出的chunk里还没有被使用的chunk数

        free_chunks_end     新分配的但是还没有被使用的chunk数

        这个命令的信息量很大,所有属性都很有价值。下面一一解释各属性:

        chunk_size, chunk_per_page

        这两个属性是固定的,但是它反映当前slab存储的数据大小,可以供你分析缓存数据的散列区间,通过调整增长因子可以改变slab的区间分布,从而改变数据散列到的区域。如果大量的230byte到260byte的数据,而刚好一个slab大小是250byte,则250byte到260byte的数据将被落到下一个slab,从而导致大量的空间浪费。

        total_pages

        这个是当前slab总共分配大的page总数,如果没有修改page的默认大小的情况下,这个数值就是当前slab能够缓存的数据的总大小(单位为M)。如果这个slab的剔除非常严重,一定要注意这个slab的page数是不是太少了。

        我上次处理的那个项目因为和另外的一个项目共用的memcache,而且memcache已经运行了很长时间,导致page都已经全部被分配完,而刚好两个项目的缓存数据大小差别很多,导致新项目数据最多的slab 4竟然只有一个page,所以数据缓存不到22s就被替换了,完全失去了缓存的意义。

        针对我遇到的那个情况,解决方案是重新分配page,或者重启memcache服务。但是page reassign方法从1.2.8版已经完全移除了,所以现在没有办法在线情况下重新分配page了。另外一种有些时候是不可以接受的,因为一次缓存服务器的重启将导致所有缓存的数据将重新从DB取出,这个可能造成db的压力瞬间增大。而且有的缓存数据时不入库的,这个时候我们就需要做memcache的导入和导出了。在下篇文章中我会总结下memcache的dump操作。

        total_chunks

        这个的作用和total_pages基本相同,不过这个属性可以更准确的反应实际可以存放的缓存对象总数。

        used_chunks, free_chunks, free_chunks_end

        这三个属性相关度比较高,从数值上来看它们满足:

        total_chunks = used_chunks + free_chunks + free_chunks_end

        used_chunks就是字面的意思,已经使用的chunk数;free_chunks却不是所有的未被使用的chunk数,而是曾经被使用过但是因为过期而被回收的chunk数;free_chunks_end是page中从来没有被使用过的chunk数。

    11、stats cachedump slab_id limit_num

        我们执行stats cachedump 1 0 命令效果如下:

        命令当中的1,即为 memcached telnet命令 - 白杨 - 白杨的博客 中的1,0表示全部取出,n表示取出n行

        这里slab_id为1,是由2中的stats items返回的结果(STAT items后面的数字)决定的;limit_num看起来好像是返回多少条记录,猜的一点不错, 不过0表示显示出所有记录,而n(n>0)就表示显示n条记录,如果n超过该slab下的所有记录,则结果和0返回的结果一致。

        通过stats items、stats cachedump slab_id limit_num配合get命令可以遍历memcached的记录。

    12、其他stats命令

        如stats slabs,stats sizes,stats reset等等使用也比较常见。

 

客户端的安装

    1、下载安装libmemcached客户端

$wget -c https://launchpad.net/libmemcached/1.0/1.0.16/+download/libmemcached-1.0.16.tar.gz
#千万不要下载1.0.17,有bug
$tar -zxvf libmemcached-1.0.16.tar.gz
$cd libmemcached-1.0.16
$./configure --prefix=/usr/local/libmemcached --with-memcached
$make
$make install

 

    2、下载安装memcached

$wget -c http://pecl.php.net/get/memcached-2.2.0b1.tgz
$tar -zxvf memcached-2.2.0b1.tgz
$cd memcached-2.2.0b1
$/usr/local/php/bin/phpize
$./configure
//checking : error :Cannot fond php-config. Please use --with-php-config=PATH
//会提示找不到php-config的配置文件
$./configure --width-php-config=/usr/local/php/bin/php-config
//这里会报出找不 到libmemcached的扩展
$./configure --with-php-config=/usr/local/php/bin/php-config --width-libmemcached-dir=/usr/local/libmemcached
//如果提示disable-memcached-sasl就在配置后加上--disable-memcached-sasl
$./configure --with-php-config=/usr/local/php/bin/php-config --width-libmemcached-dir=/usr/local/libmemcached --disable-memcached-sasl
$make
$make install

 

    成功以后输出

 

/usr/local/php/lib/php/extensions/no-debug-non-zts-20131226/

接下来编辑php.ini文件加入上面输出的扩展

vim /usr/local/php/etc/php.ini
//在文件的最后加上
extension=memcached.so
extension_dir = "/usr/local/php/lib/php/extensions/no-debug-non-zts-20131226"

 

    保存并退出以后,重启php服务

//查看memcached扩展是否生效
php -m | grep memcached

 

最后附上参数启动说明

args des
-p 指定端口号(默认值:11211)
-U <num> UDP 监听端口 (默认值: 11211, 0 时关闭)
-s <file> 用于监听的 UNIX 套接字路径(禁用网络支持)
-a <mask> UNIX 套接字访问掩码,八进制数字(默认值:0700)
-l <ip_addr> 绑定地址 (默认:所有都允许,无论内外网或者本机更换 IP,有安全隐患。若设置为 127.0.0.1 就只能本机访问)
-d 启动一个守护进程
-r 最大化核心文件限制
-u <username> 绑定使用指定用于运行进程 (只有 root 用户可以使用这个参数)
-m 指定最大使用内存大小(默认值:64 MB)
-M 内存耗尽时返回错误,而不是删除项
-t 线程数(默认值:4)
-c 最大同时连接数(默认是 1024)
-m 最大内存使用,单位 MB。(默认值:64 MB)
-k 锁定所有内存页。注意你可以锁定的内存上限。试图分配更多内存会失败的,所以留意启动守护进程时所用的用户可分配的内存上限。(不是前面的 -u 参数;在 sh 下,使用命令"ulimit -S -l NUM_KB"来设置。)
-v 提示信息(在事件循环中打印错误/警告信息)
-vv 详细信息(并且打印客户端命令/响应)
-vvv 超详细信息(并且打印内部状态的变化)
-h 打印这个帮助信息并退出。
-i 打印 memcached 和 libevent 的许可。
-P <file> 将 PID 写入文件,这样可以使得后边进行快速进程终止, 需要与-d 一起使用
-f 块大小增长因子(默认是 1.25)
-n <bytes> 最小分配空间,key+value+flags(默认值:48)
-L 尝试使用大内存页(如果可用的话)。提高内存页尺寸可以减少"页表缓冲(TLB)"丢失次数,提高运行效率
-D <char> 使用 作为前缀和 ID 的分隔符。这个用于按前缀获得状态报告。默认是":"(冒号)。 如果指定了这个参数,则状态收集会自动开启;如果没指定,则需要用命令"stats detail on"来开启。
-t <num> 使用的线程数(默认:4)
-R 每个连接可处理的最大请求数。
-C 禁用 CAS。
-b 设置后台日志队列的长度(默认:1024)
-B 绑定协议 - 可能值:ascii,binary,auto(默认值)
-I 重写每个数据页尺寸。调整数据项最大尺寸。
-S 启用 sasl 安全验证功能,开启后,客户端需要提供用户名密码才能访问 memcached
-o (慎用)逗号分隔的扩展或实验性的选项列表
-(实验) maxconns_fast 立即关闭新的连接,如果超过大并发限制
-hashpower 整数乘法器为哈希表应该是多大。在运行时,如果不是足够大,可以种植。设置在重新启动之前基于"STAT hash_power_level"。
标签: memcached nosql
共有 人打赏支持
粉丝 2
博文 88
码字总数 90487
×
webphp
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: