一、 缓存数据库

关系型数据库 mysql oracle
非关系型数据库(NOsql)memcached reids MongoDB
固态硬盘是机械硬盘速度的10倍以上
Memcached是开源的、高性能的纯内存缓存服务软件。
缓存:将数据存储在内存中,只有当磁盘不能正常完成工作时,才会启用缓存。
优点:速度快
缺点:断电数据丢失(双电),用缓存存储数据的目的只是为了应付大并发的业务,至于数据存储及可靠性会丢失。
mysql:关系型数据库
最大特点:保证数据不丟失
缓存数据库:(非关系型数据库,性能极高,但是不保证数据完整)====》业务数据提供者。
代表者:memache redis

1.1 缓存数据库使用场景

mysql:磁盘上的数据库,数据写入读取相对较慢
memcached:内存中的数据库,数据读写快,数据易丢失。
数据存储,数据仓库,选择mysql数据库
高并发,业务大的应用选择memcache这种内存数据库
memcachedb 会将内存中的数据写入到磁盘中
redis 主要工作场景也是所在内存中,但是定期备份到内存数据到磁盘
工作中,mysql+redis(memcached)搭配使用

下面是我画的访问流程图

用户首次访问时响应流程

 

 

用户第二次访问相同资源响应流程

 

 

 

 1.2 作为数据库的缓存

当数据库(mysql)承受不了大并发的请求时,可以将数据缓存到内存中(缓存数据库),然后就可以解决了

1.3 session会话共享

场景:只要登录了网站,以后访问这个网站任何页面都不要登录了。
cookies 是一个文件,类似身份信息
网站开发
判断用户信息,最开始技术方法:服务器在你的浏览器中写一个cookie,这个cookie包含了你的用户名
直接将个人数据存储在cookies不安全,所以要将个人数据存储在服务端的文件,这个文件就是session文件
浏览器Cookie:存储sessionid
服务器Session: session id 返回个人信息(session值)
使用场景:cookie+session
session存放在磁盘的文件中,2台web同时提供访问,会出现session文件找不到时的情况
解决方案:session共享
a. session文件通过NFS共享
b. session文件通过RSync、SCP共享
c. 将session的内容存放在数据库(mysql)中,所有机器都可以通过ip:port读取
好处:利用断电、重启丢失数据的特性定时清理数据:提高并发

二、安装memached

Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态、数据库驱动网站的速度。Memcached基于一个存储键/值对的hashmap。其守护进程(daemon )是用C写的,但是客户端可以用任何语言来编写,并通过memcached协议与守护进程通信。

2.1 memcache不支持分布式集群

补救方法:通过写程序实现分布式集群

常规的取余方法实现分布式:会导致血崩效应

2.2 安装memcached

1 [root@cache01 ~]# yum install -y memcached

 

 2.3 查看配置memcached文件

 

1 vim /etc/init.d/memcached
2 PORT=11211
3 #memcache默认端口为11211
4 USER=memcached
5 #默认用户
6 MAXCONN=1024
7 #最大连接数
8 CACHESIZE=64
9 #缓存大小64M

 

 

 

 2.4 启动memcache

 1 [root@cache01 init.d]# systemctl start memcached.service 
 2 [root@cache01 init.d]# systemctl status  memcached.service 
 3  memcached.service - Memcached
 4    Loaded: loaded (/usr/lib/systemd/system/memcached.service; disabled; vendor preset: disabled)
 5    Active: active (running) since Thu 2017-11-16 21:02:06 CST; 6s ago
 6  Main PID: 2841 (memcached)
 7    CGroup: /system.slice/memcached.service
 8            └─2841 /usr/bin/memcached -u memcached -p 11211 -m 64 -c 1024
 9 
10 Nov 16 21:02:06 cache01 systemd[1]: Started Memcached.
11 Nov 16 21:02:06 cache01 systemd[1]: Starting Memcached...

 

 

 

 

2.5 插入数据

预测试插入数据
请保持插入数据长度与数据长度相同,否则会出现错误如下图

 

 

上面说数据大太了,无法写入

 

 

1 [root@cache01 ~]# printf "set key008 0 0 6rn123456rn"
2 set key008 0 0 6
3 123456

 

 

 

 

set 设置键值对

key008 设置键名

0 flag 默认不变

0 不过期

10 字符长度

123456 插入的字符

真正插入数据

1 [root@cache01 ~]# printf "set key008 0 0 6rn123456rn"|nc 127.0.0.1 11211
2 STORED

 

 

 

 获取数据

1 [root@cache01 ~]# printf "get key008rn"|nc 127.0.0.1 11211
2 VALUE key008 0 6
3 123456
4 END

 

 

 

 删除数据

1 [root@cache01 ~]# printf "delete key008rn"|nc 127.0.0.1 11211
2 DELETED

 

 

 

 

再次查看数据,发现已经没有了

1 [root@cache01 ~]# printf "get key008rn"|nc 127.0.0.1 11211
2 END

 

 

  2.6 服务端memcached监控

 

 1 [root@cache01 init.d]# printf "statsrn"|nc 127.0.0.1 11211
 2 STAT pid 2841
 3 STAT uptime 2012
 4 STAT time 1510839336
 5 ………
 6 STAT incr_hits 0
 7 STAT decr_misses 0
 8 STAT decr_hits 0 #命令中数 为0  这是两个最重要的选项
 9 STAT cas_misses 0 #丢失数  为0
10 ………
11 STAT cas_hits 0
12 STAT cas_badval 0
13 STAT touch_hits 0
14 STAT touch_misses 0
15 STAT auth_cmds 0
16 END

1. 监控port或进程
2. 可以模拟用户先set后get,比对get内容是不是set的。crond nagios zabbix
3. 监控命令中率
4. 监控响应时间及需要的状态

三、PHP的memcache客户端

 

1 tar xf memcache-2.2.7.tgz
2 cd memcache-2.2.7
3 /application/php/bin/phpize #扩展php需要的命令
4 ./configure --enable-memcache --with-php-config=/application/php/bin/php-config --with-zlib-dir
5 make && make install

 

 

 

 

1 下面生成memcache.so是客户端与服务端通信的

 

 

 

 3.1 添加php扩展

1 [root@web01 memcache-2.2.7]# sed -i.ori '$aextension=memcache.so' /application/php/lib/php.ini
2 [root@web01 memcache-2.2.7]# tail -1 /application/php/lib/php.ini
3 extension=memcache.so

 

 

 

 

 1 [root@web01 memcache-2.2.7]# ps -ef | grep php-fpm
 2 root     53723     1  0 17:14 ?        00:00:01 php-fpm: master process (/application/php-5.5.32/etc/php-fpm.conf)
 3 nginx    53724 53723  0 17:14 ?        00:00:07 php-fpm: pool www
 4 nginx    53725 53723  0 17:14 ?        00:00:06 php-fpm: pool www
 5 nginx    54358 53723  0 18:30 ?        00:00:06 php-fpm: pool www
 6 root     57977  1747  0 22:07 pts/2    00:00:00 grep --color=auto php-fpm
 7 [root@web01 memcache-2.2.7]# kill 53723
 8 [root@web01 memcache-2.2.7]# kill 53723
 9 -bash: kill: (53723) - No such process
10 [root@web01 memcache-2.2.7]# /application/php/sbin/php-fpm -t
11 [16-Nov-2017 22:07:48] NOTICE: configuration file /application/php-5.5.32/etc/php-fpm.conf test is successful
12 
13 [root@web01 memcache-2.2.7]# /application/php/sbin/php-fpm 
14 [root@web01 memcache-2.2.7]# /application/php/bin/php -m | grep memcache
15 memcache

 

 

 3.2 测试php

1 <?php
2 $memcache= new Memcache;
3 $memcache->connect('10.0.0.21',11211) or die ( "could not cnnect");
4 $memcache->set('1','3306');
5 $get_value=$memcache->get('1');
6 echo $get_value;
7 ?>

 

下面为显示结果

显示内容,测试成功

 

 3.3 memcache web界面管理工具

下载memcacheweb界面管理工具

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

 

 下面为memadmin管理工具的使用

 

 

 

 

 

3.4 session共享

 

       方法1:通过程序实现,web01只需要往memcahce写session,web02从memcahce读session(更具有通用性)

      

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

需要运维和开发协同

       运维:准备环境

       开发:用环境

1 sed -i 's#session.save_handler = files#session.save_handler = memache#;$a session.save_path = "tcp://10.0.0.21:11211"' /application/php/lib/php.ini
2 kill php
3 [root@web01 memcache-2.2.7]# /application/php/sbin/php-fpm -t
4 [16-Nov-2017 22:07:48] NOTICE: configuration file /application/php-5.5.32/etc/php-fpm.conf test is successful
5 
6 [root@web01 memcache-2.2.7]# /application/php/sbin/php-fpm 

 

如果集群中有负载均衡,可以通过wireshark 查看ip,登陆后,查看验证结果。

 

内容来源于网络如有侵权请私信删除
你还没有登录,请先登录注册
  • 还没有人评论,欢迎说说您的想法!