设为首页 收藏本站
查看: 1055|回复: 0

[经验分享] Memcached-高性能的分布式内存缓存服务器

[复制链接]

尚未签到

发表于 2015-9-1 14:03:36 | 显示全部楼层 |阅读模式
  Memcached是高性能的分布式内存缓存服务器,通过在内存里维护一个统一的巨大的hash表,它能够用来存储各种格式的数据,包括图像、视频、文件以及数据库检索的结果等, 由国外社区网站 LiveJournal 的开发团队开发。一般的使用目的是,通过缓存数据库查询结果,减少数据库访问次数,以提高动态Web应用的速度、提高可扩展性。
  LiveJournal 团队开发了包括 Memcached、MogileFS、Perlbal 等不错的开源项目。

· 官方网站:http://www.danga.com/memcached/

  Memcached的主要特点
  ·基于C/S架构,协议简单
  ·基于libevent的事件处理

·libevent: http://www.monkey.org/~provos/libevent/

安装

·基于libevent事件处理机制 http://www.monkey.org/~provos/libevent/
–# tar zxvf libevent-2.0.21-stable.tar.gz
–./configure --prefix=/usr/local
–make
–sudo make install
·
·memcached: http://memcached.org/  # tar zxvf memcached-1.4.15.tar.gz

–./configure --with-libevent=/usr/local
–make
–make install

其他说明,
  在 Memcached 中可以保存的item数据量是没有限制的,只要内存足够
  Memcached单进程最大使用内存为2G,要使用更多内存,可以分多个端口开启进程
  最大30天的数据过期时间, 设置为永久的也会在这个时间过期,常量
  REALTIME_MAXDELTA 60*60*24*30 控制
  最大键长为250字节,大于该长度无法存储,常量KEY_MAX_LENGTH 250 控制
  单个item最大数据是1MB,超过1MB数据不予存储,常量POWER_BLOCK 1048576 进
  行控制,它是默认的slab大小
  最大同时连接数是200,通过 conn_init()中的freetotal 进行控制,最大软连接数是1024,通过settings.maxconns=1024 进行控制
  Memcached客户端 参考: http://code.google.com/p/memcached/wiki/Clients
  
  memcached 搭建   
  
在windows2007服务器中安装memcached首先要看服务器所用系统是32位的还是64位的,64位系统可能会需要一个MSVCR71.DLL动态链接文件,
  该文件在memcached-1.2.5-win32-bin解压包中就有,更高版本的包已解决了这个问题,在windows2007中由于安全性的提高,
  在命令行中执行memcached.exe -d install将会提示你服务安装失败或服务已安装。这样你以管理员的身份打开命令行,可以解决。  
  
Memcached服务器的配置过程  
1.下载memcached-1.4.5-win32.zip包
  下载地址:http://download.iyunv.com/   (回头我给一个百度网盘地址)
  
2.用管理员身份打开cmd >cd memcached
>memcached-1.4.5.exe -d install  安装memcached缓冲服务
>memcached-1.4.5.exe -d start 开启memcached服务,默认端口为11211,内存分配为64MB,块大小增长因子1.25.最大同时连接数为1024,最小分配空间为48
>memcached-1.4.5.exe -d runservice -l 127.0.0.1 -m 2000 -c 1024 -p 11255
  下面3.其实可以不作,我们就是用默认的端口等就合适
  3.在命令行下可能不会生效所以得修改注册表 开始-->运行-->regedit
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\memcached Server 中的
ImagePath项,原值为"d:\memcached\memcached-1.4.5.exe" -d runservice ,在其后加上 -p 11255 -U 11255 -m 2000 -c 1024 -f 1.25 -n 48 退出  
  
4.右击我的电脑-->属性-->管理-->服务-->memcached Service 将服务重启。  
5.测试服务器
开启telnet功能,进入命令行模式,输入telnet 192.168.1.200 11255 Stats 查看memcached的状态。
  
  
  Memcache 在java客户端的配置过程  
  
1.下载java_memcached-release_2.5.1.jar包
  
2.将java_memcached-release_2.5.1.jar包复制到JAVA项目的lib目录下,然后我们编写代码进行测试。
  
import java.util.Date;
import com.danga.MemCached.MemCachedClient;
  import com.danga.MemCached.SockIOPool;  
  
public class MemCachedManager {  
    // 创建全局的唯一实例
    protected static MemCachedClient mcc = new MemCachedClient();  
    protected static MemCachedManager memCachedManager = new MemCachedManager();  
   
  // 设置与缓存服务器的连接池     
  static {
        // 服务器列表和其权重
        String[] servers = { "192.168.1.200:11255" };     
  Integer[] weights = { 3 };  
  
        // 获取socke连接池的实例对象
        SockIOPool pool = SockIOPool.getInstance();  
  
        // 设置服务器信息
       pool.setServers(servers);   
  pool.setWeights(weights);
  
  // 设置初始连接数、最小和最大连接数以及最大处理时间   
  pool.setInitConn(5);   
  pool.setMinConn(5);      
  pool.setMaxConn(250);
      pool.setMaxIdle(1000 * 60 * 60 * 6);  
  
     // 设置主线程的睡眠时间   
  pool.setMaintSleep(30);  
     // 设置TCP的参数,连接超时等   
  pool.setNagle(false);   
  pool.setSocketTO(3000);
  pool.setSocketConnectTO(0);  
  
     // 初始化连接池  
  pool.initialize();
  
     // 压缩设置,超过指定大小(单位为K)的数据都会被压缩   
  mcc.setCompressEnable(true);
      mcc.setCompressThreshold(64 * 1024);  
  }  
    /**
     * 保护型构造方法,不允许实例化!  
  */
    protected MemCachedManager() {  
    }  
  
    /**
     * 获取唯一实例
     */
    public static MemCachedManager getInstance() {   
  return memCachedManager;  
  }
  /**
     * 添加一个指定的值到缓存中.      *  
     * @param key     
  * @param value
  * @return   
  */
    public boolean add(String key, Object value) {   
  return mcc.add(key, value);
  }  
    public boolean add(String key, Object value, Date expiry) {   
  return mcc.add(key, value, expiry);  
  }  
    public boolean replace(String key, Object value) {
  return mcc.replace(key, value);
  }  
    public boolean replace(String key, Object value, Date expiry) {  
  return mcc.replace(key, value, expiry);  
  }  
    /**
     * 根据指定的关键字获取对象.
     * @param key   
  * @return     
  */
    public Object get(String key) {      
  return mcc.get(key);  
  }
  public static void main(String[] args) {
  
        MemCachedManager cache = MemCachedManager.getInstance();  
  cache.add("hello", 234);
  
       System.out.print("get value : " + cache.get("hello"));
  }
  }
  
  3.测试运行状态。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-108414-1-1.html 上篇帖子: telnet测试memcached服务器(转) 下篇帖子: memcached源码阅读笔记一
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表