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 命令检测是否连接成功

  

时间: 2024-11-11 16:49:33

Memcached学习笔记之一:memcached安装的相关文章

memcached学习笔记2--安装及命令

学习memcached的原理: 用户一 -> 访问浏览器 -> 服务器Apache -> PHP文件(该文件应用了memcached技术) -> [第一次]到数据库DB中查找数据 -> 调用在memcached中 用户二 -> 访问浏览器 -> 服务器Apache -> PHP文件(也是同上面一个文件) -> (如果查询的条件一致)先在mem中找是否存在数据(存在直接调用内存中的数据)  -> (不存在)读取数据库,再将这次结果放入memcach

memcached学习笔记4--memcache扩展操作memcached

1. 安装并配置memcache扩展库 找到php.ini文件 添加: extendsion= php_memcache.dll 并把对应的dll文件拷贝到ext目录 2. 使用PHP对Memcahced进行CURD操作(查看手册) 3. 编程测试 用于测试添加和获取 //实例化memcache对象 $m = new Memcache(); //连接到指定的memcached中 ,第一个参数:IP地址, 第二个参数memcached端口号 $m->connect('127.0.0.1', 112

memcached学习笔记6--浅谈memcached的机制 以及 memcached细节讨论

附:请浅谈memcached的机制 答: ①基于C/S架构,协议比较简单 c/s架构,此时memcached为服务器端,我们可以使用如PHP,c++/c等程序连接memcached服务器. memcached的服务器客户端通信并不使用XML等格式,而使用简单的基于文本行的协议,因此通过telnet也能在memcached上保存.读取数据. ②基于libevent事件来处理的 libevent是一套垮平台的事件处理接口的封装,能够处理兼容包括这些操作系统: windows/Linux/BSD/So

memcached学习笔记(一)

预留位置,待整理 memcached学习笔记(一),布布扣,bubuko.com

memcached学习笔记5--socke操作memcached 缓存系统

使用条件:当我们没有权限或者不能使用服务器的时候,我们需要用socket操作memcached memcached-client操作 特点: 无需开启memcache扩展 使用fsocketopen()套接字连接memcached 同样执行CRUD require_once(CLASS_PATH.'memcached-client.php');//CLASS_PATH 是我定义的类文件文件夹路径 $mc = new memcached( array( 'servers' => array( '1

memcached学习笔记——存储命令源码分析下篇

上一篇回顾:<memcached学习笔记——存储命令源码分析上篇>通过分析memcached的存储命令源码的过程,了解了memcached如何解析文本命令和mencached的内存管理机制. 本文是延续上一篇,继续分析存储命令的源码.接上一篇内存分配成功后,本文主要讲解:1.memcached存储方式:2.add和set命令的区别. memcached存储方式 哈希表(HashTable) 哈希表在实践中使用的非常广泛,例如编译器通常会维护的一个符号表来保存标记,很多高级语言中也显式的支持哈希

memcached学习笔记3--telnet操作memcached

方式: 一.telnet访问memcached缓存系统(主要用于教学,不讨论) telnet 127.0.0.1 11211     => telnet IP地址 端口号 //往Memcached中存放数据 add username 0 60 5       => add:添加命令 username:key的名字(是以key/value存放) 0:标示,一般不用管 60:缓存多长时间,超过时间自动删除,单位(秒) s 5: 表示放入的数据大小 注意:如果一个key已经存在,再要添加数据到这个k

memcached学习笔记——存储命令源码分析上

原创文章,转载请标明,谢谢. 上一篇分析过memcached的连接模型,了解memcached是如何高效处理客户端连接,这一篇分析memcached源码中的process_update_command函数,探究memcached客户端的set命令,解读memcached是如何解析客户端文本命令,剖析memcached的内存管理,LRU算法是如何工作等等. 解析客户端文本命令 客户端向memcached server发出set操作,memcached server读取客户端的命令,客户端的连接状态

Linux学习笔记——虚拟机中安装VMware Tools

0 前言 VMware Tools是VMware虚拟机中自带的一种增强工具,只有在VMware虚拟机中安装好了VMware Tools,才能实现主机与虚拟机之间的文件共享,实现文件在虚拟机之间的复制粘贴. 最近购买了周立功的一款EasyARM开发板,作为树莓派Linux学习的补充.在虚拟机中安装了周立功提供的ubuntu镜像,总觉得在主机和PC机之间直接复制粘贴才爽,所以又安装了Vmware Tools.     [相关博文] [ Linux学习笔记--vmware plarer中安装ubunt

Git 学习笔记&lt;简介与安装&gt; (一)

Git,开源中国以及GitHub所使用的系统, Is A 一个分布式版本控制系统 Be Used to 为团队合作写代码提供方便的管理系统.几乎满足你所有关于合作写代码的幻想. Has 本地端:工作区.版本库 (版本库还含有一个暂存区) 远程仓库:版本库(用来储存版本库的服务器) How To Install Linux: 首先,先输入git,看看是否安装Git: $ gitThe program 'git' is currently not installed. You can install