Memcache的hash策略及配置总结
来源:互联网 发布:思途cms6.0源码 编辑:程序博客网 时间:2024/05/20 16:09
Memcach是web应用/ Drupal 应用性能提高的利器,近期在使用 Memcache 中,发现有很多小问题,因此作者特意总结了几个,放上来供大家参考使用。
1. Memcache和Memcached的区别
这个是历史问题,但是,言而总之:名字长的更牛逼!
所以,推荐使用memcached。
另外,memcached有很多新特性,包括getMulti/setMulti、支持存储object、支持count+1操作,都会比memcache的好用一些,可以试试,或许以后支持更多的操作,赶上redis。。
Drupal大学 上关于memcache的问答: http://../apachesolr_search/memcache
如下(摘自德问):
#Memcache$m = new Memcache();$m->addServer('localhost', 11211);$v = $m->get('counter');$m->set('counter', $v + 1); #由于get/set这两个动作无法作为一个原子来操作,所以当多个进程同时处理时,#会出现丢失的可能,更让人恼火的是,你根本就不知道什么时候出现丢失。#Memcached$md = new Memcached();$md->addServer('localhost', 11211);$v = $md->get('counter', null, $token)$md->cas($token, 'counter', $v + 1);#cas是Memcached版本里提供的功能,说白了就是一个乐观锁的功能,#如果你把$token的值var_dump出来,就会发现$token其实就是一个版本号,#如果通过get得到的$token版本号在cas的时候不对应,就说明已经有别的操作更新了,#此时cas操作会失败,至于如何继续操作,就看你自己了
两者的区别如下,下面是Memcache的方法:
下面是memcached的方法:
2. Memcache的哈希策略
常规的hash策略是取模,比如key=10, 有两台服务,就10%2=0,算出该值分布在第一台服务器上。
那么缺点也很明显,比如服务器增加一台,之前的分布式策略全完蛋。
因此,业界需要更牛逼的算法~
一致性hash算法隆重登场!
简单说来,一致性hash算法就是先把服务器也通过某一个特征(如IP/MAC地址)hash一下,这样服务器会按照分布(可能不均匀)在一个范围,然后把key再hash一下,然后看key最近的下个服务器作为该key的存储bin。
这样,如果增加一台服务器,重新分配的key只是分布再新增的这个服务器和上一个最近的服务器之间的key,其余的都不变。
初步的服务器分布:
增加服务器的分布:
上面的描述的是白话,可能比较拗口,笔者文字水平有限,详情见下面的链接:
http://blogread.cn/it/article/5271
http://blog.csdn.net/kongqz/article/details/669541 7
3. Memcache的hash策略配置
Memcache安装完成之后,可以设置哈希策略,memcache.hash_strategy。目前有standard模式和consistent模式。standard模式其实就是%,即取模。而consistent,就是hash的一致性算法。
在Memcache中,hash策略在PHP.ini文件中设置
[Memcache] Memcache.allow_failover = 1 …… …… Memcache.hash_strategy =consistent Memcache.hash_function =crc32
在Memcached中,hash策略在PHP的参数中设置:
mem = new memcached(); $mem->setOption(Memcached::OPT_DISTRIBUTION,Memcached::DISTRIBUTION_CONSISTENT); $mem->setOption(Memcached::OPT_LIBKETAMA_COMPATIBLE,true);
4. 后记
因此正常情况下,推荐使用一致性哈希算法,但凡事无绝对,比如一个小的站点,memcache的服务几乎永不会增加,这是用常规的standard的算法也是比较推荐的,毕竟一致性算法存在一个均匀分布的问题(可能已经解决了。。)
打完收工!
- Memcache的hash策略及配置总结
- memcache的配置及使用
- Memcache学习总结3-Memcache的配置项详解
- memcache的安装配置及使用
- memcache的分布式hash算法
- memcache的一致性hash算法
- memcache的一致性hash算法
- Memcache学习总结1-Memcache与Memcached介绍及安装配置
- Memcache Hash算法值得探索的内容
- Memcache Hash算法值得探索的内容
- memcache的一致性hash算法使用
- memcache的一致性hash算法使用
- Memcache的一致性 Hash 算法(Consistent hashing)
- [转]memcache的一致性hash算法使用
- Memcache Hash算法值得探索的内容
- memcache的一致性hash算法使用
- memcache的一致性hash算法使用
- memcache的一致性hash算法使用
- 2017.4.24学习记录
- EntityFramework Core 1.1 Add、Attach、Update、Remove方法如何高效使用详解
- PHP Trait学习
- EMV/PBOC 解析(一) 卡片文件结构
- c#问题笔记
- Memcache的hash策略及配置总结
- Java 读取properties配置文件
- EntityFramework Core 1.1有哪些新特性呢?
- EL表达式 easyui年月
- 先来先服务算法(FCFS java实现)
- UVa 725
- SQL查询效率
- EntityFramework Core解决并发详解
- MySQL config in Django