memcached服务
介绍
它是一套数据缓存系统或软件
用于动态应用系统中缓存数据库的数据,减少数据库的访问压力,达到提升性能的效果,实际应用环境中多用于数据库的cache的应用。它是通过预分配指定的内存空间来存储数据
定义
它是一个开源的、高性能的,具有分布式内存对象的缓存系统,它一般用来存储经常读取的对象或数据,如同web服务器会将一些内容缓存到客户端本地一样
mysql已经有cache了,为啥还要在它前面加一层memcached?
memcached是一个key/value系统,系统相对于MySQL简单很多,虽然MySQL也有cache,但是数据库的SQL解析会耗费性能,查询慢于memcached,另外MySQL的cache设计得更加复杂,因为要考虑事务,日志,存储引擎等模块,它的性能也没有memcached好
memcached只做一件事情,简单高效,在cache上比MySQL强,这应该容易理解
memcached的应用场景
数据库的前端缓存应用:让它来分担数据的并发压力,当数据更新时,可以使程序通知缓存进行更新
session会话共享的共享存储
memcached应用中的工作流程
它是一种内存缓存,可通过API的方式读取内存中缓存的这些数据,当用户需要读取数据时,会首先访问memcached内存缓存,如果缓存中有数据就直接返回给前端的应用程序,如果没有,再转发给后台端的服务器,这时服务器除了返回数据给用户,还会将数据更新给memcached缓存。
如果实际生产环境中,缓存服务器需要重启(或者断电),那么缓存中的数据将会丢失,那么这时后端的服务器
并发压力会增大,可能会导致后端的服务器也跟着宕机,无法提供服务,
那么这时我们的处理流程是这样的:
首先从负载均衡中将 WEB 应用停掉----->让负载均衡不再转发数据给 WEB---->接着启动缓存服务器-------->
通过程序把数据库的内容初始化到缓存服务器中------->然后将 web 应用启用------->重启数据库服务器
1、设置缓存(expires)和 deflate 压缩,可以将一些内容直接缓存在用户端的本地,下次访问直接调用本地
2、 CDN 缓存静态内容(html、图片等),当用户请求这些内容时直接调用 CDN 的内容,不再请求后端服务器了
3、 Apache 和 Nginx 静态服务器提供静态内容(通过异步消息队列生成静态内容)
4、 PHP 和 JAVA 动态内容
5、数据库的 memcached 缓存服务器
6、数据库服务器(MYSQL)
7、数据库的存储服务器
特性
协议简单:协议使用比较简单,使用基于文本行的协议
基于libevent的事件处理
memcached软件的工作原理
它是一套C/S模式架构的软件,在服务器端启动服务守护进程,可以为memcached服务器指定监听的IP地址、端口号、并发访问连接数以及分配多少内存来处理客户的请求参数
需要被缓存的数据以key/value键值对的形式在服务器端预分配的内存区中,每个被缓存的数据都有唯一的标识key
安装与配置
[root@cairui ~]# cat /etc/redhat-release
CentOS release 6.8 (Final)
[root@cairui ~]# uname -r
2.6.32-696.6.3.el6.x86_64
libevent安装
[root@cairui software]# tar xf libevent-2.1.8-stable.tar.gz
[root@cairui software]# cd libevent-2.1.8-stable
[root@cairui libevent-2.1.8-stable]# ./configure
[root@cairui libevent-2.1.8-stable]# make
[root@cairui libevent-2.1.8-stable]# make install
安装memcached
[root@cairui libevent-2.1.8-stable]# yum install memcached
[root@cairui libevent-2.1.8-stable]# find / -name memcached
/etc/sysconfig/memcached
/etc/rc.d/init.d/memcached
/usr/bin/memcached
/var/run/memcached
配置ld.so.conf路径防止启动时报错
[root@cairui lib]# echo "/usr/local/lib">>/etc/ld.so.conf
[root@cairui lib]# ldconfig
[root@cairui lib]# which memcached
/usr/bin/memcached
memcached参数介绍
[root@cairui lib]# /usr/bin/memcached -h
memcached 1.4.4
-p <num> TCP port number to listen on (default: 11211) #指定监听端口
-U <num> UDP port number to listen on (default: 11211, 0 is off)
-s <file> UNIX socket path to listen on (disables network support)
-a <mask> access mask for UNIX socket, in octal (default: 0700)
-l <ip_addr> interface to listen on (default: INADDR_ANY, all addresses) #指定监听地址
-d run as a daemon #后台模式启动
-r maximize core file limit #最大的文件字符集
-u <username> assume identity of <username> (only when run as root) #指定用户
-m <num> max memory to use for items in megabytes (default: 64 MB) #分配内存区大小
-M return error on memory exhausted (rather than removing items)
-c <num> max simultaneous connections (default: 1024) #最大并发数
-k lock down all paged memory. Note that there is a
limit on how much memory you may lock. Trying to
allocate more than that would fail, so be sure you
set the limit correctly for the user you started
the daemon with (not for -u <username> user;
under sh this is done with 'ulimit -S -l NUM_KB').
-v verbose (print errors/warnings while in event loop)
-vv very verbose (also print client commands/reponses) #以very verbose模式启动
-vvv extremely verbose (also print internal state transitions)
-h print this help and exit
-i print memcached and libevent license
-P <file> save PID in <file>, only used with -d option #设置保存memcached的PID
-f <factor> chunk size growth factor (default: 1.25)
-n <bytes> minimum space allocated for key+value+flags (default: 48)
-L Try to use large memory pages (if available). Increasing
the memory page size could reduce the number of TLB misses
and improve the performance. In order to get large pages
from the OS, memcached will allocate the total item-cache
in one large chunk.
-D <char> Use <char> as the delimiter between key prefixes and IDs.
This is used for per-prefix stats reporting. The default is
":" (colon). If this option is specified, stats collection
is turned on automatically; if not, then it may be turned on
by sending the "stats detail on" command to the server.
-t <num> number of threads to use (default: 4)
-R Maximum number of requests per event, limits the number of
requests process for a given connection to prevent
starvation (default: 20)
-C Disable use of CAS
-b Set the backlog queue limit (default: 1024)
-B Binding protocol - one of ascii, binary, or auto (default)
-I Override the size of each slab page. Adjusts max item size
(default: 1mb, min: 1k, max: 128m)
配置memcached
[root@cairui lib]# memcached -p 11111 -u root -c 1024 -d
[root@cairui lib]# lsof -i:11111
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
memcached 17416 root 26u IPv4 90768 0t0 TCP *:vce (LISTEN)
memcached 17416 root 27u IPv4 90785 0t0 UDP *:vce
[root@cairui lib]# netstat -lntup|grep mem
tcp 0 0 0.0.0.0:11111 0.0.0.0:* LISTEN 17416/memcached
udp 0 0 0.0.0.0:11111 0.0.0.0:* 17416/memcached
写入数据
[root@cairui ~]# printf "set key001 0 0 10\r\ntest123456\r\n"|nc 127.0.0.1 11111 #写入数据
STORED
[root@cairui ~]# printf "get key001\r\n"|nc 127.0.0.1 11111 #查询数据
VALUE key001 0 10
test123456
END
[root@cairui ~]# printf "delete key001\r\n"|nc 127.0.0.1 11111 #删除数据
DELETED
[root@cairui ~]# printf "get key001\r\n"|nc 127.0.0.1 11111
END
正确关闭 memcached 服务
一般启动时最好指定下 PID
[root@LVS-2 ~]# memcached -p 11213 -u root -m 16m -c 1024 -d -P /var/run/11213.pid #指定进程文件
[root@LVS-2 ~]# kill `cat /var/run/11213.pid`
提示:实际生产环境中,要布署 memcached 服务,做为数据缓存,内存的指定大小是根据业务来确定,是不是需要负载均衡?最好同开发一起讨论确定好,还有它还有分客户端与服务端
配置 session 会话共享存储
vi /applicaton/php/lib/php.ini
session.save_path = "/tmp"改成 memcached 服务器地址 tcp ://10.10.10.1:11211
session.save_handler = files(改成 memcached)
将所有的 WEB 服务器(WEB 服务器需要安装客户端)里的 PHP 配置文件改成上述配置,即可完成会话共享存储
memcached监控软件介绍
[root@LB01 vhost]# cd /web/www/
[root@LB01 www]# wget http://www.junopen.com/memadmin/memadmin-1.0.12.tar.gz
[root@LB01 www]# tar zxf memadmin-1.0.12.tar.gz
无需安装,解压即可
memcached服务的更多相关文章
- Memcached服务介绍及安装指南
一.memcached服务介绍 1.为什么需要memcached服务 A:第一种场景 网站访问大多数情况下都需要查询数据库操作,如果网站的流量很大并且大多数的访问会造成数据库高负荷的状况下,由于大部分 ...
- 【转】同一台Windows机器中启动多个Memcached服务
上一篇介绍了Memcached的安装,但是如果手头上只有一台机器,又想做多节点测试咋办? 这就需要在一台机器上启动多个Memcached服务了. 假设Memcached在如下目录:C:\memcach ...
- 如何创建多个Memcached服务
在学习Memcached时,为了模拟分布存储,常常需要建多个Memcached服务,如何建呢,只能使用命令行了 运行cmd,输入如下命令 sc create "Memcached Serve ...
- 修改memcached服务的端口号
windows下修改memcached服务的端口号(默认端口:11211) 如果不是作为服务启动memcached的话,memcached -p 端口号就可以了. 通过修改注册表可以简单实现 运行:r ...
- Linux安装Memcached服务
环境: CentOS 6.4 libevent-1.4.14b-stable memcached-1.4.21 查看是否安装libevent[root@localhost ~]# rpm -qa |g ...
- mac 安装memcached服务
使用homebrew安装,homebrew安装方法http://brew.sh/ 安装memcached服务 brew install memcached 配置开机启动(用brew安装之后下面会提示怎 ...
- 同一台Windows机器中启动多个Memcached服务
同一台Windows机器中启动多个Memcached服务 这就需要在一台机器上启动多个Memcached服务了. 假设Memcached在如下目录:C:\memcached\memcached.exe ...
- 在Linux上安装Memcached服务
下载并安装Memcache服务器端服务器端主要是安装memcache服务器端.下载:http://www.danga.com/memcached/dist/memcached-1.2.2.tar.gz ...
- memcached的安装和linux下memcached服务自启动的配置
关于memcached在windows和linux环境的安装,以及在Linux系统系memcached服务自启动的配置,可以参考我在csdn上下的博客, windows和linux环境下memcach ...
- Mac linux 安装memcached服务 用法
今天在Mac上安装memcached服务的时候 由于安装memcached之前需要安装libevent依赖包 所以使用brew install libevent 安装过程中报错 Warning: Yo ...
随机推荐
- REST介绍与REST在PHP中的应用
当HTTP被发明出来的时候,其实REST就已经存在了.可惜这么多年来,WEB开发模式却越来越背离HTTP的本质,舍本逐末的追求起RPC之类的东西.此时REST重新回到人们的视线里,无疑让大家开始反思过 ...
- 如何了解一个Web项目
一:学会如何读一个JavaWeb项目源代码 步骤:表结构->web.xml->mvc->db->spring ioc->log->代码 1.先了解项目数据库的表结构 ...
- SpringBoot29 登录逻辑、登录状态判断
1 知识点扫盲 浏览器和服务器之间时通过session来确定连接状态的,浏览器第一次请求时服务端会自动生成一个session,并将这个sessionId传回给浏览器,浏览器将这个sessionId存放 ...
- svn: Can't connect to host
关于“svn: Can't connect to host '*.*.*.*': 由于连接方在一段时间后没有正确答复或连接”的解决方法 阿里云服务器环境(PHP+Nginx+MySQL) [原因1 ...
- 解决"authentication token manipulation error"
昨天安装是Ubuntu Server. 配置好了几个软件后就忘记继续了...今天打开,居然忘记了密码...真是的.. 后来还是要改了. 不想重新弄什么的了..百度了下怎么改密码...然后就有一篇 ...
- linux系统中的变量
一.定义 所谓的变量,就是就是利用一个特定的"名称"(name)来存取一段可以变化的"值"(value),简单说来就是“用一个名称储存一个数值”. 二.设定 ...
- Oracle 更新Opatch、打补丁
1.更新Opatch; 2.打补丁; 3.grid 打补丁; 1.更新Opatch(实验版本:oracle:11.2.0.3.0): 默认安装数据库后,在ORACLE_HOME 下会有个OPatch ...
- Java设计模式(2)——工厂方法模式
工厂方法模式同样属于类的创建型模式又被称为多态工厂模式.工厂方法模式的意义是定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类当中.核心工厂类不再负责产品的创建,这样核心类成为一个抽象工厂角色, ...
- HUST软件测试1506班: 第0周作业成绩
说明 本次公布的成绩包含三次作业的结果: 毕博平台课前测试题 第0周作业1:开设博客 第0周作业2:博客阅读和思考 如果同学对作业结果存在异议,可以: 在线平台的第一周在线答疑中创建话题申诉. 或直接 ...
- NET Framework V4.0.30319
http://www.microsoft.com/zh-cn/download/details.aspx?id=17718