分布式缓存系统 Memcached 【转载】
本文转载自
http://www.cnblogs.com/zjneter/archive/2007/07/19/822780.html
缘起: 在数据驱动的web开发中,经常要重复从数据库中取出相同的数据,这种重复极大的增加了数据库负载。缓存是解决这个问题的好办法。但是ASP.NET中的虽然已经可以实现对页面局部进行缓存,但还是不够灵活。此时Memcached或许是你想要的。
Memcached是什么?
Memcached是由Danga Interactive开发的,高性能的,分布式的内存对象缓存系统,用于在动态应用中减少数据库负载,提升访问速度。
Memcached能缓存什么?
通过在内存里维护一个统一的巨大的hash表,Memcached能够用来存储各种格式的数据,包括图像、视频、文件以及数据库检索的结果等。
Memcached快么?
非常快。Memcached使用了libevent(如果可以的话,在linux下使用epoll)来均衡任何数量的打开链接,使用非阻塞的网络I/O,对内部对象实现引用计数(因此,针对多样的客户端,对象可以处在多样的状态), 使用自己的页块分配器和哈希表, 因此虚拟内存不会产生碎片并且虚拟内存分配的时间复杂度可以保证为O(1).。
Danga Interactive为提升Danga Interactive的速度研发了Memcached。目前,LiveJournal.com每天已经在向一百万用户提供多达两千万次的页面访问。而这些,是由一个由web服务器和数据库服务器组成的集群完成的。Memcached几乎完全放弃了任何数据都从数据库读取的方式,同时,它还缩短了用户查看页面的速度、更好的资源分配方式,以及Memcache失效时对数据库的访问速度。
Memcached的特点
Memcached的缓存是一种分布式的,可以让不同主机上的多个用户同时访问, 因此解决了共享内存只能单机应用的局限,更不会出现使用数据库做类似事情的时候,磁盘开销和阻塞的发生。
Memcached的使用
一 Memcached服务器端的安装 (此处将其作为系统服务安装)
下载文件:memcached 1.2.1 for Win32 binaries (Dec 23, 2006)
1 解压缩文件到c:\memcached
2 命令行输入 'c:\memcached\memcached.exe -d install'
3 命令行输入 'c:\memcached\memcached.exe -d start' ,该命令启动 Memcached ,默认监听端口为 11211
通过 memcached.exe -h 可以查看其帮助
二 .NET memcached client library
下载文件:https://sourceforge.net/projects/memcacheddotnet/
里面有.net1.1 和 .net2.0的两种版本 还有一个不错的例子。
三 应用
1 将Commons.dll,ICSharpCode.SharpZipLib.dll,log4net.dll,Memcached.ClientLibrary.dll 等放到bin目录
2 引用Memcached.ClientLibrary.dll
3 代码
1 namespace Memcached.MemcachedBench
2 {
3 using System;
4 using System.Collections;
5
6 using Memcached.ClientLibrary;
7
8 public class MemcachedBench
9 {
10 [STAThread]
11 public static void Main(String[] args)
12 {
13 string[] serverlist = { "10.0.0.131:11211", "10.0.0.132:11211" };
14
15 //初始化池
16 SockIOPool pool = SockIOPool.GetInstance();
17 pool.SetServers(serverlist);
18
19 pool.InitConnections = 3;
20 pool.MinConnections = 3;
21 pool.MaxConnections = 5;
22
23 pool.SocketConnectTimeout = 1000;
24 pool.SocketTimeout = 3000;
25
26 pool.MaintenanceSleep = 30;
27 pool.Failover = true;
28
29 pool.Nagle = false;
30 pool.Initialize();
31
32 // 获得客户端实例
33 MemcachedClient mc = new MemcachedClient();
34 mc.EnableCompression = false;
35
36 Console.WriteLine("------------测 试-----------");
37 mc.Set("test", "my value"); //存储数据到缓存服务器,这里将字符串"my value"缓存,key 是"test"
38
39 if (mc.KeyExists("test")) //测试缓存存在key为test的项目
40 {
41 Console.WriteLine("test is Exists");
42 Console.WriteLine(mc.Get("test").ToString()); //在缓存中获取key为test的项目
43 }
44 else
45 {
46 Console.WriteLine("test not Exists");
47 }
48
49 Console.ReadLine();
50
51 mc.Delete("test"); //移除缓存中key为test的项目
52
53 if (mc.KeyExists("test"))
54 {
55 Console.WriteLine("test is Exists");
56 Console.WriteLine(mc.Get("test").ToString());
57 }
58 else
59 {
60 Console.WriteLine("test not Exists");
61 }
62 Console.ReadLine();
63
64 SockIOPool.GetInstance().Shutdown(); //关闭池, 关闭sockets
65 }
66 }
67 }
4 运行结果
分布式缓存系统 Memcached 【转载】相关推荐
- 分布式缓存系统Memcached简介与实践(.NET memcached client library)
原文:分布式缓存系统Memcached简介与实践(.NET memcached client library) 缘起: 在数据驱动的web开发中,经常要重复从数据库中取出相同的数据,这种重复极大的增加 ...
- .NET下实现分布式缓存系统Memcached
[IT168 技术文档]在Web应用程序中,数据通常保存在RDBMS中,应用服务器从数据库中读取数据并在浏览器中显示.但随着数据量的增大.访问的集中,就会出现RDBMS的负载加重.数据库响应变慢.网站 ...
- php分布式缓存系统 Memcached 入门
Memcached 是一个分布式的缓存系统, 但是 Memcachd 到底是什么意思,有什么作用呢?缓存一般用来保存一些经常被存取的数据和资源(例如:浏览器会将访问过的网页会话缓存起来),因为通过缓存 ...
- 分布式缓存系统Memcached简介与实践
缘起: 在数据驱动的web开发中,经常要重复从数据库中取出相同的数据,这种重复极大的增加了数据库负载.缓存是解决这个问题的好办法.但是ASP.NET中的虽然已经可以实现对页面局部进行缓存,但还是不够灵 ...
- java分布式缓存memcached_分布式缓存系统Memcached学习心得
缘起: 在数据驱动的web开发中,经常要重复从数据库中取出相同的数据,这种重复极大的增加了数据库负载.缓存是解决这个问题的好办法. Memcached是什么? Memcached是由Danga Int ...
- Linux分布式缓存系统——memcached+LAMP环境搭建+监控
概述 memcached简介 Memcached是一个开源.高性能.分布式内存对象缓存系统. Memcached是一种基于内存的key-value存储,用来存储小块的任意数据(字符串.对象),这些数据 ...
- 支持.NET的分布式缓存系统memcached
http://www.infoq.com/news/2007/07/memcached 转载于:https://www.cnblogs.com/didasoft/archive/2007/07/17/ ...
- 分布式缓存系统 Memcached CAS协议
Memcached在1.2.4版本后新增了CAS(Check and Set)协议,主要用于并发控制:memcached中同一个item同时被多个线程(多个客户端)更改的并发问题.CAS协议最本质的东 ...
- 【缓存】分布式缓存系统-DCache、redis、Memcached、SSDB
分布式缓存系统有DCache.redis.Memcached.SSDB等 区别 实际开发中经常使用的分布式缓存系统主要有Redis.MemCache.SSDB,这三者都是KV存储方案,各有优缺,但Re ...
最新文章
- myeclipse莫名其妙的问题
- php动态网页简书,LAMP架构部署和动态网站环境的配置
- 来总结一下在VC中调用COM组件的方法
- 理查德·汉明和他的汉明码
- 基于反射机制的服务代理调用
- 并发工具类【线程安全相关的类】
- 使用Spring Rest和Spring Data JPA和H2以及Spring Boot示例的Restful API
- 当金蝶BOS开发网版主啦,纪念下!^_^
- 翻译java代码软件_apk源代码翻译器|安卓软件apk源代码翻译器下载_V1.0_9号软件下载...
- freemarker转PDF,分页,页眉和页脚,画图
- 海湾5000汉字编码app
- 2060显卡驱动最新版本_我们平时电脑的驱动需要一直更新吗?教你如何正确的维护你的驱动...
- 中兴新支点操作系统上如何查找文件
- bzoj1984 月下“毛景树”
- 学习C C++的必备技能(1)
- 隧道技术_复杂地质的隧道施工技术(下)
- linux ubuntu bionic,在Ubuntu 18.04 Bionic Beaver Linux上安装和设置KVM
- 小米电视android刷机,小米电视怎么root 小米电视如何安装第三方软件 解决方法图解...
- idea debug报错无法调试 Disconnected from the target VM
- 2014acm亚洲区域赛陕西赛总结
热门文章
- IntelliJ Idea工作笔记009---代码没有错,但是在IDEA报错的原因
- SVN工作笔记005---TortoiseSVN SendRpt.exe not found解决方案
- EJB3.0学习笔记---多接口的时,实现类处理方法:
- setsockopt设置socket状态
- win32开发(文件、字体和色彩)
- 计算机应用基础试题号2007,2006-2007计算机应用基础期末试题(A卷).pdf
- c语言loop until用法,流程控制中的while、until、for循环
- python作者 es6_es6之js的类
- java poi读取word中附件_java poi word读取
- php去除html标签 空白,php使用strip_tags()去除html标签仍有空白的解决方法