Memcache的分布式介绍

memcached虽然称为“分布式”缓存服务器,但服务器端并没有“分布式”功能。服务器端仅包括内存存储功能,其实现非常简单。至于memcached的分布式,则是完全由客户端程序库实现的。这种分布式是memcached的最大特点。

Memcached的分布式是什么意思?

这里多次使用了“分布式”这个词,但并未做详细解释。现在开始简单地介绍一下其原理,各个客户端的实现基本相同。

下面假设memcached服务器有node1~node3三台,应用程序要保存键名为“tokyo”“kanagawa”“chiba”“saitama”“gunma”的数据。

图1 分布式简介:准备

首先向memcached中添加“tokyo”。将“tokyo”传给客户端程序库后,客户端实现的算法就会根据“键”来决定保存数据的memcached服务器。服务器选定后,即命令它保存“tokyo”及其值。

图2 分布式简介:添加时

同样,“kanagawa”“chiba”“saitama”“gunma”都是先选择服务器再保存。接下来获取保存的数据。获取时也要将要获取的键“tokyo”传递给函数库。函数库通过与数据保存时相同的算法,根据“键”选择服务器。使用的算法相同,就能选中与保存时相同的服务器,然后发送get命令。只要数据没有因为某些原因被删除,就能获得保存的值。

图3 分布式简介:获取时

这样,将不同的键保存到不同的服务器上,就实现了memcached的分布式。
memcached服务器增多后,键就会分散,即使一台memcached服务器发生故障无法连接,也不会影响其他的缓存,系统依然能继续运行。

Php+memcache实现分布式:

我们PHP的PECL中的Memcache扩展能够有效的解决Memcache的分布式问题,主要的接口就是 addServer() 函数,具体关于addServer()函数的实现可以参考该扩展源代码。那么现在就存在第二个问题,就是说无法同步数据,可以理解为MySQL中Master/Slave的机制,就是说如果我们有多台的Memcache服务器,使用addServer函数的话,每个服务器存储的数据都是唯一的,也就是说每个memcached服务器上存储的数据不是统一的,而是各自保存了不通的数据。

配置使用memcache存储session数据

session.save_handler =
memcache

session.save_path
="tcp://127.0.0.1:11211"

或者某个目录下的 .htaccess :

php_value
session.save_handler"memcache"

php_value
session.save_path 
"tcp://127.0.0.1:11211"

再或者在某个一个应用中:

ini_set("session.save_handler","memcache");

ini_set("session.save_path","tcp://127.0.0.1:11211");

使用多个 memcached
server 时用逗号","隔开,并且和Memcache::addServer() 文档中说明的一样,可以带额外的参数"persistent"、"weight"、"timeout"、"retry_interval"等等,类似这样的:"tcp://host1:port1?persistent=1&weight=2,tcp://host2:port2"。

存session:

版权声明:本文为博主原创文章,未经博主允许不得转载。

最新文章

  1. 使用Ecplise git commit时出现"There are no stages files"
  2. 读javascript高级程序设计08-引用类型之Global、Math、String
  3. linux 下mysql的启动 、调试、排错
  4. c++学习-多态性
  5. 会话跟踪技术——Session
  6. BZOJ_1269_文本编辑器_[AHOI2006]_(Spaly)
  7. 【转】linux设备驱动之MMC SD卡——核心层简单分析
  8. 常用 Linux 命令
  9. git 学习笔记一
  10. activiti框架 数据库设计说明
  11. Swift:Foundation框架中的NS前缀的由来
  12. python多进程并发和多线程并发和协程
  13. IntelliJ IDEA神器使用技巧 慕课
  14. ClassLoader的工作机制
  15. Docker: docker container常用命令实战(2)-数据持久化
  16. java 程序运行过程 简介
  17. linux远程方式,以及基础命令
  18. 顶点与UV
  19. web.xml文件中<mime-mapping>
  20. vector,set常见方法

热门文章

  1. C#实例:5个.net经典例子(窗体与界面设计)
  2. WordPress mb.miniAudioPlayer插件多个跨站脚本漏洞
  3. Scala:(3)数组
  4. ♫【MV*】
  5. Azure 媒体服务的 RTMP 支持和实时编码器
  6. 【转】Android:Animation的简单学习--不错
  7. Makefile第一讲:一个简单的Makefile
  8. (转载)Linux中cp直接覆盖不提示的方法
  9. sql递归函数(自定义函数递归查找) 能返回递归的层次
  10. Centos5.5内核升级