分布式缓存系统Memcached学习心得

简介: 分布式缓存系统Memcached学习心得Posted on 2009-01-14 11:34 linFen 阅读(3458) 评论(1) 编辑 收藏缘起: 在数据驱动的web开发中,经常要重复从数据库中取出相同的数据,这种重复极大的增加了数据库负载。



分布式缓存系统Memcached学习心得

Posted on  2009-01-14 11:34  linFen 阅读( 3458) 评论( 1编辑  收藏
缘起: 在数据驱动的web开发中,经常要重复从数据库中取出相同的数据,这种重复极大的增加了数据库负载。缓存是解决这个问题的好办法。 
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 可以查看其帮助 

二、客户端使用 
      下载memcached java client:http://www.whalin.com/memcached/#download 
   1 解压后将java_memcached-release_2.0.1.jar jar包添加到工程的classpath中 
       2 利用memcached java client 一个简单的应用 
  1. package com.danga.MemCached.test;       
  2.       
  3. import java.util.Date;       
  4.       
  5. import com.danga.MemCached.MemCachedClient;       
  6. import com.danga.MemCached.SockIOPool;       
  7.       
  8.       
  9. public class Test {           
  10.     protected static MemCachedClient mcc = new MemCachedClient();          
  11.           
  12.     static {          
  13.         String[] servers ={"192.168.40.4:12000"};          
  14.           
  15.         Integer[] weights = { 3 };          
  16.           
  17.         //创建一个实例对象SockIOPool        
  18.         SockIOPool pool = SockIOPool.getInstance();          
  19.           
  20.         // set the servers and the weights       
  21.         //设置Memcached Server       
  22.         pool.setServers( servers );          
  23.         pool.setWeights( weights );          
  24.           
  25.         // set some basic pool settings          
  26.         // 5 initial, 5 min, and 250 max conns          
  27.         // and set the max idle time for a conn          
  28.         // to 6 hours          
  29.         pool.setInitConn( 5 );          
  30.         pool.setMinConn( 5 );          
  31.         pool.setMaxConn( 250 );          
  32.         pool.setMaxIdle( 1000 * 60 * 60 * 6 );          
  33.           
  34.         // set the sleep for the maint thread          
  35.         // it will wake up every x seconds and          
  36.         // maintain the pool size          
  37.         pool.setMaintSleep( 30 );          
  38.           
  39.         // Tcp的规则就是在发送一个包之前,本地机器会等待远程主机       
  40.                   // 对上一次发送的包的确认信息到来;这个方法就可以关闭套接字的缓存,       
  41.                   // 以至这个包准备好了就发;       
  42.                   pool.setNagle( false );          
  43.         //连接建立后对超时的控制       
  44.                   pool.setSocketTO( 3000 );       
  45.         //连接建立时对超时的控制       
  46.                   pool.setSocketConnectTO( 0 );          
  47.           
  48.         // initialize the connection pool          
  49.         //初始化一些值并与MemcachedServer段建立连接       
  50.                   pool.initialize();       
  51.                   
  52.           
  53.         // lets set some compression on for the client          
  54.         // compress anything larger than 64k          
  55.         mcc.setCompressEnable( true );          
  56.         mcc.setCompressThreshold( 64 * 1024 );          
  57.     }          
  58.               
  59.     public static void bulidCache(){          
  60.         //set(key,value,Date) ,Date是一个过期时间,如果想让这个过期时间生效的话,这里传递的new Date(long date) 中参数date,需要是个大于或等于1000的值。       
  61.         //因为java client的实现源码里是这样实现的 expiry.getTime() / 1000 ,也就是说,如果 小于1000的值,除以1000以后都是0,即永不过期      
  62.         mcc.set( "test""This is a test String" ,new Date(11211));      
  63.     //十秒后过期       
  64.                  
  65.     }          
  66.          
  67.     public static void output() {          
  68.         //从cache里取值       
  69.         String value = (String) mcc.get( "test" );          
  70.         System.out.println(value);           
  71.     }          
  72.               
  73.     public static void main(String[] args){          
  74.         bulidCache();         
  75.         output();              
  76.     }        
  77.           
  78. }         
标签:  memcached

目录
相关文章
|
12月前
|
Kubernetes 大数据 调度
Airflow vs Argo Workflows:分布式任务调度系统的“华山论剑”
本文对比了Apache Airflow与Argo Workflows两大分布式任务调度系统。两者均支持复杂的DAG任务编排、社区支持及任务调度功能,且具备优秀的用户界面。Airflow以Python为核心语言,适合数据科学家使用,拥有丰富的Operator库和云服务集成能力;而Argo Workflows基于Kubernetes设计,支持YAML和Python双语定义工作流,具备轻量化、高性能并发调度的优势,并通过Kubernetes的RBAC机制实现多用户隔离。在大数据和AI场景中,Airflow擅长结合云厂商服务,Argo则更适配Kubernetes生态下的深度集成。
1280 34
|
8月前
|
存储 算法 安全
“卧槽,系统又崩了!”——别慌,这也许是你看过最通俗易懂的分布式入门
本文深入解析分布式系统核心机制:数据分片与冗余副本实现扩展与高可用,租约、多数派及Gossip协议保障一致性与容错。探讨节点故障、网络延迟等挑战,揭示CFT/BFT容错原理,剖析规模与性能关系,为构建可靠分布式系统提供理论支撑。
370 2
|
8月前
|
机器学习/深度学习 算法 安全
新型电力系统下多分布式电源接入配电网承载力评估方法研究(Matlab代码实现)
新型电力系统下多分布式电源接入配电网承载力评估方法研究(Matlab代码实现)
263 3
|
9月前
|
缓存 监控 Linux
Linux系统清理缓存(buff/cache)的有效方法。
总结而言,在大多数情形下你不必担心Linux中buffer与cache占用过多内存在影响到其他程序运行;因为当程序请求更多内存在没有足够可用资源时,Linux会自行调整其占有量。只有当你明确知道当前环境与需求并希望立即回收这部分资源给即将运行重负载任务之前才考虑上述方法去主动干预。
2354 10
|
10月前
|
数据采集 缓存 NoSQL
分布式新闻数据采集系统的同步效率优化实战
本文介绍了一个针对高频新闻站点的分布式爬虫系统优化方案。通过引入异步任务机制、本地缓存池、Redis pipeline 批量写入及身份池策略,系统采集效率提升近两倍,数据同步延迟显著降低,实现了分钟级热点追踪能力,为实时舆情监控与分析提供了高效、稳定的数据支持。
449 1
分布式新闻数据采集系统的同步效率优化实战
|
10月前
|
存储 缓存 监控
手动清除Ubuntu系统中的内存缓存的步骤
此外,只有系统管理员或具有适当权限的用户才能执行这些命令,因为这涉及到系统级的操作。普通用户尝试执行这些操作会因权限不足而失败。
1865 22
|
9月前
|
缓存 监控 Ubuntu
Ubuntu操作系统下清除系统缓存与无用文件的方法
通过上述步骤断行综合性地对Ubuntu进行优化与整洁可显著改善其性能表现及响应速度。然而,请注意在执行某些操作前确保充分了解其潜在影响;例如,在移除旧内核之前确认新内核稳定运行无问题;而对于关键配置更改则需确保备份好相关设置以便恢复原状态。
2346 0
|
NoSQL 关系型数据库 MySQL
分布式系统学习9:分布式锁
本文介绍了分布式系统中分布式锁的概念、实现方式及其应用场景。分布式锁用于在多个独立的JVM进程间确保资源的互斥访问,具备互斥、高可用、可重入和超时机制等特点。文章详细讲解了三种常见的分布式锁实现方式:基于Redis、Zookeeper和关系型数据库(如MySQL)。其中,Redis适合高性能场景,推荐使用Redisson库;Zookeeper适用于对一致性要求较高的场景,建议基于Curator框架实现;而基于数据库的方式性能较低,实际开发中较少使用。此外,还探讨了乐观锁和悲观锁的区别及适用场景,并介绍了如何通过Lua脚本和Redis的`SET`命令实现原子操作,以及Redisson的自动续期机
1316 7
|
消息中间件 算法 调度
分布式系统学习10:分布式事务
本文是小卷关于分布式系统架构学习系列的第13篇,重点探讨了分布式事务的相关知识。随着业务增长,单体架构拆分为微服务后,传统的本地事务无法满足需求,因此需要引入分布式事务来保证数据一致性。文中详细介绍了分布式事务的必要性、实现方案及其优缺点,包括刚性事务(如2PC、3PC)和柔性事务(如TCC、Saga、本地消息表、MQ事务、最大努力通知)。同时,还介绍了Seata框架作为开源的分布式事务解决方案,提供了多种事务模式,简化了分布式事务的实现。
681 5
|
Linux Memcache
Linux - 安装memcached
Linux - 安装memcached
342 0
Linux - 安装memcached

热门文章

最新文章