热门标签 | HotTags
当前位置:  开发笔记 > 数据库 > 正文

分布式缓存系统memcached简介与实践

在数据驱动的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. 代码

 namespace Memcached.MemcachedBench
 {
     using System;
     using System.Collections;
 
     using Memcached.ClientLibrary;
 
     public class MemcachedBench 
      {
          [STAThread]
         public static void Main(String[] args) 
          {
            string[] serverlist = { "10.0.0.131:11211", "10.0.0.132:11211" };
 
             //初始化池
              SockIOPool pool = SockIOPool.GetInstance();
              pool.SetServers(serverlist);
 
              pool.InitCOnnections= 3;
              pool.MinCOnnections= 3;
              pool.MaxCOnnections= 5;
 
              pool.SocketCOnnectTimeout= 1000;
              pool.SocketTimeout = 3000;
 
              pool.MaintenanceSleep = 30;
              pool.Failover = true;
 
              pool.Nagle = false;
              pool.Initialize();
 
             // 获得客户端实例
              MemcachedClient mc = new MemcachedClient();
              mc.EnableCompression = false;
 
              Console.WriteLine("------------测   试-----------");
              mc.Set("test", "my value");  //存储数据到缓存服务器,这里将字符串"my value"缓存,key 是"test"
 
             if (mc.KeyExists("test"))   //测试缓存存在key为test的项目
             {
                  Console.WriteLine("test is Exists");
                  Console.WriteLine(mc.Get("test").ToString());  //在缓存中获取key为test的项目
              }
             else
              {
                  Console.WriteLine("test not Exists");
              }
 
              Console.ReadLine();
 
              mc.Delete("test");  //移除缓存中key为test的项目
 
            if (mc.KeyExists("test"))
              {
                  Console.WriteLine("test is Exists");
                  Console.WriteLine(mc.Get("test").ToString());
              }
             else
              {
                  Console.WriteLine("test not Exists");
              }
              Console.ReadLine();
             
              SockIOPool.GetInstance().Shutdown();  //关闭池, 关闭sockets
          }
      }
 }


4. 运行结果


推荐阅读
  • 本文详细介绍了网络存储技术的基本概念、分类及应用场景。通过分析直连式存储(DAS)、网络附加存储(NAS)和存储区域网络(SAN)的特点,帮助读者理解不同存储方式的优势与局限性。 ... [详细]
  • MySQL缓存机制深度解析
    本文详细探讨了MySQL的缓存机制,包括主从复制、读写分离以及缓存同步策略等内容。通过理解这些概念和技术,读者可以更好地优化数据库性能。 ... [详细]
  • 深入理解一致性哈希算法及其应用
    本文详细介绍了分布式系统中的一致性哈希算法,探讨其原理、优势及应用场景,帮助读者全面掌握这一关键技术。 ... [详细]
  • 优化使用Apache + Memcached-Session-Manager + Tomcat集群方案
    本文探讨了使用Apache、Memcached-Session-Manager和Tomcat集群构建高性能Web应用过程中遇到的问题及解决方案。通过重新设计物理架构,解决了单虚拟机环境无法真实模拟分布式环境的问题,并详细记录了性能测试结果。 ... [详细]
  • 在分布式系统中,当多个服务器共同提供服务时,如何高效地将请求路由到正确的服务器是一个关键问题。传统的方法如简单哈希取模在服务器数量变化时会导致大量数据迁移。本文探讨了一致性哈希算法如何有效解决这一问题,确保系统的稳定性和高效性。 ... [详细]
  • 本文深入探讨了分布式文件系统的核心概念及其在现代数据存储解决方案中的应用,特别是针对大规模数据处理的需求。文章不仅介绍了多种流行的分布式文件系统和NoSQL数据库,还提供了选择合适系统的指导原则。 ... [详细]
  • 如何配置Unturned服务器及其消息设置
    本文详细介绍了Unturned服务器的配置方法和消息设置技巧,帮助用户了解并优化服务器管理。同时,提供了关于云服务资源操作记录、远程登录设置以及文件传输的相关补充信息。 ... [详细]
  • 使用Vultr云服务器和Namesilo域名搭建个人网站
    本文详细介绍了如何通过Vultr云服务器和Namesilo域名搭建一个功能齐全的个人网站,包括购买、配置服务器以及绑定域名的具体步骤。文章还提供了详细的命令行操作指南,帮助读者顺利完成建站过程。 ... [详细]
  • 随着网络安全威胁的不断演变,电子邮件系统成为攻击者频繁利用的目标。本文详细探讨了电子邮件系统中的常见漏洞及其潜在风险,并提供了专业的防护建议。 ... [详细]
  • 探讨如何真正掌握Java EE,包括所需技能、工具和实践经验。资深软件教学总监李刚分享了对毕业生简历中常见问题的看法,并提供了详尽的标准。 ... [详细]
  • 深入解析Serverless架构模式
    本文将详细介绍Serverless架构模式的核心概念、工作原理及其优势。通过对比传统架构,探讨Serverless如何简化应用开发与运维流程,并介绍当前主流的Serverless平台。 ... [详细]
  • 从码农到创业者:我的职业转型之路
    在观察了众多同行的职业发展后,我决定分享自己的故事。本文探讨了为什么大多数程序员难以成为架构师,并阐述了我从一家外企离职后投身创业的心路历程。 ... [详细]
  • 本文档汇总了Python编程的基础与高级面试题目,涵盖语言特性、数据结构、算法以及Web开发等多个方面,旨在帮助开发者全面掌握Python核心知识。 ... [详细]
  • 本文将详细探讨 Linux 系统中的 netstat 命令,该命令用于查看网络状态和连接情况。通过了解 IP 地址和端口的基本概念,我们将更好地理解如何利用 netstat 命令来监控和管理网络服务。 ... [详细]
  • 成为一名高效的Java架构师不仅需要掌握高级Java编程技巧,还需深入理解JVM的工作原理及其优化方法。此外,对池技术(包括对象池、连接池和线程池)的应用、多线程处理、集合对象的内部机制、以及常用的数据结构和算法的精通也是必不可少的。同时,熟悉Linux操作系统、TCP/IP协议栈、HTTP协议等基础知识,对于构建高效稳定的系统同样重要。 ... [详细]
author-avatar
Ax珊
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有