一、memcached服务介绍

1、为什么需要memcached服务

A:第一种场景

网站访问大多数情况下都需要查询数据库操作,如果网站的流量很大并且大多数的访问会造成数据库高负荷的状况下,由于大部分数据库请求都是读操作,使用 memcached 能够减轻数据库的压力。

拓扑图:

B:第二种场景

   利用memcached可以缓存session数据,所有前端服务器上session信息都保存在一条专门的session服务器上,避免因服务器故障,导致session信息丢失。

2、不适用memcached的业务场景?

1)缓存对象的大小大于1MB

Memcached本身就不是为了处理庞大的多媒体(large media)和巨大的二进制块(streaming huge blobs)而设计的。

2)key的长度大于250字符

3)虚拟主机不让运行memcached服务

如果应用本身托管在低端的虚拟私有服务器上,像vmware, xen这类虚拟化技术并不适合运行memcached。Memcached需要接管和控制大块的内存,如果memcached管理的内存

4)应用运行在不安全的环境中

Memcached为提供任何安全策略,仅仅通过telnet就可以访问到memcached。如果应用运行在共享的系统上,需要着重考虑安全问题。

5)业务本身需要的是持久化数据

3、memcached是如何工作的

      Memcached缓存服务器,存储了很多<key,value>对的哈希表。通过key,可以存储或查询任意的数据。 前端应用程序(php、tomcat)可以把数据存储在多台memcached上。当查询数据时,客户端首先参考节点列表计算出key的哈希值,进而选中一个节点;前端应用程序(php、tomcat)将请求发送给选中的节点,然后memcached节点通过一个内部的哈希算法,查找真正的数据(item)并返回给前端应用程序(php、tomcat)。从实现的角度看,memcached是一个非阻塞的、基于事件的服务器程序。

(注、如果有多台memcached服务器,如何确保前端数据保存到memcached的A服务端,下次查询缓存的时候,也从A服务端查询缓存,以提高缓存的命中率,推荐前端应用程序采用一次性哈希算法)

4、memcached服务器内存分配机制

Memcached的内存存储引擎,使用slabs来管理内存。内存被分成大小不等的slabs chunks(先分成大小相等的slabs,然后每个slab被分成大小相等chunks,不同slab的chunk大小是不相等的)。chunk的大小依次从一个最小数开始,按某个因子增长,直到达到最大的可能值。如果最小值为400B,最大值是1MB,因子是1.20,各个slab的chunk的大小依次是:slab1 - 400B;slab2 - 480B;slab3 - 576B ...slab中chunk越大,它和前面的slab之间的间隙就越大。因此,最大值越大,内存利用率越低。Memcached必须为每个slab预先分配内存,因此如果设置了较小的因子和较大的因子,会需要为Memcached提供更多的内存。

二、安装memcached服务器

环境需求:

安装Memcached需要libevent库的支持,所以请在安装Memcached之前检查有没有安装libevent。测试环境还需要PHP的支持,本文假设PHP已经安装到/usr/local/php目录下。

memcached下载地址:http://www.memcached.org/files/memcached-1.4.31.tar.gz

libevent下载地址: http://monkey.org/~provos/libevent/

安装配置:

1)安装libevent

[root@web1 ~]#mkdir /opt/tools

[root@web1 ~]#cd /opt/tools

[root@web1 tools]#wget wget http://www.monkey.org/~provos/libevent-2.0.22-stable.tar.gz

[root@web1 tools]# ll
total 836
-rw-r--r--. 1 root root 854987 Sep  6 14:26 libevent-2.0.22-stable.tar.gz
[root@web1 tools]# tar xf libevent-2.0.22-stable.tar.gz
[root@web1 tools]# cd libevent-2.0.22-stable
[root@web1 libevent-2.0.22-stable]# ./configure --prefix=/usr/local/libevent
[root@web1 libevent-2.0.22-stable]# echo $?
0
[root@web1 libevent-2.0.22-stable]# make && make install
[root@web1 libevent-2.0.22-stable]# ls -al /usr/local/libevent/lib |grep libevent
lrwxrwxrwx. 1 root root      21 Sep  6 14:28 libevent-2.0.so.5 -> libevent-2.0.so.5.1.9
-rwxr-xr-x. 1 root root  971807 Sep  6 14:28 libevent-2.0.so.5.1.9
-rw-r--r--. 1 root root 1575352 Sep  6 14:28 libevent.a
lrwxrwxrwx. 1 root root      26 Sep  6 14:28 libevent_core-2.0.so.5 -> libevent_core-2.0.so.5.1.9
-rwxr-xr-x. 1 root root  588228 Sep  6 14:28 libevent_core-2.0.so.5.1.9
-rw-r--r--. 1 root root  981696 Sep  6 14:28 libevent_core.a
-rwxr-xr-x. 1 root root     985 Sep  6 14:28 libevent_core.la
lrwxrwxrwx. 1 root root      26 Sep  6 14:28 libevent_core.so -> libevent_core-2.0.so.5.1.9
lrwxrwxrwx. 1 root root      27 Sep  6 14:28 libevent_extra-2.0.so.5 -> libevent_extra-2.0.so.5.1.9
-rwxr-xr-x. 1 root root  404942 Sep  6 14:28 libevent_extra-2.0.so.5.1.9
-rw-r--r--. 1 root root  593728 Sep  6 14:28 libevent_extra.a
-rwxr-xr-x. 1 root root     992 Sep  6 14:28 libevent_extra.la
lrwxrwxrwx. 1 root root      27 Sep  6 14:28 libevent_extra.so -> libevent_extra-2.0.so.5.1.9
-rwxr-xr-x. 1 root root     950 Sep  6 14:28 libevent.la
lrwxrwxrwx. 1 root root      29 Sep  6 14:28 libevent_openssl-2.0.so.5 -> libevent_openssl-2.0.so.5.1.9
-rwxr-xr-x. 1 root root   94209 Sep  6 14:28 libevent_openssl-2.0.so.5.1.9
-rw-r--r--. 1 root root  131916 Sep  6 14:28 libevent_openssl.a
-rwxr-xr-x. 1 root root    1021 Sep  6 14:28 libevent_openssl.la
lrwxrwxrwx. 1 root root      29 Sep  6 14:28 libevent_openssl.so -> libevent_openssl-2.0.so.5.1.9
lrwxrwxrwx. 1 root root      30 Sep  6 14:28 libevent_pthreads-2.0.so.5 -> libevent_pthreads-2.0.so.5.1.9
-rwxr-xr-x. 1 root root   18446 Sep  6 14:28 libevent_pthreads-2.0.so.5.1.9
-rw-r--r--. 1 root root   18686 Sep  6 14:28 libevent_pthreads.a
-rwxr-xr-x. 1 root root    1013 Sep  6 14:28 libevent_pthreads.la
lrwxrwxrwx. 1 root root      30 Sep  6 14:28 libevent_pthreads.so -> libevent_pthreads-2.0.so.5.1.9
lrwxrwxrwx. 1 root root      21 Sep  6 14:28 libevent.so -> libevent-2.0.so.5.1.9
2)安装memcached服务
[root@web1 tools]# tar xf memcached-1.4.31.tar.gz
[root@web1 tools]# cd memcached-1.4.31
[root@web1 memcached-1.4.31]# ./configure --prefix=/usr/local/memcached --with-libevent=/usr/local/libevent
[root@web1 memcached-1.4.31]# echo $?
0
[root@web1 memcached-1.4.31]# make && make install
3)配置memcached启动脚本

#!/bin/bash

#

# Init file for memcached

#

# chkconfig: - 86 14

# description: Distributed memory caching daemon

#

# processname: memcached

# config: /etc/sysconfig/memcached

. /etc/rc.d/init.d/functions

## Default variables

PORT="11211"

USER="nobody"

MAXCONN="1024"

CACHESIZE="64"

OPTIONS=""

RETVAL=0

prog="/usr/local/memcached/bin/memcached"

desc="Distributed memory caching"

lockfile="/var/lock/subsys/memcached"

start() {

echo -n $"Starting $desc (memcached): "

daemon $prog -d -p $PORT -u $USER -c $MAXCONN -m $CACHESIZE  $OPTIONS

RETVAL=$?

echo

[ $RETVAL -eq 0 ] && touch $lockfile

return $RETVAL

}

stop() {

echo -n $"Shutting down $desc (memcached): "

killproc $prog

RETVAL=$?

echo

[ $RETVAL -eq 0 ] && rm  -f $lockfile

return $RETVAL

}

restart() {

stop

start

}

reload() {

echo -n $"Reloading $desc ($prog): "

killproc $prog -HUP

RETVAL=$?

echo

return $RETVAL

}

case "$1" in

start)

start

;;

stop)

stop

;;

restart)

restart

;;

condrestart)

[ -e $lockfile ] && restart

RETVAL=$?

;;

reload)

reload

;;

status)

status $prog

RETVAL=$?

;;

*)

echo$"Usage: $0 {start|stop|restart|condrestart|status}"

RETVAL=1

esac

4)启动memcached服务

[root@web1 ~]# service memcached start
Starting Distributed memory caching (memcached):           [  OK  ]
[root@web1 ~]# ss -tnl
State      Recv-Q Send-Q                                                    Local Address:Port                                                      Peer Address:Port
LISTEN     0      128                                                           127.0.0.1:9000                                                                 *:*     
LISTEN     0      64                                                                   :::873                                                                 :::*     
LISTEN     0      50                                                                    *:3306                                                                 *:*     
LISTEN     0      128                                                                  :::11211                                                               :::*     
LISTEN     0      128                                                                   *:11211                                                                *:*     
LISTEN     0      128                                                                  :::111                                                                 :::*     
LISTEN     0      128                                                                   *:111                                                                  *:*     
LISTEN     0      128                                                                   *:80                                                                   *:*     
LISTEN     0      128                                                                   *:55252                                                                *:*     
LISTEN     0      128                                                                  :::22                                                                  :::*     
LISTEN     0      128                                                                   *:22                                                                   *:*     
LISTEN     0      128                                                                  :::37846                                                               :::*     
LISTEN     0      128                                                           127.0.0.1:631                                                                  *:*     
LISTEN     0      128                                                                 ::1:631                                                                 :::*     
LISTEN     0      100                                                                 ::1:25                                                                  :::*     
LISTEN     0      100                                                           127.0.0.1:25                                                                   *:*     
5)测试memcached服务安装是否成功
[root@web1 ~]# yum -y install telnet*
[root@web1 ~]# telnet 127.0.0.1 11211
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
stats
STAT pid 13506
STAT uptime 280
STAT time 1473144647
STAT version 1.4.31
STAT libevent 2.0.22-stable
STAT pointer_size 64
STAT rusage_user 0.042993
STAT rusage_system 0.094985
STAT curr_connections 10
STAT total_connections 13
STAT connection_structures 11
STAT reserved_fds 20
STAT cmd_get 0
STAT cmd_set 0
END
set key2 0 60 5 (key2 是键名 0是标记 60是过期时间,单位是秒 3是大小,单位字节)
hello
STORED
get key2 (获取键值)
VALUE key2 0 5
hello
END
stats
STAT pid 13506
STAT uptime 306
STAT time 1473144673
STAT version 1.4.31
STAT libevent 2.0.22-stable
STAT pointer_size 64
STAT rusage_user 0.050992
STAT rusage_system 0.094985
STAT curr_connections 10
STAT total_connections 13
STAT connection_structures 11
STAT reserved_fds 20
STAT cmd_get 1
STAT cmd_set 3
END

三)安装memcached客户端(php连接memcached服务端的程序)

1)安装php的memcached扩展

[root@web1 tools]# wget http://www.lishiming.net/data/attachment/forum/memcache-2.2.3.tgz
--2016-09-06 15:12:11--  http://www.lishiming.net/data/attachment/forum/memcache-2.2.3.tgz
Resolving www.lishiming.net... 182.254.152.182
Connecting to www.lishiming.net|182.254.152.182|:80... connected.
HTTP request sent, awaiting response... 301 Moved Permanently
Location: http://www.apelearn.com/bbs/data/attachment/forum/memcache-2.2.3.tgz [following]
--2016-09-06 15:12:11--  http://www.apelearn.com/bbs/data/attachment/forum/memcache-2.2.3.tgz
Resolving www.apelearn.com... 115.159.51.96
Connecting to www.apelearn.com|115.159.51.96|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 27366 (27K) [application/octet-stream]
Saving to: “memcache-2.2.3.tgz”

100%[=====================================================================================================================================================>] 27,366

2016-09-06 15:12:11 (2.73 MB/s) - “memcache-2.2.3.tgz” saved [27366/27366]

[root@web1 tools]# ll
total 1256
drwxr-xr-x. 10 1000 1000   4096 Sep  6 14:28 libevent-2.0.22-stable
-rw-r--r--.  1 root root 854987 Sep  6 14:26 libevent-2.0.22-stable.tar.gz
-rw-r--r--.  1 root root  27366 Aug 25  2011 memcache-2.2.3.tgz
drwxrwxr-x.  7 1000 1000   4096 Sep  6 14:45 memcached-1.4.31
-rw-r--r--.  1 root root 389502 Aug 20 08:46 memcached-1.4.31.tar.gz
[root@web1 tools]# tar xf memcache-2.2.3.tgz
[root@web1 tools]# cd memcache-2.2.3
[root@web1 memcache-2.2.3]# /usr/local/php/bin/ph
phar        phar.phar   php         php-cgi     php-config  phpize      
[root@web1 memcache-2.2.3]# /usr/local/php/bin/phpize
Configuring for:
PHP Api Version:         20131106
Zend Module Api No:      20131226
Zend Extension Api No:   220131226
[root@web1 memcache-2.2.3]# ./configure  --with-php-config=/usr/local/php/bin/php-config
[root@web1 memcache-2.2.3]#make && make install

安装完后会有这样类似的提示:

installing shared extensions:/usr/local/php/lib/php/extensions/no-debug-non-zts-200906267/

把这个记住,然后修改php.ini,把extension_dir="./"修改为extension_dir=/usr/local/servers/php/lib/php/extensions/no-debug-non-zts-200906267"

并添加一行:extension=memcache.so

2)memcached实现session共享

编辑php.ini[session]添加两行

session.save_handler = memcache

session.save_path = "tcp://10.2.18.194:11211"

Memcached服务介绍及安装指南的更多相关文章

  1. .NET中MemCached使用介绍

    阅读目录 1.MemCached是什么? 2.Window中MemCached安装 3.MemCached命令 4.简单示例 MemCached是什么 MemCached是一个自由开源,高性能,分布式 ...

  2. 【转】同一台Windows机器中启动多个Memcached服务

    上一篇介绍了Memcached的安装,但是如果手头上只有一台机器,又想做多节点测试咋办? 这就需要在一台机器上启动多个Memcached服务了. 假设Memcached在如下目录:C:\memcach ...

  3. Mac linux 安装memcached服务 用法

    今天在Mac上安装memcached服务的时候 由于安装memcached之前需要安装libevent依赖包 所以使用brew install libevent 安装过程中报错 Warning: Yo ...

  4. 项目(九) 企业级Memcached服务应用实践

    一, Memcached介绍   1.1 Memcached与常见同类软件对比 (1)Memcached是什么? Memcached是一个开源的,支持高性能,高并发的分布式内存缓存系统,由C语言编写, ...

  5. Linux实战教学笔记32:企业级Memcached服务应用实践

    一, Memcached介绍 1.1 Memcached与常见同类软件对比 (1)Memcached是什么? Memcached是一个开源的,支持高性能,高并发的分布式内存缓存系统,由C语言编写,总共 ...

  6. memcached服务

    介绍 它是一套数据缓存系统或软件 用于动态应用系统中缓存数据库的数据,减少数据库的访问压力,达到提升性能的效果,实际应用环境中多用于数据库的cache的应用.它是通过预分配指定的内存空间来存储数据 定 ...

  7. Memcached简单介绍

    Memcached简单介绍 简介:Memcached是一个自由开源的,高性能,分布式内存对象缓存系统.================================================= ...

  8. REST服务介绍二

           之前一篇文章写过REST服务介绍, 今天再次来自回顾一下. REST是一种架构风格. 首次出现在2000年Roy Fielding的博士论文中,Roy Fielding是 HTTP 规范 ...

  9. 如何创建多个Memcached服务

    在学习Memcached时,为了模拟分布存储,常常需要建多个Memcached服务,如何建呢,只能使用命令行了 运行cmd,输入如下命令 sc create "Memcached Serve ...

随机推荐

  1. getGLES1ExtensionString: Could not find GLES 1.x config!

    编辑模拟器中  Emulated performance 中不选  auto 和  Hardware - GLES 2.0,选择Software-GLES2.0.解决问题

  2. 使用Linux碎解一

    一.安装VMwarestation. 二.安装Linux系统(这里是CentOS7) 步骤: #==========================part1===================== ...

  3. Altium Designer15 卡在登陆界面解决办法:

    Altium Designer15 卡在登陆界面解决办法: 在我的电脑系统盘中找到下面目录(注:如果看不到,需要取消隐藏文件选项.) C:\Documents and Settings\Adminis ...

  4. 微软软件开发技术二十年回顾-COM、OLE、ActiveX及COM+篇

    本文摘自:http://www.job168.com/info/read_100394.html 微软的许多技术,如OLE.ActiveX.以及DirectX等都是基于COM技术而建立起来的.微软本身 ...

  5. REORG TABLE命令优化数据库性能

    [转]DB2日常维护——REORG TABLE命令优化数据库性能     一个完整的日常维护规范可以帮助 DBA 理顺每天需要的操作,以便更好的监控和维护数据库,保证数据库的正常.安全.高效运行,防止 ...

  6. String和string的区别(C#)

    从位置讲: 1.String是.NET  Framework里面的String,小写的string是C#语言中的string 2.如果把using System;删掉,没有大写的String了,Sys ...

  7. Window Server 2012 R2 没有照片查看器 打开图片都是画板问题怎么解决

    新安装了 Window Server 2012 R2 系统,感觉屌屌的样子,加上开机速度蛮快,心里略爽.结果,打开图片一看,发现竟然是画板,而且还没有照片查看器,顿时泪流满面. 后来我利用了强大的百度 ...

  8. 修复IE9.0下PlaceHolder 属性问题js脚本

    在开发前端系统时候碰到这种兼容问题,以下是个人解决方案,希望能给其他人带来帮助: var JPlaceHolder = { //检测 _check: function () { return 'pla ...

  9. Linux系统编程重要细节记录(持续更新中)

    1.在打印rlim_t值时,需要将其转换为long long并使用%lld printf()修饰符.

  10. 使用odoo价格表[pricelist]对价格进行特别处理,如 .99

    问题1, 销售价格 自动设置为 9.99 问题2, 将销售价格从 10.5 设置为 10.00 这些都可以用 priceList 实现,具体实现如下 首先,启用 priceList 在 价格表项目 有 ...