memcached

memcached是高性能的分布式缓存服务器
用来集中缓存数据库查询结果,减少数据库访问次数
提高动态web应用的响应速度

传统web架构的问题
许多web应用都将数据保存在RDBMS中,应用从服务器中读取数据
并在浏览器中显示
随着数据量的增大,访问的集中,就会出现RDBMS的负担加重
数据库响应恶化,网站显示延迟等重大影响

数据存储位置对比:
性能
cpu缓存》内存》磁盘》数据库

价格
cpu缓存》内存》磁盘》数据库

memcached支持多平台
linux
freebsd
solaris
mac os x
windows

memcached特征
协议简单,基于libevent的事件处理,内置内存存储方式

内置管理机制:
传统内存分配机制
使用完通过分配的内存后回收内存,这种方式容易产生内存碎片
并降低操作系统对内存的管理效率
slab allocation机制:
他按照预先的大小,将分配的内存分割成特定长度的内存块(chunk)
再把尺寸相同的内存块分成组(chunk集合),这些内存块不会释放,可重复利用
slab allocation的主要术语
分配给slab的内存空间默认是1mb,分配之后根据slab定义的大小切分为chunk
chunks是用于缓存记录的内存空间
slab class是特定大小的chunk组
memcached使用名为least recently used(lru)机制来分配空间
删除 "最近最少使用"的记录的机制
当memcached的内存空间不足时,从最近未被使用的记录中搜索
并将其空间分配给新的记录

——————————————————————————————————————————————————————————————
部署memcached
官方网站:http://memcached.org/

安装事件库libevent
[root@web2 ~]# tar -xf libevent-2.0.21-stable.tar.gz
[root@web2 libevent-2.0.21-stable]# ./configure
[root@web2 libevent-2.0.21-stable]# make
[root@web2 libevent-2.0.21-stable]# make install
[root@web2 ~]# echo "/usr/local/lib" > /etc/ld.so.conf.d/libevent.conf(链接库)
[root@web2 ~]# ldconfig(刷新链接)

安装memcached
[root@web2 ~]# tar -xf memcached-1.4.24.tar.gz
[root@web2 memcached-1.4.24]# ./configure
[root@web2 memcached-1.4.24]# make
[root@web2 memcached-1.4.24]# make install
[root@web2 ~]# /usr/local/bin/memcached -h(查看帮助)

启动memcached
[root@web2 ~]# memcached -u root -m 64M -d
常用选项
-u:Memcache程序运行时使用的用户身份必须是root用户
-p:设置Memcache监听的端口,默认为11211
-l:监听的服务器IP地址
-c:服务的最大连接数
-vvv:超详细信息
-n:chunk size的最小空间是多少,单位为字节
-f:chunk size大小增长的倍数,默认1.25倍
-m:指定使用本机多少物理内存存数据
-d:在后台启动

查看memcached的内部状态
[root@web2 ~]# telnet 127.0.0.1 11211(端口11211)
set key 0 200 3(key存了abc,0代表存的时候不压缩 ,200表示存200秒 3表示存三个字符)
abc(key的值等于abc)
get key(get查询key的值)
VALUE key 0 3
abc
ctrl + [键 +]键,然后输入quit退出

memcached常用指令
add name 0 180 10:添加新数据
set name 0 180 10:添加或替换变量
replace name 0 180 10:替换数据
get name:读取变量
append name 0 180 10:向变量中追加数据
delete name:删除变量
stats:查看状态
flush_all:清空所有

实例:
add hydra 0 100 10(添加hydra)
1234567890
STORED
get hydra(查询)
VALUE hydra 0 10
1234567890
END
append hydra 0 100 10(添加)
hail hydra
STORED
get hydra(查询)
VALUE hydra 0 20
1234567890hail hydra
END

——————————————————————————————————————————————————————————

实验php连接memcached

准备工作

配置nginx
[root@web2 ]# vim /usr/local/nginx/conf/nginx.conf
location ~ \.php$ {
root html;
fastcgi_pass 127.0.0.1:9000;(遇到动态页面转发到9000端口)
fastcgi_index index.php;
include fastcgi.conf;(parm改为conf)
}
[root@web2 ~]# netstat -nutlp | grep 80(查看http服务端口)
[root@web2 ~]# netstat -nutlp | grep 9000(查看php端口)

php本身不支持链接memcached,为php添加模块,so库
[root@web2 ]# tar -xf memcache-2.2.5.tgz
[root@web2 ]# cd memcache-2.2.5
[root@web2 memcache-2.2.5]# /usr/local/php5/bin/phpize(扫描有没有扩展包)
[root@web2 memcache-2.2.5]# ./configure --with-php-config=/usr.local/php5/bin/php-config --enable-memcache
[root@web2 memcache-2.2.5]# make
[root@web2 memcache-2.2.5]# make install
installing shared extensions: /usr.local/php5/lib/php/extensions/no-debug-non-zts-20100525(提示模块存放目录memcache.so)
[root@web2 ~]# vim /usr/local/php5/etc/php.ini
[root@web2 ~]# vim /usr/local/php5/etc/php.ini
extension_dir = "/usr/local/php5/lib/php/extensions/no-debug-non-zts-20100525/"(添加扩展包路径,700多行)
...........
extension_dir = "memcache.so"(加载模块,800多行)
。。。。。。
[root@web2 ~]# service php-fpm restart(配置后重启)

[root@web2 html]# vim hydra.php(测试访问页面)
<?php
$memcache=new Memcache;
$memcache->connect('localhost',11211) or die ('could not connect!!');
$memcache->set('key','test');
$get_values=$memcache->get('key');
echo $get_values;
?>
[root@web2 nginx]# firefox http://127.0.0.1/hydra.php(测试访问)
[root@web2 ~]# telnet 192.168.2.200 11211(测试)
Trying 192.168.2.200...
Connected to 192.168.2.200.
Escape character is '^]'.
get key
VALUE key 0 4
test
END

——————————————————————————————————————————————————————————————————————

Session共享

session&cookies
session:存储在服务器端,保存用户名,密码等信息
cookies:由服务器下发给客户端,保存在客户端的一个文件里,
保存的内容主要包括sessionID,账户名,过期时间路径和域

测试环境
[root@beiqiang ~]# ifconfig eth0 192.168.4.1

[root@daili nginx~]# ifconfig eth0 192.168.4.5
eth1 192.168.2.5
[root@web tomcat~]# ifconfig eth1 192.168.2.100
[root@web2 tomcat~]# ifconfig eth1 192.168.2.200

[root@daili nginx~]nginx做upstream(集群),调度后台两台tomcat服务器
访问192.168.4.5的时候调度后两台web

[root@daili nginx]# vim conf/nginx.conf
upstream tomcatgrp {
server 192.168.2.100:8080;(tomcat服务器ip,端口)
server 192.168.2.200:8080;
}
server {
listen 80;
server_name localhost;
location / {
root html;
index index.html index.htm;
proxy_pass http://tomcatgrp;(调度tomcat)
}
[root@daili nginx]# nginx -s reload

tomcat不能直接连接memcached,为tomcat加模块
安装Session共享库,把这些架包拷贝到/usr/loacl/tomcat/lib/
asm-5.1.jar
memcached-session-manager-tc8-1.9.2.jar
minlog-1.3.0.jar
msm-kryo-serializer-1.9.2.jar
reflectasm-1.11.1.jar
kryo-3.0.3.jar
spymemcached-2.11.1.jar
kryo-serializers-0.34.jar
memcached-session-manager-1.9.2.jar
有了这些扩展包才能连接memcached
[root@web session]# cp *.jar /usr/local/tomcat/lib/
[root@web2 session]# cp *.jar /usr/local/tomcat/lib/

验证session
编写网页文件
[root@web ~]# vim /usr/local/tomcat/webapps/ROOT/test.jsp(去web2做相同的操作)
<html>
<body bgcolor="red">(指定背景颜色)
<center>
<%String s = session.getId();%>|(获取sessionid)
<%=s%>
<h1>tomcatA </h1>(web2的tomcatA要改为tomcatB)
</center>
</body>
</html>
[root@beiqiang ~]# firefox http://192.168.4.5/test.jsp(测试访问)
D4B601C82E1FA0C06D859969E4FB3EE5 (生成的sessionid号)
tomcatB (web2服务器生成的)

[root@web ~]# vim /usr/local/tomcat/conf/context.xml (在web2上做同样的操作)
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"(调类)
memcachedNodes="mem1:192.168.2.200:11211"(memcached服务器ip端口)
requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
transcoderFactoryClass="de.javakaffee.web.msm.JavaSerializationTranscoderFactory"/>(调类)
root@web~]# /usr/local/tomcat/bin/catalina.sh stop(关闭)在web2上做同样的操作
root@web~]# /usr/local/tomcat/bin/catalina.sh start(启动)在web2上做同样的操作
[root@beiqiang ~]# firefox http://192.168.4.5/test.jsp

————————————————————————————————————————————————————————————————————

linux memcached Session共享的更多相关文章

  1. tomcat8+memcached session共享

    一.环境准备 时间同步(同步后确认各服务器时间是否一致,不一致需要修改一下时区) 关闭防火墙 软件包和jar包链接:https://pan.baidu.com/s/1sl9Nob7 二.安装配置ngi ...

  2. memcached session共享

    http://www.baidu.com/s?wd=memcached%20session%E5%85%B1%E4%BA%AB&rsv_spt=1&issp=1&f=8& ...

  3. 【Tomcat】Tomcat + Memcached 实现session共享

    概述 web项目中,Tomcat的访问量总是有限的,这时候就需要用到Tomcat集群,多个Tomcat的时候就要考虑Session共享的问题,这里介绍一种使用Memcached做Session共享的解 ...

  4. 二十一.构建memcached服务、LNMP+memcached、PHP的本地Session信息、PHP实现session共享

    proxy client web1 web2   1.构建memcached服务 ]# yum -y install memcached ]# cat /etc/sysconfig/memcached ...

  5. 高级运维(五):构建memcached服务、LNMP+memcached、使用Tomcat设置Session、Tomcat实现session共享

    一.构建memcached服务 目标: 本案例要求先快速搭建好一台memcached服务器,并对memcached进行简单的添.删.改.查操作: 1> 安装memcached软件,并启动服务d ...

  6. 项目分布式部署那些事(2):基于OCS(Memcached)的Session共享方案

    在不久之前发布了一篇"项目分布式部署那些事(1):ONS消息队列.基于Redis的Session共享,开源共享",因为一些问题我们使用了阿里云的OCS,下面就来简单的介绍和分享下相 ...

  7. 【转】Nginx+Tomcat+Memcached集群Session共享

    cookie是怎样工作的? 例 如,我们创建了一个名字为login的Cookie来包含访问者的信息,创建Cookie时,服务器端的Header如下面所示,这里假设访问者的注册名 是“Michael J ...

  8. Nginx+Tomcat+memcached负载均衡实现session共享

    http://blog.csdn.net/love_ubuntu/article/details/8464983 1.  安装各个软件不用说了. 2.  到tomcat的安装目录lib中,加入: me ...

  9. 分布式Session共享(二):tomcat+memcached实现session共享

    一.前言 本文主要测试memcached实现session共享的实现方式,不讨论如何让nginx参与实现负载均衡等. 二.环境配置 本测试在Window下进行 name version port To ...

随机推荐

  1. 【转】sed 学习笔记

    一  .  sed 简介 1  .  功能 sed 是一种流编辑器,所谓流编辑器是指能够对来自文件或者管道的输入流进行基本的文本转换的工具,比方说查找替换删除等. 2  .  最简单的运作机制 sed ...

  2. ulua c#调用lua中模拟的类成员函数

    项目使用ulua,我神烦这个东西.lua单纯在lua环境使用还好,一旦要跟外界交互,各种月经不调就来了.要记住贼多的细节,你才能稍微处理好.一个破栈,pop来push去,位置一会在-1,一会在-3,2 ...

  3. .NET 异步多线程,Thread,ThreadPool,Task,Parallel,异常处理,线程取消

    今天记录一下异步多线程的进阶历史,以及简单的使用方法 主要还是以Task,Parallel为主,毕竟用的比较多的现在就是这些了,再往前去的,除非是老项目,不然真的应该是挺少了,大概有个概念,就当了解一 ...

  4. 【socket编程】select manual page翻译

    原文: select manual page 依赖的头文件 /* According to POSIX.1-2001, POSIX.1-2008 */ #include <sys/select. ...

  5. JAVA常用知识点及面试题总结

    1. String.StringBuffer.StringBuilder三者区别? (1)三者在执行速率上的比较: String<StringBuffer<StringBuilder 原因 ...

  6. 怎么改变title属性的样式?

    我们经常会设置title属性来显示提示的内容,最常见的一种就是超过文本框的内容显示省略号,鼠标移上去显示完整的内容,这里顺便说下显示省略号的设置,如 div{text-overflow:ellipsi ...

  7. java之静态代理和动态代理

    我们以几个问题,来开始我们今天的学习,如果下面几个问题,你都能说出个一二,那么恭喜你,你已经掌握了这方面的知识.1,什么是代理模式?2,Java中,静态代理与动态代理的区别?3,Spring使用的是J ...

  8. BZOJ 1025: [SCOI2009]游戏 [置换群 DP]

    传送门 题意:求$n$个数组成的排列变为升序有多少种不同的步数 步数就是循环长度的$lcm$..... 那么就是求$n$划分成一些数几种不同的$lcm$咯 然后我太弱了这种$DP$都想不出来.... ...

  9. BZOJ 2738: 矩阵乘法 [整体二分]

    给你一个N*N的矩阵,不用算矩阵乘法,但是每次询问一个子矩形的第K小数. 愚蠢的名字...... 整体二分,影响因子就是矩阵里的数 把$\le mid$的矩阵元素加到二维树状数组里然后询问分成两组就行 ...

  10. Azure ARM (21) Azure订阅的两种管理模式

    <Windows Azure Platform 系列文章目录> 熟悉Azure平台的读者都知道,Microsoft Azure服务管理,分为三个层次: 1.企业服务合同 (Enterpri ...