在上一篇文章中菠菜园向大家简单的介绍了负载均衡及相关配置,我们也知道网站一旦使用了负载均衡,就会存在session同步的问题。而利用memcache来实现session的同步是一个非常不错的解决方案。
memcache是一套分布式的高速缓存系统,由LiveJournal的Brad Fitzpatrick开发,但目前被许多网站使用以提升网站的访问速度,尤其对于一些大型的、需要频繁访问数据库的网站访问速度提升效果十分显著。
MemCache的工作流程如下:
先检查客户端的请求数据是否在memcached中,如有,直接把请求数据返回,不再对数据库进行任何操作;
如果请求的数据不在memcached中,就去查数据库,把从数据库中获取的数据返回给客户端,同时把数据缓存一份到memcached中(memcached客户端不负责,需要程序明确实现);每次更新数据库的同时更新memcached中的数据,保证一致性;
MemCache的安装:
memcache的安装和配置较为简单,大家可以在官网找到很棒的解决方法。所以菠菜园也不过多的花费篇幅去写了。
开启php关于memcache的扩展:
默认情况下PHP并没有开启memcache的扩展,需要我们手动配置。
windows环境下,我们可以访问php官网:http://pecl.php.net/package/memcache下载扩展包。
将dll复制到 php/ext/
修改php.ini,找到“extension=php_memcache.dll”去掉前面的#号或;号
重启web访问即可开启
linux下安装memcache扩展:
centOs : yum install php-pecl-memcache 从启php即可。
或者在linux下编译安装php的扩展,下载地址同上。
php操作memcache缓存:参考教程>>
使用memcache来保存session:
默认情况下session数据会直接以文件的形式保存在对应的WEB服务器端,但是在面对高并发的集群式服务器架构时,session数据的共享是一个很重要的问题,使用memcache在不同的服务器上共享session数据不仅可以提升session的访问速度,而且也可以很好的解决session数据的共享问题。
- ini_set("session.save_handler", "memcache");
- ini_set("session.save_path", "tcp://127.0.0.1:11211");
- session_start();
PHP.ini修改:
- session.save_handler = memcache
- session.save_path = "tcp://127.0.0.1:11211"
共享session就是这么简单。O(∩_∩)O
Memcache的安全:
memcache本身没有权限控制模块,所以开放在外网的memcache服务很容易被攻击者扫描发现,通过命令交互可直接读取memcache中的敏感信息。解决这个问题可以按照以下方案:
- memcached -d -m 1024 -u root -l 127.0.0.1 -p 11211 -c 1024 -P /tmp/memcached.pid
- iptables -A INPUT -p tcp -s 192.168.0.2 --dport 11211 -j ACCEPT
上述规则的意思是只允许192.168.0.2这个ip对11211端口进行访问。
以上内容就是关于使用memcache同步session并协调缓存的解决方案,敬请关注菠菜园其他精彩文章。如有您对某一方面感兴趣也可发送邮件至502998120#qq.com,欢迎大家积极投稿。