首页 > 代码库 > Memcached学习笔记之一:memcached安装

Memcached学习笔记之一:memcached安装

 

一、概念

  Memcached是一个自由开源的,高性能,分布式内存对象缓存系统。 

  Memcached是一种基于内存的key-value存储,用来存储小块对的任意数据(字符串、对象等)。这些数据可以是数据库调用,api调用或者是页面渲染的结果。

  一般的使用目的是,通过缓存数据库查询结果,减少数据库访问次数,以提高动态web应用的速度,提高可扩展性。

  Memcached 官网:http://memcached.org/。

二、原理

  Memcached有两个核心组件:服务端和客户端。首先客户端拿到服务端列表,并对key做hash转化,根据hash值确定key-value键值对所存的服务端位置;然后在一个memcached的查询中,客户端先通过计算key的hash值来确定key-value对所存在的服务端的位置,之后客户端就会发送一个查询请求给对应的服务端,让这个服务端来查询确切的数据。因为服务端之间并没有互为备份,也就不需要互相通信,所以效率较高。

三、适用场景举例

  1.分布式应用。由于memcached本身就是一个分布式内存对象缓存系统,所以尤其适合大型的分布式系统。

  2.数据库前端缓存。数据库访问常常是网站系统的瓶颈,高并发量的数据库访问,不只是会让响应变慢,甚至会造成网站内存溢出。这时候可以把一些频繁访问的查询缓存起来以减少数据库的访问。当然可以使用Hibernate的缓存机制,但是memcached是可以独立于网站应用本身的,所以更适合大型网站进行应用的拆分。

  3.服务器间数据共享。假设我们将网站的登录和查询拆分成两个子系统,形成两个应用,放在不同的服务器上,并进行集群,这时候,就可以使用memcached将登录系统的用户登录信息缓存起来,以便查询系统能够通过memcached获取登录信息,就像获取本地信息一样。

四、安装

  1.Linux下安装memcached

    从其官方网站(http://memcached.org)下载memcached最新版本。

    wget http://memcached.org/latest
    tar -zxvf memcached-1.x.x.tar.gz
    cd memcached-1.x.x
    ./configure && make && make test && sudo make install

 

  2.windows 下安装memcached

    百度网盘下载地址: http://pan.baidu.com/s/1eSMgsEY

    包含32位和64位的 1.4.4 和 1.4.5 版本 及 32位的1.2.5和1.2.6 版本。

  

  在1.4.5版本以前的memcached可以作为一个服务安装,而在1.4.5及其之后的版本则删除了该功能。因此以下介绍两个不同版本1.4.4和1.4.5的不同安装方法:

  (1)1.4.4及其以下版本(memcached可以作为一个服务安装)

    1.解压下载的安装包的指定目录。假设路径为 c:\memcached

      注意:你需要使用你自己真实的路径替代此路径。

    2.使用管理员权限,在cmd窗口中执行以下命令即可安装成功。以后memcached就将作为windows的一个服务每次开机时自动启动。

      c:\memcached\memcached.exe -d install

    3.启动、关闭和卸载

      c:\memcached\memcached.exe -d start

      c:\memcached\memcached.exe -d stop

      c:\memcached\memcached.exe -d uninstall

    4.修改配置项

      memcached有很多默认的参数配置项,比如最大缓存等,可以使用c:\memcached\memcached.exe -h 命令来查看其所有的配置项。需要先停止服务,设置参数后重启服务即可生效

      方式一:通过注册表修改

        运行regedit.exe命令打开注册表,并找到 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\memcached  ,修改其ImagePath项的值,在其默认值后面添加各种参数。

      方式二:通过命令行修改(其实就是带参数启动)

        比如: c:\memcached\memcached.exe -m 512 -d start

  (2). 1.4.5版本及其以上

    1.解压下载的安装包的指定目录。假设路径为 c:\memcached

      注意:你需要使用你自己真实的路径替代此路径。

    2.使用任务计划来开启一个普通的进程,在windows启动时设置memcached自动执行。使用管理员身份执行以下命令 将memcached添加到任务计划列表中:

      schtasks /create /sc onstart /tn memcached /tr "‘c:\memcached\memcached.exe‘ -m 512"

      -m 512 表示设置memcached最大的缓存配置为512M。更多参数配置可使用 c:\memcached\memcached.exe -h命令查看

    3.如果需要删除memcached的任务计划可使用以下命令:

      schtasks /delete /tn memcached

五、内存分配

默认情况下,服务端是用一个内置的叫“块分配器”的组件来分配内存的。舍弃c++标准的malloc/free的内存分配,而采用块分配器的主要目的 是为了避免内存碎片,否则操作系统要花费更多时间来查找这些逻辑上连续的内存块(实际上是断开的)。用了块分配器,服务端会轮流的对内存进行大块的分配,并 不断重用。当然由于块的大小各不相同,当数据大小和块大小不太相符的情况下,还是有可能导致内存的浪费。

同时,服务端对key和value都有相应的限制,key的长度不能超过250字节,value也不能超过块大小的限制 --- 1MB。
因为 客户端使用的hash算法,并不会考虑到每个服务端的内存大小。理论上客户端会分配概率上等量的key-value键值对给每个服务端,这样如果每个服务端的内存都不太一样,那可能 会导致内存使用率的降低。所以一种替代的解决方案是,根据每个服务端的内存大小,找出他们的最大公约数,然后在每个服务端上开n个容量=最大公约数的 instance,这样就等于拥有了多个容量大小一样的子服务端,从而提供整体的内存使用率。

六、缓存策略

当服务端的hash表满了之后,新的插入数据会替代老的数据,更新的策略是LRU(最近最少使用),以及每个key-value键值对的有效时限。key-value键值对存储有效时限是在客户端由app设置并作为参数传给服务端的。

同时服务端采用是偷懒替代法,服务端不会开额外的进程来实时监测过时的key-value键值对并删除,而是当且仅当,新来一个插入的数据,而此时又没有多余的空间放了,才会进行清除动作。

七、memcached连接

通过 telnet 命令指定主机ip和端口来连接memcached服务。

  语法:  telnet ip port

  举例: 连接 127.0.0.1(本机,也可使用localhost),端口 11211 (默认端口)

      telnet 127.0.0.1 11211

      连接上后,啥都不显示,使用 stats 命令检测是否连接成功

  

Memcached学习笔记之一:memcached安装