1. 1 Memcache是什么
  2. Memcachedanga.com的一个项目,最早是为 LiveJournal 服务的,目前全世界不少人使用这个缓存项目来构建自己大负载的网站,来分担数据库的压力。
  3. 它可以应对任意多个连接,使用非阻塞的网络IO
    由于它的工作机制是在内存中开辟一块空间,然后建立一个HashTableMemcached自管理这些HashTable
  4. 为什么会有Memcachememcached两种名称?
  5. 其实Memcache是这个项目的名称,而memcached是它服务器端的主程序文件名,
  6.  
  7. Memcache官方网站:http://www.danga.com/memcached,
  8.  
  9. 2 Memcache工作原理
  10.  
  11. 首先 memcached 是以守护程序方式运行于一个或多个服务器中,随时接受客户端的连接操作,客户端可以由各种语言编写,
    目前已知的客户端 API 包括 Perl/PHP/Python/Ruby/Java/C#/C 等等。
    客户端在与 memcached 服务建立连接之后,接下来的事情就是存取对象了,每个被存取的对象都有一个唯一的标识符 key,存取操作均通过这个 key 进行,
    保存到 memcached 中的对象实际上是放置内存中的,并不是保存在 cache 文件中的,这也是为什么 memcached 能够如此高效快速的原因。
    注意,这些对象并不是持久的,服务停止之后,里边的数据就会丢失。
  12.  
  13. 与许多 cache 工具类似,Memcached 的原理并不复杂。它采用了C/S的模式,在 server 端启动服务进程,在启动时可以指定监听的 ip,自己的端口号,
    所使用的内存大小等几个关键参数。一旦启动,服务就一直处于可用状态。Memcached 的目前版本是通过C实现,
    采用了单进程,单线程,异步I/O,基于事件 (event_based) 的服务方式.使用 libevent 作为事件通知实现。
    多个 Server 可以协同工作,但这些 Server 之间是没有任何通讯联系的,每个 Server 只是对自己的数据进行管理。Client 端通过指定 Server 端的 ip 地址(通过域名应该也可以)。
    需要缓存的对象或数据是以 key->value 对的形式保存在Server端。key 的值通过 hash 进行转换,根据 hash 值把 value 传递到对应的具体的某个 Server 上。
    当需要获取对象数据时,也根据 key 进行。
    首先对 key 进行 hash,通过获得的值可以确定它被保存在了哪台 Server 上,然后再向该 Server 发出请求。Client 端只需要知道保存 hash(key) 的值在哪台服务器上就可以了。
  14.  
  15. 其实说到底,memcache 的工作就是在专门的机器的内存里维护一张巨大的 hash 表,来存储经常被读写的一些数组与文件,从而极大的提高网站的运行效率。
  16. 下载WindowsServer
  17.  
  18. 下载地址:http://code.jellycan.com/memcached/
  19.  
  20. 安装Memcache Server(也可以不安装直接启动)
  21.  
  22. 1. 下载memcachedwindows版,解压放某个盘下面,比如在c:/memcached
  23. 2. CMD下输入 "c:/memcached/memcached.exe -d install" 安装.
  24. 3. 再输入:"c:/memcached/memcached.exe -d start" 启动。NOTE: 以后memcached将作为windows的一个服务每次开机时自动启动。这样服务器端已经安装完毕了。
  25.  
  26. 如果下载的是二进制的版本,直接运行就可以了,可以加上参数来加以设置。
  27.  
  28. 常用设置:
  29. -p <num> 监听的端口
  30. -l <ip_addr> 连接的IP地址, 默认是本机
  31. -d start 启动memcached服务
  32. -d restart 重起memcached服务
  33. -d stop|shutdown 关闭正在运行的memcached服务
  34. -d install 安装memcached服务
  35. -d uninstall 卸载memcached服务
  36. -u <username> 以<username>的身份运行 (仅在以root运行的时候有效)
  37. -m <num> 最大内存使用,单位MB。默认64MB
  38. -M 内存耗尽时返回错误,而不是删除项
  39. -c <num> 最大同时连接数,默认是1024
  40. -f <factor> 块大小增长因子,默认是1.25
  41. -n <bytes> 最小分配空间,key+value+flags默认是48
  42. -h 显示帮助
  43.  
  44. windowsMemcached状态查看方法
  45. CMD telnet 127.0.0.1 11211
  46. stats命令
  47. 得到的数据的意义如下:
  48. pid32u,服务器进程ID
  49. uptime32u 服务器运行时间,单位秒。
  50. time 32u 服务器当前的UNIX时间。
  51. version string 服务器的版本号。
  52. curr_items 32u 服务器当前存储的内容数量 Current number of items stored by the server
  53. total_items 32u 服务器启动以来存储过的内容总数。
  54. bytes 64u 服务器当前存储内容所占用的字节数。
  55. curr_connections 32u 连接数量。
  56. total_connections 32u 服务器运行以来接受的连接总数。
  57. connection_structures32u 服务器分配的连接结构的数量。
  58. cmd_get 32u 取回请求总数。
  59. cmd_set 32u 存储请求总数。
  60. get_hits 32u 请求成功的总次数。
  61. get_misses 32u 请求失败的总次数。
  62. bytes_read 64u 服务器从网络读取到的总字节数。
  63. bytes_written 64u 服务器向网络发送的总字节数。
  64. limit_maxbytes 32u 服务器在存储时被允许使用的字节总数。
  65. 上面的描述中32u64u表示32位和64位无符号整数,string表示是string类型数据。
  66. 在本篇中我们通过Socket而不是Telnet连接到Memcached,然后解析返回的数据。
  67.  
  68. JAVA客户端应用
  69. 先下载 java_memcached-release_2.5.1.jar 包,放入lib
  70.  
  71. Manager
  72.  
  73. import java.util.Date;
  74.  
  75. import com.danga.MemCached.MemCachedClient;
  76. import com.danga.MemCached.SockIOPool;
  77.  
  78. public class MemCachedManager {
  79.  
  80. // 创建全局的唯一实例
  81. protected static MemCachedClient mcc = new MemCachedClient();
  82.  
  83. protected static MemCachedManager memCachedManager = new MemCachedManager();
  84.  
  85. // 设置与缓存服务器的连接池
  86. static {
  87. // 服务器列表和其权重
  88. String[] servers = { "127.0.0.1:11211" };
  89. Integer[] weights = { 3 };
  90.  
  91. // 获取socke连接池的实例对象
  92. SockIOPool pool = SockIOPool.getInstance();
  93.  
  94. // 设置服务器信息
  95. pool.setServers(servers);
  96. pool.setWeights(weights);
  97.  
  98. // 设置初始连接数、最小和最大连接数以及最大处理时间
  99. pool.setInitConn(5);
  100. pool.setMinConn(5);
  101. pool.setMaxConn(250);
  102. pool.setMaxIdle(1000 * 60 * 60 * 6);
  103.  
  104. // 设置主线程的睡眠时间
  105. pool.setMaintSleep(30);
  106.  
  107. // 设置TCP的参数,连接超时等
  108. pool.setNagle(false);
  109. pool.setSocketTO(3000);
  110. pool.setSocketConnectTO(0);
  111.  
  112. // 初始化连接池
  113. pool.initialize();
  114.  
  115. // 压缩设置,超过指定大小(单位为K)的数据都会被压缩
  116. mcc.setCompressEnable(true);
  117. mcc.setCompressThreshold(64 * 1024);
  118. }
  119.  
  120. /**
  121. * 保护型构造方法,不允许实例化!
  122. *
  123. */
  124. protected MemCachedManager() {
  125.  
  126. }
  127.  
  128. /**
  129. * 获取唯一实例.
  130. *
  131. * @return
  132. */
  133. public static MemCachedManager getInstance() {
  134. return memCachedManager;
  135. }
  136.  
  137. /**
  138. * 添加一个指定的值到缓存中.
  139. *
  140. * @param key
  141. * @param value
  142. * @return
  143. */
  144. public boolean add(String key, Object value) {
  145. return mcc.add(key, value);
  146. }
  147.  
  148. public boolean add(String key, Object value, Date expiry) {
  149. return mcc.add(key, value, expiry);
  150. }
  151.  
  152. public boolean replace(String key, Object value) {
  153. return mcc.replace(key, value);
  154. }
  155.  
  156. public boolean replace(String key, Object value, Date expiry) {
  157. return mcc.replace(key, value, expiry);
  158. }
  159.  
  160. /**
  161. * 根据指定的关键字获取对象.
  162. *
  163. * @param key
  164. * @return
  165. */
  166. public Object get(String key) {
  167. return mcc.get(key);
  168. }
  169.  
  170. public static void main(String[] args) {
  171. MemCachedManager cache = MemCachedManager.getInstance();
  172. cache.add("hello", 234);
  173. System.out.print("get value : " + cache.get("hello"));
  174. }
  175. }

原作者是谁已经无从考证了,这里表示一下感谢!

windows下Memcached 架设及java应用(转)的更多相关文章

  1. windows下Memcached 架设及java应用

    1  Memcached 介绍   Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提供动态.数据 ...

  2. windows 下用eclipse搭建java、python开发环境

    本人只针对小白!本文只针对小白!本文只针对小白! 最近闲来无事,加上之前虽没有做过eclipse上java.python的开发工作,但一直想尝试一下.于是边查找资料边试验,花了一天时间在自己的机器上用 ...

  3. Windows下Memcached在.Net程序中的实际运用(从Memcached客户端Enyim的库的编译到实际项目运用)

    1.一点基础概念 2.获取EnyimMemcached客户端的源代码并编译出动态库 3.Memcached的服务器安装(windows server) 4.在web项目中实战 一.基础概念 memca ...

  4. windows下通过.bat运行java程序

    在windows下运行Java项目,单独的jar可以使用,java -jar xxx.jar 运行,如果是一个zip包,里面包含了class文件和所依赖的jar的时候,可以使用 (也可以以看看这里): ...

  5. Windows下使用ffmpeg与java实现截取视频缩略图

    [ffmpeg.exe可执行文件获取]: 网上搜索后得到编译好的ffmpeg文件,下载地址:http://download.csdn.net/source/453719 [安装]: 将下载的文件解压, ...

  6. Windows下Memcached安装与配置实例

    环境声明: 服务器: Windows Server 2008r2: Memcached: Memcached 64-bit for Windows(64位) From: http://www.urie ...

  7. Windows下memcached.exe的安装与配置

    D:\PHP\Memcached\memcached.exe -d install D:\PHP\Memcached\memcached.exe –m  1024  -d start 假设安装在:D: ...

  8. Windows下memcached的安装配置

    下载windows 32位或64位 memcached 下载 memcached_dll 1.将第一个包解压放某个盘下面,比如在c:\memcached.2.在终端(也即cmd命令界面)下输入 'c: ...

  9. windows下memcached安装以及php_memcache.dll扩展

    http://kimi.it/258.html http://kimi.it/259.html https://www.cnblogs.com/elenaPeng/p/6877530.html htt ...

随机推荐

  1. DevOps - 版本控制 - Bitbucket

    Bitbucket 使用139邮箱无法收到注册邮件 https://bitbucket.org

  2. JS数组&对象遍历

    遍历的总结,经常用到的,希望帮助你我成长. JS数组遍历: 1,普通for循环 var arr = [1,2,3,4,9]; for ( var i = 0; i <arr.length; i+ ...

  3. Git 项目提交代码及一些常用命令

    在dev_ysg分支 : git add . //把项目添加到仓库 git commit -m "test" // 提交加注释 git push //推到dev_ysg分支上去 g ...

  4. for循环小练习

    for循环是前测试循环语句 for(初始值:判定条件:步长){ 循环语句 } For循环原理: For循环第一次执行:首先执行语句1,然后执行语句2,如果条件为真,向内执行执行循环语句3. 如果条件为 ...

  5. 3.从print到I/O

    为何对双引号念念不忘? >>> print("hello, world!") hello, world!   平x而论,既然在意双引号的去掉,为何不在意括号的去掉 ...

  6. python 使用生成器 来完成 监听文件输入的例子

    def tail(filename):#函数 f = open(filename,encoding='utf-8') while True: line = f.readline() if line.s ...

  7. 基于STM32F103的Max30100心率、血氧检测代码(转载)

    MAX30100是能够读取心率.血氧的传感器,通信方式是通过IIC进行通信.其工作原理是通过红外led灯照射,能够得到心率的ADC值.       MAX30100的寄存器可以分为五类,状态寄存器.F ...

  8. C++ 求阶乘

    #include<iostream> using namespace std; ; //输入阶乘数 int main() { long long factorial[size]; fact ...

  9. HBase java API 的使用范例(增,删,查,扫描)

    编辑pom.xml <dependency> <groupId>org.apache.hbase</groupId> <artifactId>hbase ...

  10. Android面试收集录 2D绘图与动画技术

    1.如何在Android应用程序的窗口上绘制图形? 继承View 实现View中的onDraw()方法 2.如何绘制圆,空心椭圆? canvas.drawArc或canvas.drawCircle方法 ...