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

      

  • 相关阅读:
    【转】IOS缓存机制详解
    Soul网关插件之Sofa
    Soul网关代理Dubbo插件的使用
    Soul网关默认Divide插件的使用
    高性能网关Soul源码调试环境搭建
    大厂面试系列一些问题的解答
    大厂面试系列一些问题的答案
    大厂面试系列(十三):Java基础
    大厂面试助手(十二):场景和设计
    Action Filters for ASP.NET MVC
  • 原文地址:https://www.cnblogs.com/VweiweiyixiaoV/p/6686786.html
Copyright © 2020-2023  润新知