zoukankan      html  css  js  c++  java
  • 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:memcachedmemcached.exe -d install

        3.启动、关闭和卸载

          c:memcachedmemcached.exe -d start

          c:memcachedmemcached.exe -d stop

          c:memcachedmemcached.exe -d uninstall

        4.修改配置项

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

          方式一:通过注册表修改

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

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

            比如: c:memcachedmemcached.exe -m 512 -d start

      (2). 1.4.5版本及其以上

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

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

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

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

          -m 512 表示设置memcached最大的缓存配置为512M。更多参数配置可使用 c:memcachedmemcached.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 命令检测是否连接成功

      

  • 相关阅读:
    17. Letter Combinations of a Phone Number
    16. 3Sum Closest
    15. 3Sum
    14. Longest Common Prefix
    13. Roman to Integer
    12. Integer to Roman
    11. Container With Most Water
    10. Regular Expression Matching
    9. Palindrome Number
    8. String to Integer (atoi)
  • 原文地址:https://www.cnblogs.com/VweiweiyixiaoV/p/6686786.html
Copyright © 2011-2022 走看看