建议:windows系统下仅为测试所有,生产环境下服务端应使用Linux系统。
本文最后更新于:2014-08-03 18:24
原文:http://www.yaosansi.com/post/memcached-on-windows

Memcached介绍

Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提供动态、数据库驱动网站的速度。Memcached基于一个存储键/值对的hashmap。其守护进程(daemon )是用C写的,但是客户端可以用任何语言来编写,并通过memcached协议与守护进程通信。但是它并不提供冗余(例如,复制其hashmap条目);当某个服务器S停止运行或崩溃了,所有存放在S上的键/值对都将丢失。

百度百科baike.baidu.com/view/794242.htm

Memcached官方: http://memcached.org/

Windows版本下载与安装

下载地址

memcached 1.4.4 for Windows 32-bit

安装Memcache为系统服务
  1. 下载memcached的windows稳定版,解压放某个盘下面,比如在c:\memcached
  2. 在CMD下输入 “c:\memcached\memcached.exe -d install“ 安装.
  3. 再输入:”c:\memcached\memcached.exe -d start“ 启动。

NOTE:
也可以不安装直接启动
以后memcached将作为windows的一个服务每次开机时自动启动。这样服务器端已经安装完毕了。

如果下载的是二进制的版本,直接运行就可以了,可以加上参数来加以设置。

常用命令
  1. -p <num> 监听的端口
    -l <ip_addr> 连接的IP地址, 默认是本机
    -d start 启动memcached服务
    -d restart 重起memcached服务
    -d stop|shutdown 关闭正在运行的memcached服务
    -d install 安装memcached服务
    -d uninstall 卸载memcached服务
    -u <username> 以<username>的身份运行 (仅在以root运行的时候有效)
    -m <num> 最大内存使用,单位MB。默认64MB
    -M 内存耗尽时返回错误,而不是删除项
    -c <num> 最大同时连接数,默认是1024
    -f <factor> 块大小增长因子,默认是1.25
    -n <bytes> 最小分配空间,key+value+flags默认是48
    -h 显示帮助

然后就可以用.net 的memcached客户端来试一下了。

客户端使用

C#下可用的library

每个客户端API中都有详细的说明和注释

博客园使用的组合为: couchbase+EnyimMemcached http://www.couchbase.com/

一致性hash算法
  • memcache的一致性hash算法使用
    1. public class KetamaNodeLocator
    2. {
    3. //原文中的JAVA类TreeMap实现了Comparator方法,这里我图省事,直接用了net下的SortedList,其中Comparer接口方法)
    4. private SortedList<long, string> ketamaNodes = new SortedList<long, string>();
    5. private HashAlgorithm hashAlg;
    6. private int numReps = 160;
    7.  
    8. //此处参数与JAVA版中有区别,因为使用的静态方法,所以不再传递HashAlgorithm alg参数
    9. public KetamaNodeLocator(List<string> nodes, int nodeCopies)
    10. {
    11. ketamaNodes = new SortedList<long, string>();
    12.  
    13. numReps = nodeCopies;
    14. //对所有节点,生成nCopies个虚拟结点
    15. foreach (string node in nodes)
    16. {
    17. //每四个虚拟结点为一组
    18. for (int i = 0; i < numReps / 4; i++)
    19. {
    20. //getKeyForNode方法为这组虚拟结点得到惟一名称
    21. byte[] digest = HashAlgorithm.computeMd5(node + i);
    22. /** Md5是一个16字节长度的数组,将16字节的数组每四个字节一组,分别对应一个虚拟结点,这就是为什么上面把虚拟结点四个划分一组的原因*/
    23. for (int h = 0; h < 4; h++)
    24. {
    25. long m = HashAlgorithm.hash(digest, h);
    26. ketamaNodes[m] = node;
    27. }
    28. }
    29. }
    30. }
    31.  
    32. public string GetPrimary(string k)
    33. {
    34. byte[] digest = HashAlgorithm.computeMd5(k);
    35. string rv = GetNodeForKey(HashAlgorithm.hash(digest, 0));
    36. return rv;
    37. }
    38.  
    39. string GetNodeForKey(long hash)
    40. {
    41. string rv;
    42. long key = hash;
    43. //如果找到这个节点,直接取节点,返回
    44. if (!ketamaNodes.ContainsKey(key))
    45. {
    46. //得到大于当前key的那个子Map,然后从中取出第一个key,就是大于且离它最近的那个key 说明详见: http://www.javaeye.com/topic/684087
    47. var tailMap = from coll in ketamaNodes
    48. where coll.Key > hash
    49. select new { coll.Key };
    50. if (tailMap == null || tailMap.Count() == 0)
    51. key = ketamaNodes.FirstOrDefault().Key;
    52. else
    53. key = tailMap.FirstOrDefault().Key;
    54. }
    55. rv = ketamaNodes[key];
    56. return rv;
    57. }
    58. }

下面的代码与JAVA中有所不同,它使用静态方法实现

  1. public class HashAlgorithm
  2. {
  3. public static long hash(byte[] digest, int nTime)
  4. {
  5. long rv = ((long)(digest[3 + nTime * 4] & 0xFF) << 24)
  6. | ((long)(digest[2 + nTime * 4] & 0xFF) << 16)
  7. | ((long)(digest[1 + nTime * 4] & 0xFF) << 8)
  8. | ((long)digest[0 + nTime * 4] & 0xFF);
  9.  
  10. return rv & 0xffffffffL; /* Truncate to 32-bits */
  11. }
  12.  
  13. /**
  14. * Get the md5 of the given key.
  15. */
  16. public static byte[] computeMd5(string k)
  17. {
  18. MD5 md5 = new MD5CryptoServiceProvider();
  19.  
  20. byte[] keyBytes = md5.ComputeHash(Encoding.UTF8.GetBytes(k));
  21. md5.Clear();
  22. //md5.update(keyBytes);
  23. //return md5.digest();
  24. return keyBytes;
  25. }
  26. }

 

Linux系统安装memcached

  1. wget http://memcached.org/latest
    tar -zxvf memcached-1.x.x.tar.gz
    cd memcached-1.x.x
    ./configure --prefix=/usr/local/memcached
    make && make test
    sudo make install
Ubuntu & Debian

apt-get install memcached

Redhat/Fedora

yum install memcached

FreeBSD

portmaster databases/memcached

参考

Memcached在windows下安装与使用的更多相关文章

  1. memcached 在windows下安装及启动

    memcached 在windows下安装及启动   Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数, ...

  2. windows下安装redis和memcached

    redis安装: http://www.68idc.cn/help/server/20141128135092.html phpredis下载地址:https://github.com/phpredi ...

  3. memcached在Windows下的安装

    memcached简介详情请谷歌.这里介绍如何在windows下安装. 1.下载     下载地址:http://download.csdn.net/detail/u010562988/9456109 ...

  4. Windows下安装PHP扩展及资源下载地址(memcached为例)

    官方下载的php安装包ext目录里以经包含了常用的php扩展,但某些情况下并不能满足我们项目需求,比如memcache扩展就不在官方的php安装包里.这时就需要我们自己去下载安装. 本文列出php官方 ...

  5. Windows 下安装 Memcached

    Windows 下安装 Memcached 官网上并未提供 Memcached 的 Windows 平台安装包,我们可以使用以下链接来下载,你需要根据自己的系统平台及需要的版本号点击对应的链接下载即可 ...

  6. Redis在windows下安装和PHP中使用

    1.redis简介redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合).zset(so ...

  7. <转>windows下安装redis

    1.redis简介redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合).zset(so ...

  8. windows下安装redis和php的redis扩展

    1.redis简介 redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合).zset(s ...

  9. (转)Memcached 在windows下的java使用

    Memcached 在windows下的java使用   研究这个东东主要是为了解决在教务管理中选课系统的大并发情况下数据库频繁读写造成速度慢的问题,但要使用WEB服务器的内存,是不是可靠还需要验证, ...

随机推荐

  1. HTTP请求方法详解

    HTTP请求方法详解 请求方法:指定了客户端想对指定的资源/服务器作何种操作 下面我们介绍HTTP/1.1中可用的请求方法: [GET:获取资源]     GET方法用来请求已被URI识别的资源.指定 ...

  2. Win10 UWP 开发系列:使用多语言工具包让应用支持多语言

    之前我在一篇blog中写过如何使用多语言工具包,见http://www.cnblogs.com/yanxiaodi/p/3800767.html 在WinEcos社区也发布过一篇详细的文章介绍多语言工 ...

  3. 重新想象 Windows 8.1 Store Apps (81) - 控件增强: WebView 之加载本地 html, 智能替换 html 中的 url 引用, 通过 Share Contract 分享 WebView 中的内容, 为 WebView 截图

    [源码下载] 重新想象 Windows 8.1 Store Apps (81) - 控件增强: WebView 之加载本地 html, 智能替换 html 中的 url 引用, 通过 Share Co ...

  4. 解决.NET WebService引用后添加HTTP Header的问题

    麻蛋,搜索了好久,找到的都是对soap header的操作,不是对WebService的HTTP Header的操作,这是两种不同的概念,平常我们发起的WebService请求走的都是http通信协议 ...

  5. JFreechart在linux下不显示及中文乱码问题

    一.使用JFreeChart建的报表,在window下能正常显示,但是放到linux下就报错,而且有时候会把tomcat挂掉, 原因是jfreechart的在linux系统中需要访问java awt库 ...

  6. DES加密中文乱码问题的解决

    服务器向客户端返回时: response.setContentType("text/json; charset=utf-8"); 客户端解码时: return new String ...

  7. 如何实现一个php框架系列文章【1】如何组织文件

    1. 组织文件布局应该考虑什么问题 前后端分离 各业务模块分离但方便互相调用 上传文件安全性 方便接入第三方类库 如图所示 框架入口文件 uct/index.php 框架目录         uct/ ...

  8. Java中2+2==5解读

    先来看一段程序,如下: package basic; import java.lang.reflect.Field; public class TestField { public static vo ...

  9. placeholder不兼容 IE10 以下版本的解决方法

    对于密码输入框placeholder的兼容问题:HTML代码:<input type="password" id="loginPassword" plac ...

  10. 搭建基于 STM32 和 rt-thread 的开发平台

    我们需要平台 如果说,SharePoint 的价值之一在于提供了几乎开箱即用的 innovation 环境,那么,智能设备的开发平台也一样.不必每次都从头开始,所以需要固定的工作室和开发平台作为创新的 ...