使用memcache同步session并协调缓存

在上一篇文章中菠菜园向大家简单的介绍了负载均衡及相关配置,我们也知道网站一旦使用了负载均衡,就会存在session同步的问题。而利用memcache来实现session的同步是一个非常不错的解决方案。

memcache

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数据的共享问题。

  1. ini_set("session.save_handler""memcache");
  2. ini_set("session.save_path""tcp://127.0.0.1:11211");
  3. session_start();

PHP.ini修改:

  1. session.save_handler = memcache
  2. session.save_path = "tcp://127.0.0.1:11211"

共享session就是这么简单。O(∩_∩)O

Memcache的安全:

memcache本身没有权限控制模块,所以开放在外网的memcache服务很容易被攻击者扫描发现,通过命令交互可直接读取memcache中的敏感信息。解决这个问题可以按照以下方案:

  1. memcached -d -m 1024 -u root -l 127.0.0.1 -p 11211 -c 1024 -P /tmp/memcached.pid
  2. 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,欢迎大家积极投稿。

  • 版权声明: 本文源自 菠菜园, 于8年前,由整理发表,共 1543字。
  • 原文链接:点此查看原文
你想把广告放到这里吗?

发表评论

您必须 登录 才能发表留言!