Memcached搭建

缓存数据库Memcache

为什么用缓存数据库

MySQL:磁盘上的数据库,数据写入读取相对较慢

Memcached:内存中的数据库,数据读写都快,但是数据易丢失

数据存储,数据仓库选择MySQL这种磁盘的数据库

高并发,业务大的应用选择Memcached这种内存数据库

工作中,MySQL+Memcached搭配使用

Memcached介绍

Memcached是一款开源的、高性能的纯内存缓存服务软件。Mem是内存的意

思,cache是缓存的意思,d是daemon的意思。

http://memcached.org/

Memcached在企业中使用场景一

优点:

①  对于用户来讲,用户访问网站更快了,体验更好了。

②  对网站来说,数据库压力降低了。只有当内存没有数据时才会去请求数据库。第一次写入的数据也会请求数据库。一般公司没有预热,只有当用户读取过数据库才会放到Memcached中。

③  提升了网站的并发访问,减少服务器数量。

Memcached在企业中使用场景二

作为集群后端的session会话保持

Cookies和Session

网站程序判断用户登陆信息,最开始的技术方法:服务器在你的浏览器中写一个cookies,这个cookies

就包含了你的用户名及登录信息。因为cookies是存储在本地浏览器中,所以第三方工具很容易盗取 cookies中的隐私信息。最开始:

最开始:

cookies cookies名字:内容(用户名,登录信息)

改进:

本地浏览器:

cookies cookies名字:内容(session id 编号)

服务器:

session session id:内容(用户名,登录信息)

主流使用场景:cookies + session

Memcached分布式缓存集群

Memcached天生不支持分布式集群,只能通过程序支持分布式存储

Memcached分布式缓存集群的特点:

所有MC服务器内存的内容都是不一样的。这些服务器内容加起来接近数据

库的容量。比如1T的数据库,一台缓存数据库的内存没有那么大,因此分

成10台缓存服务器。

普通哈希算法

通过在客户端(Web)程序或者MC的负载均衡器上用HASH算法,让同一内容都分配到一个MC服务器。

普通的HASH算法对于节点宕机会带来大量的数据流动(失效),可能会引起雪崩效应。

一致性哈希算法

1.首先求出memcached服务器(节点)的哈希值,并将其配置到0~232的圆(continuum)上。

2.然后采用同样的方法求出存储数据的键的哈希值,并映射 到相同的圆上。

3.然后从数据映射到的位置开始顺时针查找,将数据保存到找到的第一个服务器上。如果超过232仍然找不到服务器,就会保存到第一台memcached服务器上。

服务端部署

环境装备

从CentOS7模板机全新克隆一台新主机

IP规划为10.0.0.21/172.16.1.21,主机名为cache01

其次,准备一台能够打开wordpress的web01机器(CentOS6),仿真企业真

实环境,多系统混合使用

安装memcached

[[email protected] ~]# yum -y install memcached

查看配置文件

[[email protected] ~]# cat /etc/sysconfig/memcached

PORT="11211"

USER="memcached"

MAXCONN="1024"

CACHESIZE="64"

OPTIONS=""

启动memcached

[[email protected] ~]# systemctl  start memcached.service

[[email protected] ~]# systemctl  status memcached.service

[[email protected] ~]# netstat -tunlp|grep memcached

练习memcached命令语法

增删改查

[[email protected] ~]# printf "set key008 0 0 10\r\noldboy0987\r\n"  写

set key008 0 0 10

oldboy0987

[[email protected] ~]# printf "set key008 0 0 10\r\noldboy0987\r\n"|nc 10.0.0.21 11211   保存

STORED

[[email protected] ~]# printf "get key008\r\n"|nc 10.0.0.21 11211   查看

VALUE key008 0 10

oldboy0987

END

[[email protected] ~]# printf "delete key008\r\n"|nc 10.0.0.21 11211  删除

DELETED

终止时间设置

[[email protected] ~]#  printf "set key008 0 6 10\r\noldboy0987\r\n"|nc 10.0.0.21 11211  增加6秒终止时间

STORED

[[email protected] ~]# printf "get key008\r\n"|nc 10.0.0.21 11211

VALUE key008 0 10

oldboy0987

END

[[email protected] ~]#  printf "get key008\r\n"|nc 10.0.0.21 11211

END

语法说明

set          key    0       0      10   \r\n oldboy0987 \r\n

<command name> <key> <flags> <exptime> <bytes>\r\n <data block>\r\n


<flags>


是在取回内容时,与数据和发送块一同保存服务器上的任意16位无符号整形(用十进制来书写)。客户端可以用它作为“位域”来存储一些特定的信息;它对服务器是不透明的。


<exptime>


是终止时间。如果为0,该项永不过期(虽然它可能被删除,以便为其他缓存项目腾出位置)。如果非0 (Unix时间戳或当前时刻的秒偏移),到达终止时间后,客户端无法再获得这项内容。


<bytes>


是随后的数据区块的字节长度,不包括用于分页的“\r\n”。它可以是0(这时后面跟随一个空的数据区块)。


<data   block>


是大段的8位数据,其长度由前面的命令行中的<bytes>指定。


\n 换行且光标移至行首

\r 光标移至行首,但不换行

客户端部署

链接:https://pan.baidu.com/s/1ggwXsjT 密码:4x5v

[[email protected] tools]# tar zxf memcache-2.2.5.tgz

[[email protected] tools]# cd memcache-2.2.5

重新编译php添加memcache模块

[[email protected] memcache-2.2.5]# /application/php/bin/phpize

[[email protected] memcache-2.2.5]# ./configure --enable-memcache --with-php-config=/application/php/bin/php-config --with-zlib-dir

[[email protected] memcache-2.2.5]# make && make install

[[email protected] memcache-2.2.5]# ls  /application/php-5.5.32/lib/php/extensions/no-debug-non-zts-20121212/

memcache.so

[[email protected] memcache-2.2.5]# sed -i '$a extension=memcache.so' /application/php/lib/php.ini

[[email protected] memcache-2.2.5]# pkill php

[[email protected] memcache-2.2.5]# /application/php/sbin/php-fpm -t

[11-Jan-2018 07:44:56] NOTICE: configuration file /application/php-5.5.32/etc/php-fpm.conf test is successful

[[email protected] memcache-2.2.5]# /application/php/sbin/php-fpm

[[email protected] memcache-2.2.5]# /application/php/bin/php -m|grep memcache

memcache

php代码测试

[[email protected] memcache-2.2.5]# cat >> /application/nginx/html/blog/mc.php<<'EOF'

> <?php

> $memcache = new Memcache;

> $memcache->connect('10.0.0.21', 11211) or die ("Could not connect");

> $memcache->set('key20180111', 'hello,world');

> $get_value = $memcache->get('key20180111');

> echo $get_value;

> ?>

> EOF

[[email protected] memcache-2.2.5]# cat /application/nginx/html/blog/mc.php

<?php

$memcache = new Memcache;

$memcache->connect('10.0.0.21', 11211) or die ("Could not connect");

$memcache->set('key20180111', 'hello,world');

$get_value = $memcache->get('key20180111');

echo $get_value;

?>

浏览器查看

服务端查看

[[email protected] ~]# printf "get key20180111\r\n"|nc 10.0.0.21 11211

VALUE key20180111 0 11

hello,world

END

Web界面管理memcached

memadmin-1.0.12.tar.gz       非法内容不可分享,呵呵

[[email protected] tools]# tar xf memadmin-1.0.12.tar.gz -C /application/nginx/html/blog/

Memcache数据缓存

使用memcached缓存wordpress博文数据

[[email protected] tools]# cd /application/nginx/html/blog/wp-content/

链接:https://pan.baidu.com/s/1smW4KdJ 密码:fnud

[[email protected] wp-content]# rz -E

rz waiting to receive.

[[email protected] wp-content]# sed -i 's#127.0.0.1#10.0.0.21#' object-cache.php

博客写一篇博文

Memcached Session共享

方法1:通过程序实现,web01只需要往memcahce写session,web02从memcahce读session,

当作普通数据读写(更具有通用性)

方法2:通过php的配置文件,php默认将session存储在文件中,修改为存储在memcached

sed -i 's#session.save_handler = files#session.save_handler = memcache#;$a

session.save_path = "tcp://10.0.0.21:11211"' /application/php/lib/php.ini

使用这个功能,需要使用php的session函数

原文地址:http://blog.51cto.com/13554498/2060049

时间: 2024-10-16 03:41:59

Memcached搭建的相关文章

memcached 搭建

 linux 下memcached 的搭建 memcached 下载地址:http://www.danga.com/memcached/dist/ libevent 下载地址:http://libevent.org/ [[email protected] soft]# lslibevent-1.4.9-stable.tar.gz memcached-1.2.6.tar.gz[[email protected] soft]# tar xf libevent-1.4.9-stable.tar.gz

memcached演练(3) 使用memcached搭建tomcat集群

上篇文章,已经明确了tomcat集群的必要性,主要从高可用和高并发量考虑.一般使用tomcat集群搭建,都要使用前置设一个nginx或apache作个反向代理,将请求转发给后端tomcat.使用tomcat集群,必然会引来session数据共享问题.如何解决这个问题?可借助memcached实现. 主要内容 测试单台tomcat的吞吐率 搭建apache+mod_jk+2个tomcat集群环境 搭建apache+mod_jk+2个tomcat+memcached集群环境 对比2个环境的吞吐率情况

nginx+tomcat+memcached搭建服务器集群及负载均衡

在实际项目中,由于用户的访问量很大的原因,往往需要同时开启多个服务器才能满足实际需求.但是同时开启多个服务又该怎么管理他们呢?怎样实现session共享呢?下面就来讲一讲如何使用tomcat+nginx搭建服务器集群以及如何实现session共享. 环境: apache-tomcat-6.0.29+apache-tomcat-6.0.29+jdk1.6+win7(由于自己只是做了一个demo,j就没有用到服务器系统了) 1.首先我们准备两个tomcat(tomcat1,tomcat2),并将端口

SpringMVC Memcached 搭建WEB项目缓存框架

最近做的项目一直在使用memcached作为缓存来缓存各种数据,现在BOSS要在项目上加上缓存.并把任务交给我.便琢磨怎么解决这个问题. 看了很多文章,写的比较详尽靠谱的就是这篇了http://www.cnblogs.com/cczhoufeng/archive/2013/04/09/3009578.html,结合自身项目做出了一些改动,在此分享出来. 该套框架的基本思路是:利用Spring-AOP在项目的DAO接口层(由于项目代码经历过多次迭代,不适合放在Service层)做一个环绕切面,每次

memcached搭建缓存系统

一.概念 Memcached是danga.com(运营LiveJournal的技术团队)开发的一套分布式内存对象缓存系统,用于在动态系统中减少数据库负载,提升性能. 二.适用场合 1.分布式应用.由于memcached本身基于分布式的系统,所以尤其适合大型的分布式系统. 2.数据库前段缓存.数据库常常是网站系统的瓶颈.数据库的大并发量访问,常常造成网站内存溢出.当然我们也可以使用Hibernate的缓存机制.但memcached是基于分布式的,并可独立于网站应用本身,所以更适合大型网站进行应用的

Memcached集群/分布式/高可用 及 Magent缓存代理搭建过程 详解

当网站访问量达到一定时,如何做Memcached集群,又如何高可用,是接下来要讨论的问题. 有这么一段文字来描述“Memcached集群” Memcached如何处理容错的? 不处理!:) 在memcached节点失效的情况下,集群没有必要做任何容错处理.如果发生了节点失效,应对的措施完全取决于用户.节点失效时,下面列出几种方案供您选择: * 忽略它! 在失效节点被恢复或替换之前,还有很多其他节点可以应对节点失效带来的影响. * 把失效的节点从节点列表中移除.做这个操作千万要小心!在默认情况下(

Ubuntu 16.04通过Magent搭建Memcached集群(转)

一.下载Magent 官网:https://code.google.com/archive/p/memagent/downloads 离线版本:(链接: https://pan.baidu.com/s/1kU9DLI3 密码: k6qg) 二.编译安装 说明:magent由于是10年的产品,所以编译时一定会报错,但是先不要按照网上的修改来操作,应该先执行make,然后看错误来解决,因为每个系统的解决方式都不同,应该按照不同的系统来处理才是最优的解法. 前提:先安装Memcached,参考:htt

LNMP+memcached平台的搭建

实验01:LNMP平台的搭建 实验目标:nginx可以解析php 实验步骤: 一:环境准备 1:准备搭建环境,创建用户 [[email protected] ~]# useradd www [[email protected] ~]# useradd mysql 2:将原有的http网站服务停止并删除原有mysql的主配置文件,停掉mysql服务 3:解压软件包 [[email protected] ~]# unzip lnmp+memcached.zip lnmp+memcached     

memcached 在window下的安装与使用

memcached搭建缓存系统 一.概念 Memcached是danga.com(运营LiveJournal的技术团队)开发的一套分布式内存对象缓存系统,用于在动态系统中减少数据库负载,提升性能. 二.适用场合 分布式应用.由于memcached本身基于分布式的系统,所以尤其适合大型的分布式系统. 数据库前段缓存.数据库常常是网站系统的瓶颈.数据库的大并发量访问,常常造成网站内存溢出.当然我们也可以使用Hibernate的缓存机制.但memcached是基于分布式的,并可独立于网站应用本身,所以