Memcache实现会话共享

1. Memcache介绍


分布式的高速缓存数据库

    Memcache是一套分布式的高速缓存系统,由LiveJournal的Brad Fitzpatrick开发,但目前被许多网站使用以提升网站的访问速度,尤其对于一些大型的、需要频繁访问数据库的网站访问速度提升效果十分显著。这是一套开放源代码软件,以BSD license授权发布。

    MemCache的工作流程如下:先检查客户端的请求数据是否在memcached中,如有,直接把请求数据返回,不再对数据库进行任何操作;如果请求的数据不在memcached中,就去查数据库,把从数据库中获取的数据返回给客户端,同时把数据缓存一份到memcached中;每次更新数据库的同时更新memcached中的数据,保证一致性;当分配给memcached内存空间用完之后,会使用LRU(Least Recently Used,最近最少使用)策略加上到期失效策略,失效数据首先被替换,然后再替换掉最近未使用的数据。

        Memcache是一个高性能的分布式的内存对象缓存系统,通过在内存里维护一个统一的巨大的hash表,它能够用来存储各种格式的数据,包括图像、视频、文件以及数据库检索的结果等。简单的说就是将数据调用到内存中,然后从内存中读取,从而大大提高读取速度。

2. Memcache与Redis的对比


1. 存储方式   

    Memcache的数据全部是存在在内存中的,如果memcache重启了,服务器关机重启,数据就会丢失,数据的大小不能超过内存的大小。

    Redis有部分数据存储在磁盘中,持久化特性。保证数据的完整性。

    Memcache可以存储视频图片等。

2. 数据支持类型

    Memcache支持的数据比较单一简单,只支持k-v结构    keys    value

    Redis支持的数据类型复杂化,字符串  列表  哈希  集合  有序集合

3. 使用底层模型不同


4. value大小

    Memcache支持1M   Redis支持1GB

5. 数据恢复

    Memcache数据不能恢复    Redis数据丢失可以根据AOF日志恢复

6. 应用场景不同

    1. 如果需要持久化方面的要求,建议使用Redis        企业主流

    2. 如果你的存储数据只是k-v结构,建议使用Memcache   电商公司

3. Session与Cookie介绍


总结一下:

Session是在服务端保存的一个数据结构,用来跟踪用户的状态,这个数据可以保存在集群、数据库、文件中;

Cookie是客户端保存用户信息的一种机制,用来记录用户的一些信息,也是实现Session的一种方式。

session主要用于服务端存储用户会话信息,cookie用于浏览器存储用户会话信息。

4. 会话共享实战


两台Web服务器    7   8    Nginx+php   使用www用户管理

一台数据库       51         Mariadb

一台负载均衡      6         Nginx


#部署网站


[root@web01 /etc/nginx/conf.d]# cat  phpmyadmin.conf 
server {
    listen       80;
    server_name  qls.phpmyadmin.com;
    location / {
        root   /code/phpmyadmin;
        index  index.php index.html;
    }
    location ~ \.php$ {
        root           /code/phpmyadmin;
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include        fastcgi_params;
    }
}


[root@web01 ~]# mkdir /code
[root@web01 ~]# cd /code
[root@web01 /code]# rz

[root@web01 /code]# ll
total 14116
-rw-r--r-- 1 root root 14453056 2020-04-02 11:14 phpMyAdmin-5.0.0-rc1-all-languages.zip
[root@web01 /code]# unzip -q phpMyAdmin-5.0.0-rc1-all-languages.zip 


[root@web01 ~]# chown -R www.www  /var/lib/php/session
[root@web01 ~]# cd /code/phpmyadmin/
[root@web01 /code/phpmyadmin]# cp config.sample.inc.php  config.inc.php 
[root@web01 /code/phpmyadmin]# vim config.inc.php
[root@web01 /code/phpmyadmin]# 
[root@web01 /code/phpmyadmin]# grep '10.0.0.51' config.inc.php
$cfg['Servers'][$i]['host'] = '10.0.0.51';


[root@web01 ~]# tar czf code.tar.gz /code
tar: Removing leading `/' from member names
[root@web01 ~]# scp -rp code.tar.gz  root@10.0.0.8:
root@10.0.0.8's password: 
code.tar.gz                                           

[root@web01 /code/phpmyadmin]# ll /var/lib/php/session
total 4
-rw------- 1 www www 2668 2020-04-02 11:29 sess_f2bf1ad32d8edbee19b6e58b9acc25c1


#实现多个数据库登录
[root@web01 /code/phpmyadmin]# vim  libraries/config.default.php
 828 $cfg['AllowArbitraryServer'] = true;

[root@web01 /code/phpmyadmin]# vim config.inc.php

/* Authentication type */
$cfg['Servers'][$i]['auth_type'] = 'cookie';
/* Server parameters */
$cfg['Servers'][$i]['host'] = '10.0.0.51';
$cfg['Servers'][$i]['compress'] = false;
$cfg['Servers'][$i]['AllowNoPassword'] = false;
$cfg['Servers'][$i]['host'] = '10.0.0.6';
$cfg['Servers'][$i]['compress'] = false;
$cfg['Servers'][$i]['AllowNoPassword'] = false;


#配置负载均衡

[root@lb01 /etc/nginx/conf.d]# cat proxy.conf
upstream phpmyadmin {
    server 172.16.1.7;
    server 172.16.1.8;
}
server {
    listen       80;
    server_name  qls.phpmyadmin.com;
    location / {
    proxy_pass  http://phpmyadmin;
    proxy_set_header  Host $host;
    proxy_set_header X-Forwarded-For $remote_addr;
    }
}
[root@lb01 /etc/nginx/conf.d]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@lb01 /etc/nginx/conf.d]# systemctl  restart nginx

#安装部署Memcache   服务端

[root@db01 ~]# yum install libevent  libevent-devel  -y 

[root@db01 ~]# yum install -y memcached

[root@db01 ~]# systemctl start memcached.service 

[root@db01 ~]# netstat  -lntp     
tcp        0      0 0.0.0.0:11211           0.0.0.0:*               LISTEN      9277/memcached  



#web端 


[root@web01 ~]# yum -y install php71w php71w-cli php71w-common php71w-devel php71w-embedded php71w-gd php71w-mcrypt php71w-mbstring php71w-pdo php71w-xml php71w-fpm php71w-mysqlnd php71w-opcache php71w-pecl-memcached


[root@web01 ~]# yum install -y php71w-pecl-memcached


[root@web01 ~/pecl-memcache]# ll
total 120
-rw-r--r-- 1 root root  1713 2020-04-02 14:45 cloudbuild.yaml
-rw-r--r-- 1 root root  4547 2020-04-02 14:45 config9.m4
-rw-r--r-- 1 root root    67 2020-04-02 14:45 config.m4
-rw-r--r-- 1 root root  1079 2020-04-02 14:45 config.w32
-rw-r--r-- 1 root root    32 2020-04-02 14:45 CREDITS
drwxr-xr-x 2 root root    39 2020-04-02 14:45 docker
-rw-r--r-- 1 root root   201 2020-04-02 14:45 Dockerfile
-rw-r--r-- 1 root root   509 2020-04-02 14:45 example.php
-rw-r--r-- 1 root root  3208 2020-04-02 14:45 LICENSE
-rw-r--r-- 1 root root 29064 2020-04-02 14:45 memcache.php
-rw-r--r-- 1 root root 29325 2020-04-02 14:45 package.xml
drwxr-xr-x 2 root root   299 2020-04-02 14:45 php7
-rw-r--r-- 1 root root  5848 2020-04-02 14:45 profile.php
-rw-r--r-- 1 root root  5888 2020-04-02 14:45 README
drwxr-xr-x 2 root root  4096 2020-04-02 14:45 tests
[root@web01 ~/pecl-memcache]# phpize         #安装扩展库
Configuring for:
PHP Api Version:         20160303
Zend Module Api No:      20160303
Zend Extension Api No:   320160303
[root@web01 ~/pecl-memcache]# ll
total 1472
-rw-r--r-- 1 root root  84357 2020-04-02 14:52 acinclude.m4
-rw-r--r-- 1 root root 394382 2020-04-02 14:52 aclocal.m4
drwxr-xr-x 2 root root     54 2020-04-02 14:52 autom4te.cache
drwxr-xr-x 2 root root    115 2020-04-02 14:52 build
-rw-r--r-- 1 root root   1713 2020-04-02 14:45 cloudbuild.yaml
-rw-r--r-- 1 root root   4547 2020-04-02 14:45 config9.m4
-rwxr-xr-x 1 root root  45297 2020-04-02 14:52 config.guess
-rw-r--r-- 1 root root   1850 2020-04-02 14:52 config.h.in
-rw-r--r-- 1 root root     67 2020-04-02 14:45 config.m4
-rwxr-xr-x 1 root root  35454 2020-04-02 14:52 config.sub
-rwxr-xr-x 1 root root 419847 2020-04-02 14:52 configure
-rw-r--r-- 1 root root   4684 2020-04-02 14:52 configure.in
-rw-r--r-- 1 root root   1079 2020-04-02 14:45 config.w32
-rw-r--r-- 1 root root     32 2020-04-02 14:45 CREDITS
drwxr-xr-x 2 root root     39 2020-04-02 14:45 docker
-rw-r--r-- 1 root root    201 2020-04-02 14:45 Dockerfile
-rw-r--r-- 1 root root    509 2020-04-02 14:45 example.php
-rw-r--r-- 1 root root      0 2020-04-02 14:52 install-sh
-rw-r--r-- 1 root root   3208 2020-04-02 14:45 LICENSE
-rw-r--r-- 1 root root 283474 2020-04-02 14:52 ltmain.sh
-rw-r--r-- 1 root root   7156 2020-04-02 14:52 Makefile.global
-rw-r--r-- 1 root root  29064 2020-04-02 14:45 memcache.php
-rw-r--r-- 1 root root      0 2020-04-02 14:52 missing
-rw-r--r-- 1 root root      0 2020-04-02 14:52 mkinstalldirs
-rw-r--r-- 1 root root  29325 2020-04-02 14:45 package.xml
drwxr-xr-x 2 root root    299 2020-04-02 14:45 php7
-rw-r--r-- 1 root root   5848 2020-04-02 14:45 profile.php
-rw-r--r-- 1 root root   5888 2020-04-02 14:45 README
-rw-r--r-- 1 root root  82608 2020-04-02 14:52 run-tests.php
drwxr-xr-x 2 root root   4096 2020-04-02 14:45 tests

[root@web01 ~/pecl-memcache]# yum install -y zlib-devel


[root@web01 ~/pecl-memcache]# ./configure


[root@web01 ~/pecl-memcache]# make

[root@web01 ~/pecl-memcache]# make  install
Installing shared extensions:     /usr/lib64/php/modules/


[root@web01 ~/pecl-memcache]# tail -2 /etc/php.ini
extension_dir = "/usr/lib64/php/modules/"
extension = memcache.so

[root@web01 ~/pecl-memcache]# 
[root@web01 ~/pecl-memcache]# systemctl  restart php-fpm.service


[root@web01 /code/phpmyadmin]# cat info_php.php
<?php
    phpinfo();
?>


[root@web01 /code/phpmyadmin]# chown  www.www info_php.php

[root@web01 /code/phpmyadmin]# cat>/code/phpmyadmin/test_memcache.php<<"EOF"
> <?php
> $memcache = new Memcache;
> $memcache->connect('172.16.1.51', 11211) or die ("Could not connect server");
> $memcache->set('key', 'Memcache connect OK');
> $get = $memcache->get('key');
> echo $get;
> ?>
> EOF
[root@web01 /code/phpmyadmin]# 
[root@web01 /code/phpmyadmin]# php /code/phpmyadmin/test_memcache.php
Memcache connect OK[root@web01 /code/phpmyadmin]# 


[root@web01 /code/phpmyadmin]# grep -E '^session' /etc/php.ini
session.save_handler = memcache
session.save_path = "tcp://172.16.1.51:11211"


[root@web01 /code/phpmyadmin]# tail -4 /etc/php-fpm.d/www.conf
;php_value[session.save_handler] = files
;php_value[session.save_path]    = /var/lib/php/session
php_value[soap.wsdl_cache_dir]  = /var/lib/php/wsdlcache


[root@web01 /code/phpmyadmin]# systemctl  restart php-fpm.service


[root@web01 /code/phpmyadmin]# scp -rp /etc/php.ini  root@10.0.0.8:/etc/php.ini
root@10.0.0.8's password: 
php.ini                                                                                             100%   61KB  11.9MB/s   00:00    
[root@web01 /code/phpmyadmin]# scp -rp /etc/php-fpm.d/www.conf  root@10.0.0.8:/etc/php-fpm.d/www.conf 
root@10.0.0.8's password: 
www.conf                                                                                            100%   18KB   8.8MB/s   00:00    


[root@web02 ~/pecl-memcache]# systemctl  restart php-fpm.service


http://pecl.php.net/package/memcache


[root@db01 ~]# telnet  127.0.0.1 11211
stats items 
stats cachedump 16 0
ITEM 99ddeb67ecb87a8df59c397ddc6fccd0 [2668 b; 1585813240 s]
Copyright © 高程程 all right reserved,powered by Gitbook修订于: 2021-05-18 21:14:36

results matching ""

    No results matching ""