Memcached简介

Memcached是一个自由开源的,高性能,分布式内存对象缓存系统。

Memcached是以LiveJournal旗下Danga Interactive公司的Brad Fitzpatric为首开发的一款软件。现在已成为mixi、hatena、Facebook、Vox、LiveJournal等众多服务中提高Web应用扩展性的重要因素。

Memcached是一种基于内存的key-value存储,用来存储小块的任意数据(字符串、对象)。这些数据可以是数据库调用、API调用或者是页面渲染的结果。

Memcached简洁而强大。它的简洁设计便于快速开发,减轻开发难度,解决了大数据量缓存的很多问题。它的API兼容大部分流行的开发语言。

本质上,它是一个简洁的key-value存储系统。

一般的使用目的是,通过缓存数据库查询结果,减少数据库访问次数,以提高动态Web应用的速度、提高可扩展性。

特征

memcached作为高速运行的分布式缓存服务器,具有以下的特点。

  • 协议简单
  • 基于libevent的事件处理
  • 内置内存存储方式
  • memcached不互相通信的分布式

Memcached在企业中架构应用的位置

第一个作为数据库的内容缓存
第二个作为集群节点会话共享
那么架构上讲可以分为三层前端用户层 中间应用程序层,后面就是数据存储层,那么当数据通过互联网到达机房之后会先找负载均衡器,负载均衡器请求web服务器,假如是浏览一篇博文,那么web服务器先找内存缓存,如果内存缓存没有,那么会把请求转发到数据库,从数据库读完之后,再把数据放到内存一份,第二个用户再访问的时候就先访问缓存,就不会找数据库了,那么数据库的压力就降下来了,这就是内存缓存的作用。
CDN服务 ,就是一个分布式缓存系统,当用户请求图片的时候会先找CDN,CDN有就直接给用户访问了,大幅度的减轻网站压力,同时节省带宽。
缓存带来的问题:
客户发一张帖子到数据库里边也缓存到缓存memcached里边,别人访问就访问缓存了,发帖子的人发现我这个内容需要修改下,是先更新数据库,
不是先改缓存,其它用户访问就访问到缓存了,还是老的数据,有一个数据一致性的问题,所以程序员们这样设计,它在更新数据库的时候,它同时发送一个请求告诉memcached,对应的帖子过期了,那么memcached会把过期的数据删除,,会有这么一个机制,那么对于前端包括CDN,我们在更新图片的时候,告诉CND把旧的删除,但是对于图片来讲很少有更改的操作,它的更改是更改文件名操作上传,对于CDN来讲是不同的数据。

session保持不管是nginx还是apache只要用php,默认情况下会放在/tmp目录下,是在php.ini中指定的。
对于不同的服务器来讲,每个web服务器都放在自己的tmp下,早期会把会话保持到tmpfs文件系统里。
那么在php.ini里边可以用IP加端口指定会话保持

在企业工作当中memcached缓存重启数据全丢,假如数据丢了,数据库压力暴大
假如缓存每秒8000并发,数据库并发1000,一下压到数据库,数据库压力大就会down机,数据库刚要启又down
这种情况叫雪崩效应,这种情况下通常把负载均衡下的web用防火墙禁止对外访问。或者停掉
之后把memcached开启来,通过程序初始化把memcached缓存好,然后慢慢的把web打开。

lvs或者haproxy 做cache的负载均衡
假设缓存把数据a.jpg存储在cache1上,当用户访问a.JPG,如果访问
到cache2上去了,那cache2上没有就找数据库了,那数据库压力不就大嘛,
那缓存有没有了,有,只不过在cache1上,如果缓存把数据b.jpg存储在cache2上
那用户访问被请求到cache1上,那cache1上没有,那也只能找数据库,那这就是一个问题
那在前边负载算法就要指定url算法或者hash了,只要是这张图片只要是这个路径就存储到指定地点。
web集群是每个服务器内容一样的,不一样的放在后端NFS里边了 ,所以web集群可以wrr算法。

memcached应用安装

1. memcached服务端安装
tar xf libevent-1.4.13-stable.tar.gz
cd libevent-1.4.13-stable
./configure
make
make install tar xf memcached-1.4.13.tar.gz
cd memcached-1.4.13
./configure
make
make install
cd ..
[root@TCS tools]# echo "/usr/local/lib" >> /etc/ld.so.conf #配置ld.so.conf路径防止启动出错
[root@TCS tools]# ldconfig [root@TCS tools]# which memcached
/usr/local/bin/memcached
[root@TCS tools]# /usr/local/bin/memcached -h #memcached相关参数
2.memcached启动
[root@TCS tools]# memcached -p 11211 -u root -m 16m -c 10240 -d # -p指定端口,-u 用户,-m 内存大小,-c 最大并发连接数,-d 后台运行
#其它参数:
-P 设置保持Memcache的pid文件 -vv 以very vrebose模式启动,调试信息和错误输出到控制台
[root@TCS tools]# lsof -i :11211
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
memcached 13875 root 26u IPv4 20953 0t0 TCP *:memcache (LISTEN)
memcached 13875 root 27u IPv6 20954 0t0 TCP *:memcache (LISTEN)
memcached 13875 root 28u IPv4 20957 0t0 UDP *:memcache
memcached 13875 root 29u IPv6 20958 0t0 UDP *:memcache #memcached的多实例
[root@TCS tools]# memcached -p 11212 -u root -m 16m -c 10240 -d
[root@TCS tools]# netstat -lnt|grep 1121
tcp 0 0 0.0.0.0:11211 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:11212 0.0.0.0:* LISTEN
tcp 0 0 :::11211 :::* LISTEN
tcp 0 0 :::11212 :::* LISTEN 3. 开机自启动
放到/etc/rc.local中
memcached -p 11212 -u root -m 16m -c 10240 -d 4.写入数据检查结果
a.通过nc写入
[root@TCS tools]# printf "set key008 0 0 10\r\noldboy0987\r\n"|nc 127.0.0.1 11211 #增加 ,命令的字节是10,后面就要10个字符,否则添加不成功。
STORED
[root@TCS tools]# printf "get key008\r\n"|nc 127.0.0.1 11211 #查询
VALUE key008 0 10
oldboy0987
END
[root@TCS tools]# printf "delete key008\r\n"|nc 127.0.0.1 11211 #删除
DELETED
[root@TCS tools]# printf "get key008\r\n"|nc 127.0.0.1 11211 #查询
END b.通过telnet写数据
[root@TCS tools]# telnet 192.168.179.134 11211
Trying 192.168.179.134...
Connected to 192.168.179.134.
Escape character is '^]'.
set key 0 0 10 #写数据
zhousq
STORED
get key #查询
VALUE key 0 10
zhousq
END delete key #删除
DELETED get key
END #CTRL+] 退回,然后qujit退出 #建议用第一种,有时telnet会很慢 通过stats可以查看写入数据的状态信息
[root@TCS tools]# printf "stats\r\n"|nc 127.0.0.1 11211
STAT pid 14254
STAT uptime 312
STAT time 1461179190
STAT version 1.4.13
STAT libevent 1.4.13-stable
STAT pointer_size 64
STAT rusage_user 0.000000
STAT rusage_system 0.015997
STAT curr_connections 10
STAT total_connections 14
STAT connection_structures 11
STAT reserved_fds 20
STAT cmd_get 1
STAT cmd_set 0
STAT cmd_flush 0
STAT cmd_touch 0
STAT get_hits 0 #查询 命中的数量
STAT get_misses 1 #丢失数量
STAT delete_misses 0
STAT delete_hits 0
STAT incr_misses 0
STAT incr_hits 0
STAT decr_misses 0
STAT decr_hits 0
STAT cas_misses 0
STAT cas_hits 0
STAT cas_badval 0
STAT touch_hits 0
STAT touch_misses 0
STAT auth_cmds 0
STAT auth_errors 0
STAT bytes_read 31
STAT bytes_written 1039
STAT limit_maxbytes 16777216 #内存大小
STAT accepting_conns 1
STAT listen_disabled_num 0
STAT threads 4
STAT conn_yields 0
STAT hash_power_level 16
STAT hash_bytes 524288
STAT hash_is_expanding 0
STAT expired_unfetched 0
STAT evicted_unfetched 0
STAT bytes 0
STAT curr_items 0 #往数据库插一条数据就有一条记录
STAT total_items 0 #当前没有记录,因为删除了
STAT evictions 0
STAT reclaimed 0
END 5. 重启数据丢失
(通过简单shell可以让memcache变为持久化存储)
6. memcache客户端安装
tar xf memcache-2.2.5.tgz
cd memcache-2.2.5
/application/php/bin/phpize
./configure --with-php-config=/application/php/bin/php-config
make
make install
ls /application/php5.3.27/lib/php/extensions/no-debug-zts-20090626/ 7. 测试
[root@TCS www]# cat test.php
<?php
$mem = new Memcache;
$mem->connect("192.168.179.134", 11211) or die("Could not connect");
$version = $mem->getVersion();
echo "Server's version: ".$version."<br/>\n";
$mem->set('testkey', 'Hello World', 0, 600) or die("Failed to save data at the memcached server");
echo "Store data in the cache (data will expire in 600 seconds)<br/>\n";
$get_result = $mem->get('testkey');
echo "$get_result is from memcached server.";
?>
#浏览器访问 http://192.168.179.134/test.php 返回结果如下。说明已经测试OK
Server's version: 1.4.13
Store data in the cache (data will expire in 600 seconds)
Hello World is from memcached server. 8.session共享会话存储.在php.ini文件中改为相对应选项
session.save_handler memcache
session.save_path tcp://192.168.179.134:11211
把所有web服务器的php.ini改成一样的地址,这样就保持了会话保持
集群架构多服务器同步session的多种方式:
1.lb层可以做会话保持:例如:
lvs -p
nginx ip_hash
hapoxy cookie insert
PHP JAVA都可以用
2.软件层,可以做session复制,例如:
tomcat ,resin,couchbase
3,session共享,例如:
memcached或者其它工具的nosql工具,php常用这个。
4.高并发场景:例如门户网站用cookies或cookies配合session把用户级会话信息缓存在用户本地; 9.memcache 图形管理工具
[root@TCS tools]# tar xf memadmin-1.0.12.tar.gz
[root@TCS tools]# mv memadmin /var/html/www/
[root@TCS tools]# /application/apache/bin/apachectl graceful
http://192.168.179.134/memadmin/ 默认用户密码 admin:admin 10.内存管理机制的调优
指定1.25组间差距比因子为2时小得多,更适合缓存几百字节的记录。
[root@TCS tools]# memcached -m 512m -d -u root -c 8192 -f 2 -vv
[root@TCS tools]# slab class 1: chunk size 96 perslab 10922
slab class 2: chunk size 192 perslab 5461
slab class 3: chunk size 384 perslab 2730
slab class 4: chunk size 768 perslab 1365
slab class 5: chunk size 1536 perslab 682
slab class 6: chunk size 3072 perslab 341
slab class 7: chunk size 6144 perslab 170 [root@TCS tools]# memcached -m 512m -d -u root -c 8192 -f 1.25 -vv
[root@TCS tools]# slab class 1: chunk size 96 perslab 10922
slab class 2: chunk size 120 perslab 8738
slab class 3: chunk size 152 perslab 6898
slab class 4: chunk size 192 perslab 5461
slab class 5: chunk size 240 perslab 4369
slab class 6: chunk size 304 perslab 3449 11.memcachedb和TTSERVER持久化存储,兼容memcached协议。
12.memcached监控 check_me_sh
#!/bin/sh
[ $# -ne 2 ]&&{
echo "$0 ip port"
exit
}
export oldboy=key
export wwwServerIp=$1
export wwwServerPort=$2
cmd="nc $wwwServerIp $wwwServerPort"
printf "delete $oldboy\r\n" | $cmd >/dev/null 2>&1
sleep 1
printf "set $oldboy 0 0 6\r\noldboy\r\n"|$cmd >/dev/null 2>&1
if [ `printf "get $oldboy\r\n"|$cmd|grep oldboy|wc -l` -eq 1 ]
then
echo "mc is alive."
exit 0
else
echo "mc is dead."
exit 2
fi

Memcached在企业中的应用的更多相关文章

  1. Flume_企业中日志处理

    企业中的日志存放_1 201611/20161112.log.tmp 第二天文件变为20161112.log与20161113.log.tmp 拷贝一份flume-conf.properties.te ...

  2. Memcached在.Net中的基本操作

    Memcached在.Net中的基本操作 一.Memcached ClientLib For .Net 首先,不得不说,许多语言都实现了连接Memcached的客户端,其中以Perl.PHP为主. 仅 ...

  3. memcached在项目中的应用

    这一篇将以介绍一个memcached在项目中的应用.假设我们有一个web应用,里面有商品信息,文章信息,评论信息,其他信息,我们希望对其做缓存,那么我们在ServiceImpl层就不在调用DAOmpl ...

  4. 东正王增涛浅析OA信息化整合平台系统在企业中的应用价值

    王增涛说OA信息化整合平台系统作为企业管理中最基础的管理软件,已在企业成长道路上存在多年,它的应用开启了智能移动办公的先河,也让企业的办公流程管理更加的便捷.高效.流畅.省时.省力,它的使用不但让企业 ...

  5. 详解BOM用途分类及在汽车企业中的应用

    摘要:在整车企业中,信息系统的BOM是联系CAD.CAPP.PDM和ERP的纽带,按照用途划分产品要经过产品设计,工程设计.工艺制造设计.生产制造4个阶段,相应的在这4个过程中分别产生了名称十分相似但 ...

  6. memcached在Java中的应用以及magent的配置-每天进步一点点

    memcached在Java中的应用: http://nhy520.iteye.com/blog/1775893 magent配置memcached分布式集群的应用: http://www.jians ...

  7. Key/Value之王Memcached初探:二、Memcached在.Net中的基本操作

    一.Memcached ClientLib For .Net 首先,不得不说,许多语言都实现了连接Memcached的客户端,其中以Perl.PHP为主. 仅仅memcached网站上列出的语言就有: ...

  8. 【转】 Key/Value之王Memcached初探:二、Memcached在.Net中的基本操作

    一.Memcached ClientLib For .Net 首先,不得不说,许多语言都实现了连接Memcached的客户端,其中以Perl.PHP为主. 仅仅memcached网站上列出的语言就有: ...

  9. 【转载】Memcached在.Net中的基本操作

    一.Memcached ClientLib For .Net 首先,不得不说,许多语言都实现了连接Memcached的客户端,其中以Perl.PHP为主. 仅仅memcached网站上列出的语言就有: ...

随机推荐

  1. RecyclerView 的简单使用

    自从 Android 5.0 之后,google 推出了一个 RecyclerView 控件,他是 support-v7 包中的新组件,是一个强大的滑动组件,与经典的 ListView 相比,同样拥有 ...

  2. hello world: 我的博客写作思路

    1. 本人计算机专业,研究生刚毕业,即将入职金融科技领域,决定借博客园平台写自己的博客,原因如下: 从小白到大白,离不开各大学习平台和技术博客的指导和分享,是时候回馈了. 借此机会整理自己从本科.研究 ...

  3. Java 使用InputStream笔记

    当我们要从网络下载资源时,使用类似如下方法来获取InputStream实例: URLConnection connection = new URL("http://www.XXXX.XXX& ...

  4. docker下安装centos,并在其上搭建lnmp环境

    一.安装CentOs容器 1.进入docker下载CentOs,这里我使用的CentOs6.8 docker pull centos:6.8 2.创建容器 sudo docker run --priv ...

  5. 关于AUI框架自学心得

    2018年8月25日今天星期六,这段时间接触到移动端布局框架AUI,借着早上一个小时时间大致看了一下开发文档(后面统称文档),对AUI一点认识. 目前2.0版本为最新版,这个版本和1.0比较升级很多. ...

  6. Git常用命令(二)

    git clone + URL 获取该项目源代码 $ git log 回顾提交历史 $ git log -p -(数字) 用来显示每次提交的内容差异+(数字)表示看最近几条 $ git log --s ...

  7. hacknos-player靶机渗透

    靶机下载地址https://www.vulnhub.com/entry/hacknos-player,459/ 网络配置 该靶机可能会存在无法自动分配IP的情况,所以无法扫描到的情况下需要手动配置获取 ...

  8. django-filter的基本使用

    django-filter 查询 创建model和视图 from django.db import models # Create your models here. class Student(mo ...

  9. Deep Dream模型与实现

    Deep Dream是谷歌公司在2015年公布的一项有趣的技术.在训练好的卷积神经网络中,只需要设定几个参数,就可以通过这项技术生成一张图像. 本文章的代码和图片都放在我的github上,想实现本文代 ...

  10. word多级列表应用