一、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服务介绍及安装指南的更多相关文章
-
.NET中MemCached使用介绍
阅读目录 1.MemCached是什么? 2.Window中MemCached安装 3.MemCached命令 4.简单示例 MemCached是什么 MemCached是一个*开源,高性能,分布式 ...
-
【转】同一台Windows机器中启动多个Memcached服务
上一篇介绍了Memcached的安装,但是如果手头上只有一台机器,又想做多节点测试咋办? 这就需要在一台机器上启动多个Memcached服务了. 假设Memcached在如下目录:C:\memcach ...
-
Mac linux 安装memcached服务 用法
今天在Mac上安装memcached服务的时候 由于安装memcached之前需要安装libevent依赖包 所以使用brew install libevent 安装过程中报错 Warning: Yo ...
-
项目(九) 企业级Memcached服务应用实践
一, Memcached介绍 1.1 Memcached与常见同类软件对比 (1)Memcached是什么? Memcached是一个开源的,支持高性能,高并发的分布式内存缓存系统,由C语言编写, ...
-
Linux实战教学笔记32:企业级Memcached服务应用实践
一, Memcached介绍 1.1 Memcached与常见同类软件对比 (1)Memcached是什么? Memcached是一个开源的,支持高性能,高并发的分布式内存缓存系统,由C语言编写,总共 ...
-
memcached服务
介绍 它是一套数据缓存系统或软件 用于动态应用系统中缓存数据库的数据,减少数据库的访问压力,达到提升性能的效果,实际应用环境中多用于数据库的cache的应用.它是通过预分配指定的内存空间来存储数据 定 ...
-
Memcached简单介绍
Memcached简单介绍 简介:Memcached是一个*开源的,高性能,分布式内存对象缓存系统.================================================= ...
-
REST服务介绍二
之前一篇文章写过REST服务介绍, 今天再次来自回顾一下. REST是一种架构风格. 首次出现在2000年Roy Fielding的博士论文中,Roy Fielding是 HTTP 规范 ...
-
如何创建多个Memcached服务
在学习Memcached时,为了模拟分布存储,常常需要建多个Memcached服务,如何建呢,只能使用命令行了 运行cmd,输入如下命令 sc create "Memcached Serve ...
随机推荐
-
Linux 将文件夹下的所有文件复制到另一个文件里
如何将文件夹/home/work下的文件复制到/home/temp里面? 使用命令: cp -R /home/work/* /home/temp *表示所有文件 但是/home/work 下的隐藏文件 ...
-
Yocto开发笔记之《Makefile编写》(QQ交流群:519230208)
开了一个交流群,欢迎爱好者和开发者一起交流,转载请注明出处. QQ群:519230208,为避免广告骚扰,申请时请注明 “开发者” 字样 =============================== ...
-
JAXB - Annotations, Type Mapping: XmlSchemaType
The annotation XmlSchemaType defines a mapping between an arbitrary Java type and a simple schema bu ...
-
iOS发展 - 使用您自己的自定义字体
一位同事问我最后一次,XXapp字体如何萌啊? 我也想提出萌哒哒的字体!然后,今天有这blog. 首先,我们正处于iOS发展,苹果给了我们很多的字体,当然,我就不一一列举在这里,英文,小汤表示看不懂啦 ...
-
msf 之 webshell 提权
首先建议一下到网上查查meterpreter的用法在看这篇文章,理解为什么要使用msf来提权(因为msf里边有个meterpreter很强大 ^_^)Metasploit 拥有msfpayload 和 ...
-
跨站请求伪造攻击 CSRF
摘录: 1.跨站点请求伪造 首先,什么是跨站点请求伪造? 跨站点请求伪造-CSRF(Cross Site Request Forgery):是一种网络攻击方式. 说的白话一点就是,别的站点伪造你的请求 ...
-
vue-cli 的项目 切换到Linux环境下遇到问题
之前用vue-cli脚手架在windows上开发的一个项目,现在有换mac的打算,但是换系统的话对代码对环境依赖比较严重. 去年和别的FE并行开发两个人用的都是windows,这样还好,没有什么问题, ...
-
MT7688交叉编译环境配置
在ubuntu下设置MT7688交叉编译环境,用于编译mt7688下使用的程序 1.首先在vmware下安装ubuntu64位,由于交叉编译工具需要64位系统,此次安装的是ubuntu14 2.在ub ...
-
Main Thread Checker 问题解决
1. without a return value https://developer.apple.com/documentation/code_diagnostics/main_thread_che ...
-
多路径multipath配置,udev绑定
多路径multipath配置 以root用户登录 1.查看共享磁盘是否挂载成功 #fdisk -l 2.生成配置文件 #mpathconf --enable 修改配置文件权限 #chmod 644 / ...