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]
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 ~]
[root@web01 ~]
[root@web01 /code]
[root@web01 /code]
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]
[root@web01 ~]
[root@web01 ~]
[root@web01 /code/phpmyadmin]
[root@web01 /code/phpmyadmin]
[root@web01 /code/phpmyadmin]
[root@web01 /code/phpmyadmin]
$cfg['Servers'][$i]['host'] = '10.0.0.51';
[root@web01 ~]
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]
total 4
-rw------- 1 www www 2668 2020-04-02 11:29 sess_f2bf1ad32d8edbee19b6e58b9acc25c1
[root@web01 /code/phpmyadmin]
828 $cfg['AllowArbitraryServer'] = true;
[root@web01 /code/phpmyadmin]
/* 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]
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: 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]
[root@db01 ~]
[root@db01 ~]
[root@db01 ~]
[root@db01 ~]
tcp 0 0 0.0.0.0:11211 0.0.0.0:* LISTEN 9277/memcached
[root@web01 ~]
[root@web01 ~]
[root@web01 ~/pecl-memcache]
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]
Configuring for:
PHP Api Version: 20160303
Zend Module Api No: 20160303
Zend Extension Api No: 320160303
[root@web01 ~/pecl-memcache]
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]
[root@web01 ~/pecl-memcache]
[root@web01 ~/pecl-memcache]
[root@web01 ~/pecl-memcache]
Installing shared extensions: /usr/lib64/php/modules/
[root@web01 ~/pecl-memcache]
extension_dir = "/usr/lib64/php/modules/"
extension = memcache.so
[root@web01 ~/pecl-memcache]
[root@web01 ~/pecl-memcache]
[root@web01 /code/phpmyadmin]
<?php
phpinfo();
?>
[root@web01 /code/phpmyadmin]
[root@web01 /code/phpmyadmin]
> <?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]
Memcache connect OK[root@web01 /code/phpmyadmin]
[root@web01 /code/phpmyadmin]
session.save_handler = memcache
session.save_path = "tcp://172.16.1.51:11211"
[root@web01 /code/phpmyadmin]
;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]
[root@web01 /code/phpmyadmin]
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]
http://pecl.php.net/package/memcache
[root@db01 ~]
stats items
stats cachedump 16 0
ITEM 99ddeb67ecb87a8df59c397ddc6fccd0 [2668 b; 1585813240 s]