环境

[root@cache01 ~]# cat /etc/redhat-release
CentOS Linux release 7.4. (Core)
[root@cache01 ~]# uname -a
Linux cache01 3.10.-.el7.x86_64 # SMP Tue Aug :: UTC x86_64 x86_64 x86_64 GNU/Linux

前言:转载请注明出处。。。

memcached介绍

官方:http://memcached.org/

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

memcached属于非关系型数据库。

memcached原理及优点

  在启动Memcached时,根据指定的内存大小参数,会被分配一个内存空间。当我们读取数据库的各类业务数据后,数据会同时放入Memcached缓存中,当下一次用户请求同样的数据,程序直接去Memcached 取数据返回给用户。

优点:

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

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

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

Memcached在企业中使用场景

作为数据库的前端缓存应用

作为数据库的前端缓存最大目的:减少数据库被大量访问的压力

1、完整缓存(简单)

  例如京东的商品分类,就可以实现放到memcached内存里,然后再对外提供数据访问。这个叫做预热。此时可以只读取缓存就能读到商品分类数据,无需读取数据库,所以数据库的压力就降低了。

2、热点缓存(困难,难在数据一致性)

  热点缓存一般是指由用户更新的商品,例如淘宝的卖家,当卖家新增商品后,淘宝网的程序就会把商品写入数据库,然后读取写入的数据,把这部分数据放入到memcached内存中(不管有没有用户读取数据),当下一次访问这个商品的请求就直接从memcached内存中取数据。这种方法用来缓存网站热点数据,即memcached中缓存经常被访问的数据。

  提示:这个过程可以通过程序实现,也可以在数据库上安装memcache插件,直接由数据库触发更新内容到memcached中。

  作为数据库的前端缓存最大目的:减少数据库被大量访问的压力

  为了缓解数据库的高并发访问压力,可以在数据库层配置数据库读写分离,并对数据库做负载均衡,但更简单高效的方法是部署缓存数据库,把部分数据保存在内存

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

  • session: 存储在服务端的特定用户会话所需的属性及配置信息,这样,当用户在应用程序的 Web 页之间跳转时,存储在 Session 对象中的变量将不会丢失,而是在整个用户会话中一直存在下去
  • cookies:网站为了辨别用户身份,进行session跟踪而存储在用户本地终端上的数据

  网站开发,判断用户信息,最开始的技术方法:服务器在你的浏览器中写一个cookies,这个cookies就包含了你的用户名及登录信息。因为cookies是存储在本地浏览器中,所以第三方工具很容易盗取cookies信息。

所以演变:

最开始:
cookies cookies名字:内容(用户名,登录信息)
改进:
本地浏览器:
cookies cookies名字:内容(session id 编号)
服务器:
session session id:内容(用户名,登录信息)
主流使用场景:cookies + session

memcached分布式缓存集群特点

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

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

1.   所有MC服务器内存的内容都是不一样的。这些服务器内容加起来接近数据库的容量。比如1T的数据库,一台缓存数据库的内存没有那么大,因此分成10台缓存服务器。

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

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

4.   一致性HASH可以让节点宕机对节点的数据流动(失效)降到最低。

session和cookie区别(简单理解)

1、cookie数据存放在用户的浏览器上,session数据存储在服务器上

2、cookie在本地的浏览器中,可以被提取分析,安全性差。为了安全,登录账户等信息可以缓存在session中。

3、session会在一定时间内保存在服务器上,访问量增大会给服务器带来压力,可以使用缓存工具,如memcache等

memcached部署

记得关闭防火墙及selinux

安装

yum install memcached -y

查看默认配置

[root@cache01 ~]# cat /etc/sysconfig/memcached
PORT=""
USER="memcached"
MAXCONN=""
CACHESIZE=""
OPTIONS=""

启动

systemctl start memcached.service

memcached的使用

注:使用这中方法的很少,这里就简要一说。

memcached存储方式:一个key值对应一个value

set              key
<command name> <key> <flags> <exptime> <bytes>\r\n
- <flags> 是在取回内容时,与数据和发送块一同保存服务器上的任意16位无符号整形(用十进制来书写)。客户端可以用它作为“位域”来存储一些特定的信息;它对服务器是不透明的。 - <exptime> 是终止时间。如果为0,该项永不过期(虽然它可能被删除,以便为其他缓存项目腾出位置)。如果非0(Unix时间戳或当前时刻的秒偏移),到达终止时间后,客户端无法再获得这项内容。 - <bytes> 是随后的数据区块的字节长度,不包括用于分页的“\r\n”。它可以是0(这时后面跟随一个空的数据区块)。 <data block>\r\n
- <data block> 是大段的8位数据,其长度由前面的命令行中的<bytes>指定。
\n 换行且光标移至行首
\r 光标移至行首,但不换行

参数详解

使用实例

存数据

[root@cache01 ~]# printf "set key01 0 0 2\r\naa\r\n"|nc 10.0.0.21
STORED

查看数据

[root@cache01 ~]# printf "get key01\r\n"|nc 10.0.0.21
VALUE key01
aa
END

删除数据

[root@cache01 ~]# printf "delete key01\r\n"|nc 10.0.0.21
DELETED
[root@cache01 ~]# printf "get key01\r\n"|nc 10.0.0.21
END

memcache php版本客户端安装使用

客户端安装

1、首先在web客户端查询php模块中有没有memcache模块

[root@web01 ~]# /application/php/bin/php -m
[PHP Modules]
bcmath
Core
ctype
curl
date
dom
ereg
fileinfo
filter
ftp
gd
hash
iconv
json
libxml
mbstring
mcrypt
mhash
mysql
mysqlnd
openssl
pcntl
pcre
PDO
pdo_mysql
pdo_sqlite
Phar
posix
Reflection
session
shmop
SimpleXML
soap
sockets
SPL
sqlite3
standard
sysvsem
tokenizer
xml
xmlreader
xmlrpc
xmlwriter
xsl
zlib [Zend Modules]

查询实例

2、没有memcache模块,向php中补充memcache模块

[root@web01 tools]# tar xf memcache-2.2..tgz     ---- 解压memcache的tar包
[root@web01 tools]# cd memcache-2.2./        
[root@web01 memcache-2.2.]# /application/php/bin/phpize --- 使用php程序的phpize命令进行扩展模块
Configuring for:
PHP Api Version:
Zend Module Api No:
Zend Extension Api No:
[root@web01 memcache-2.2.]# ./configure --enable-memcache --with-php-cop/bin/php-config --with-zlib-dir 初始化memcache
[root@web01 memcache-2.2.]# make && make install 编译安装

  检查编译结果:

[root@web01 memcache-2.2.]# ls /application/php/lib/php/extensions/no-d2/
mcache.so

3、激活memcache并检查有没有memcache模块

  激活memcache:

[root@web01 memcache-2.2.]# sed -i '$a extension=memcache.so' /application/php/lib/php.ini
[root@web01 memcache-2.2.]# pkill php
[root@web01 memcache-2.2.]# /application/php/sbin/php-fpm -t
[-Nov- ::] NOTICE: configuration file /application/php-5.5.3est is successful

  检查有没有memcache模块:

[root@web01 memcache-2.2.]# /application/php/sbin/php-fpm
[root@web01 memcache-2.2.]# /application/php/bin/php -m|grep memcache
memcache

php代码测试

  在web服务器操作:

[root@web01 memcache-2.2.]# vim /application/nginx/html/blog/wordpress/mc.php
<?php
$memcache = new Memcache;
$memcache->connect('10.0.0.21', ) or die ("Could not connect")
;
$memcache->set('key20171117', 'hello,world');
$get_value = $memcache->get('key20171117');
echo $get_value;
?>

测试的php代码

  测试结果(在memcache服务器操作):

[root@cache01 ~]# printf "get key20171117\r\n"|nc 10.0.0.21
VALUE key20171117
hello,world
END

web管理memcached

http://www.junopen.com/memadmin/    memadmin下载地址

[root@web01 tools]# tar xf memadmin-1.0..tar.gz -C /application/nginx/html/blog/wordpress/

  浏览器登陆

  这样就可以从网页中进行管理memcached了

memcached数据缓存

我使用的是wordpress站点,需要利用wordpress的一个配置文件object-cache.php,官网上有,将object-cache.php放入站点目录下的wp-content目录下并根据环境改ip信息就可以使用了。

object-cache.php具体作用就是让wordpress站点可以连接memcached缓存数据库

[root@web01 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函数

  手改方法:

企业级memcached缓存数据库结合php使用与web管理memcached的更多相关文章

  1. memcached 缓存数据库应用实践

    1.1 数据库对比 缓存: 将数据存储到内存中,只有当磁盘胜任不了的时候,才会启用缓存   缺点:断电数据丢失(双电),用缓存存储数据的目的只是为了应付大并发的业务. 数据库: mysql(关系型数据 ...

  2. Spring Boot:使用Memcached缓存

    综合概述 Memcached是一个自由开源的,高性能,分布式内存对象缓存系统.Memcached基于内存的key-value存储,用来存储小块的任意数据,这些数据可以是数据库调用.API调用或者是页面 ...

  3. Redis非关系型缓存数据库集群部署、参数、命令工具

    <关系型数据库与非关系型数据库> 关系数据库:mysql.oracle.DB2.SQL Server非关系数据库:Redis(缓存数据库).MongodDB(处理海量数据).Memcach ...

  4. Memcached缓存瓶颈分析

    Memcached缓存瓶颈分析 获取Memcached的统计信息 Shell: # echo "stats" | nc 127.0.0.1 11211 PHP: $mc = new ...

  5. django之memcached缓存系统

    django其他缓存方法:(https://www.cnblogs.com/jishuweiwang/p/6110809.html) memcached版本 <1.5 1. memcached缓 ...

  6. 详细分析Memcached缓存与Mongodb数据库的优点与作用

    http://www.mini188.com/showtopic-1604.aspx 本文详细讲下Memcached和Mongodb一些看法,以及结合应用有什么好处,希望看到大家的意见和补充. Mem ...

  7. .NET跨平台之旅:基于.NET Core改写EnyimMemcached,实现Linux上访问memcached缓存

    注:支持 .NET Core 的 memcached 客户端 EnyimMemcachedCore 的 NuGet 包下载地址:https://www.nuget.org/packages/Enyim ...

  8. Tornado 结合memcached缓存页面

    原因 Blog是一个更新并不很频繁的一套系统,但是每次刷新页面都要更新数据库反而很浪费资源,添加静态页面生成是一个解决办法,同时缓存是一个更好的主意,可以结合Memcached添加少量的代码进行缓存, ...

  9. redis和memcached缓存

    memcached memcache开源的,高性能,高并发分布式内存缓存系统,天生支持集群 memcached下载地址: http://memcached.org/downloads python实现 ...

随机推荐

  1. Java----list常用方法汇总

    package ListTest; import java.util.ArrayList; import java.util.Iterator ; import java.util.List; /** ...

  2. Cocos2d3.0 制作PList文件

    auto root = Dictionary::create(); auto string = String::create("string element value"); ro ...

  3. Android中关于JNI 的学习(三)在JNI层訪问Java端对象

    前面两篇文章简介了JNI层跟Java层的一些相应关系,包含方法名,数据类型和方法名称等,相信在理论层面.可以非常好地帮助我们去了解JNI在Native本地开发中的作用,对JNI的一些概念也有了一个初步 ...

  4. [Shell]crontab 运行任务调用shell脚本,相对路径无法找到

    问题出现的场景大概就是 1  cron调用一个python脚本 2  python脚本中调用一个shell脚本(对日志分析)获取shell输出然后发送邮件 类似一个监控任务. 直接运行python脚本 ...

  5. JAVA入门[16]-form表单,上传文件

    一.如何传递参数 使用 @RequestParam 可以传递查询参数.例如:http://localhost:8092/category/detail?id=1 @RequestMapping(&qu ...

  6. Elasticsearch和MongoDB分片及高可用对比

    本文旨在对比Elasticsearch和MongoDB高可用和分片的实现机制. Elasticsearch ES天生就是分布式的,那她又是如何做到天生分布式的? 通过ES官方指南我们可以知道: 一个运 ...

  7. Spring Tool Suite生成默认的MVC项目的配置文件问题

    1.STS是开发Spring程序的首选,基于JavaEE的程序,我都用STS来开发,但是在生成默认的MVC项目时,其配置文件让人很讨厌,在许多选项上都会加一个beans,如<beans:bean ...

  8. 快看Sample代码,速学Swift语言(2)-基础介绍

    Swift语言是一个新的编程语言,用于iOS, macOS, watchOS, 和 tvOS的开发,不过Swift很多部分内容,我们可以从C或者Objective-C的开发经验获得一种熟悉感.Swif ...

  9. UML2和建模工具学习总结

    软件发展的方向:CS–>BS–>SOA–>BIG DATA 建模的含义: 模型是对现实的简化 从特点视角对系统的一个完整性描述 建模的重要性: 为了更好的理解一个系统 管理复杂度(也 ...

  10. 串String(1):串的实现(定长顺序存储结构)

    前言 PS:本文相关头文件.预编译以及typedef如下,阅读一遍以便于下面的理解: #include <stdio.h> #include <stdlib.h> #inclu ...