zoukankan      html  css  js  c++  java
  • MacachedphpMacache插件安装

    一、 缓存数据库

    关系型数据库 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 6\r\n123456\r\n"
    2 set key008 0 0 6
    3 123456

    set 设置键值对

    key008 设置键名

    0 flag 默认不变

    0 不过期

    10 字符长度

    123456 插入的字符

    真正插入数据

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

     获取数据

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

     删除数据

    1 [root@cache01 ~]# printf "delete key008\r\n"|nc 127.0.0.1 11211
    2 DELETED

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

    1 [root@cache01 ~]# printf "get key008\r\n"|nc 127.0.0.1 11211
    2 END

      2.6 服务端memcached监控

     1 [root@cache01 init.d]# printf "stats\r\n"|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 '$a\extension=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,登陆后,查看验证结果。

  • 相关阅读:
    .NET互操作技术杂谈
    VS2008 Remote Debug HOW TO
    Entity Framework一对多关系或一对一关系删除子对象的方法
    Associations in EF Code First: Part 1 – Introduction and Basic Concepts
    如何管理Entity Framework中得事务
    在asp.net mvc3中编译视图文件
    entity framework中对关系使用默认规则与配置
    使用Entity Framework时动态生成lamda表达式
    asp.net mvc 身份验证中返回绝对路径的ReturnUrl
    Entity Framework 事务处理SaveChanges(false)
  • 原文地址:https://www.cnblogs.com/anyux/p/7851515.html
Copyright © 2011-2022 走看看