• 企业级memcached缓存数据库结合php使用与web管理memcached


    环境

    [root@cache01 ~]# cat /etc/redhat-release 
    CentOS Linux release 7.4.1708 (Core) 
    [root@cache01 ~]# uname -a
    Linux cache01 3.10.0-693.el7.x86_64 #1 SMP Tue Aug 22 21:09:27 UTC 2017 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="11211"
    USER="memcached"
    MAXCONN="1024"
    CACHESIZE="64"
    OPTIONS=""

    启动

    systemctl start memcached.service

    memcached的使用

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

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

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

    使用实例

    存数据

    [root@cache01 ~]# printf "set key01 0 0 2
    aa
    "|nc 10.0.0.21 11211
    STORED

    查看数据

    [root@cache01 ~]# printf "get key01
    "|nc 10.0.0.21 11211
    VALUE key01 0 2
    aa
    END

    删除数据

    [root@cache01 ~]# printf "delete key01
    "|nc 10.0.0.21 11211
    DELETED
    [root@cache01 ~]# printf "get key01
    "|nc 10.0.0.21 11211
    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.5.tgz     ---- 解压memcache的tar包
    [root@web01 tools]# cd memcache-2.2.5/        
    [root@web01 memcache-2.2.5]# /application/php/bin/phpize     --- 使用php程序的phpize命令进行扩展模块
    Configuring for:
    PHP Api Version:         20121113
    Zend Module Api No:      20121212
    Zend Extension Api No:   220121212
    [root@web01 memcache-2.2.5]# ./configure --enable-memcache --with-php-cop/bin/php-config --with-zlib-dir         初始化memcache 
    [root@web01 memcache-2.2.5]# make && make install            编译安装

      检查编译结果:

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

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

      激活memcache:

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

      检查有没有memcache模块:

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

    php代码测试

      在web服务器操作:

    [root@web01 memcache-2.2.5]# vim /application/nginx/html/blog/wordpress/mc.php
    <?php
        $memcache = new Memcache;
        $memcache->connect('10.0.0.21', 11211) 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
    "|nc 10.0.0.21 11211
    VALUE key20171117 0 11
    hello,world
    END

    web管理memcached

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

    [root@web01 tools]# tar xf memadmin-1.0.12.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函数

       手改方法:

     

  • 相关阅读:
    Django开发个人博客网站
    Photoshop界面字体太小解决方案
    [Leetcode]第三题:无重复字符最长子串
    web网站服务(1)
    备份与恢复笔记和实验
    oracle事物和常用数据库对象笔记和实验
    Oracle配置管理实验
    Oracle配置管理笔记
    Oracle体系结构和用户管理实验
    Oracle数据库部署
  • 原文地址:https://www.cnblogs.com/lyq863987322/p/8253513.html
Copyright © 2020-2023  润新知