发表于: 2020-09-03 21:49:18

1 1301


 memcached缓存工具


Memcached是一款开源、高性能、分布式内存对象缓存系统,可应用各种需要缓存的场景,其主要目的是通过降低对Database的访问来加速web应用程序。它是一个基于内存的“键值对”存储,用于存储数据库调用、API调用或页面引用结果的直接数据,如字符串、对象等。


  1. memcached分为俩部分

  2. (1)独立运行的memcached服务实例
  3. (2)用于访问这些服务实例的客户端

服务实例会消耗非常少的CPU ,但会占用大量的内存。



客户端和实例的关系


在需要访问具有特定键值的数据时,该客户端内部会根据所需要读取的数据的键值,如“foo”,以及当前Memcached缓存服务的配置来计算相应的哈希值,以决定到底是哪个Memcached实例记录了用户所需要访问的信息。在决定记录了所需要信息的Memcached实例之后,    Memcached客户端将从配置中读取该Memcached服务实例所在地址,并向该Memcached实例发送数据访问请求,以从该Memcached实例中读取具有键值“foo”的信息。在各个论坛的讨论中,这被称为是Memcached的两阶段哈希(Two-stage hash)


  而对数据的记录也使用了类似的流程:假设用户希望通过服务端缓存记录数据“bar”,并为其指定键值“foo”。那么Memcached客户端将首先对用户所赋予的键值“foo”及当前服务端缓存所记录的可用服务实例个数执行哈希计算,并根据哈希计算结果来决定存储该数据的Memcached服务实例。接下来,客户端就会向该实例发送请求,以在其中记录具有键值“foo”的数据“bar”。


这样做的好处则在于,每个Memcached服务实例都是独立的,而彼此之间并没有任何交互。在这种情况下,我们可以省略很多复杂的功能逻辑,如各个节点之间的数据同步以及结点之间消息的广播等等。这种轻量级的架构可以简化很多操作。如在一个节点失效的时候,我们仅仅需要使用一个新的Memcached节点替代老节点即可。而在对缓存进行扩容的时候,我们也只需要添加额外的服务并修改客户端配置。


这些记录在服务端缓存中的数据是全局可见的。也就是说,一旦在Memcached服务端缓存中成功添加了一 条新的记录,那么其它使用该缓存服务的应用实例将同样可以访问该记录。


在Memcached中,每条记录都由四部分组成:记录的键,有效期,一系列可选的标记以及表示记录内容的数据。由于记录内容的数据中并不包含任何数据结构,因此我们在Memcached中所记录的数据需要是经过序列化之后的表示

上面两个命令是    安装 / 开启 memcached
第三个命令是: telnet连接memcached出错 
 需要在windows功能开启  telnet  然后重启电脑





执行  telnet   host  port命令    连接memcached
我这里是  telnet   127.0.0.1  11211       (memcached服务运行的主机端口)

然后按 ctrl+]  进入回显

然后再按下回车  进入输入页面


set语法说明

set key flags exptime bytes [noreply]

value


语法详解:


key:键值 key-value 结构中的 key,用于查找缓存值。                   
flags:可以包括键值对的整型参数,客户机使用它存储关于键值对的额外信息 。
exptime:在缓存中保存键值对的时间长度(以秒为单位,0 表示永远)
bytes:在缓存中存储的字节数
noreply(可选): 该参数告知服务器不需要返回数据

value:存储的值(始终位于第二行)(可直接理解为key-value结构中的value)


其他命令:

Memcached add 命令用于将 value(数据值) 存储在指定的 key(键) 中。


如果 add 的 key 已经存在,则不会更新数据(过期的 key 会更新),之前的值将仍然保持相同,并且您将获得响应 NOT_STORED。


Memcached replace 命令用于替换已存在的 key(键) 的 value(数据值)。


如果 key 不存在,则替换失败,并且您将获得响应 NOT_STORED。


Memcached append 命令用于向已存在 key(键) 的 value(数据值) 后面追加数据 。


Memcached prepend 命令用于向已存在 key(键) 的 value(数据值) 前面追加数据 。

memcached.properties文件


#服务器地址
memcache.server=127.0.0.1:11211


#初始连接数
memcache.initConn=20
memcache.minConn=10
memcache.maxConn=50

#设置连接池维护线程的睡眠时间(3s
memcache.maintSleep=3000

#设置是否使用Nagle算法(Socket的参数),如果是true在写数据时不缓冲,立即发送出去
memcache.nagle=false

#设置socket的读取等待超时时间(3s
memcache.socketTO=3000



spring配置文件添加

<!--spring 集成缓存服务器(memcached) -->
   <bean id="memcachedPool" class="com.danga.MemCached.SockIOPool"
         factory-method="getInstance" init-method="initialize"
         destroy-method="shutDown">

       <constructor-arg>
           <value>memCachedPool</value>
       </constructor-arg>

       <property name="servers">
           <list>
               <value>${memcache.server}</value>
           </list>
       </property>

       <property name="initConn">
           <value>${memcache.initConn}</value>
       </property>

       <property name="minConn">
           <value>${memcache.minConn}</value>
       </property>

       <property name="maxConn">
           <value>${memcache.maxConn}</value>
       </property>

       <property name="maintSleep">
           <value>${memcache.maintSleep}</value>
       </property>

       <property name="nagle">
           <value>${memcache.nagle}</value>
       </property>

       <property name="socketTO">
           <value>${memcache.socketTO}</value>
       </property>
   </bean>

   <bean id="memCachedClient" class="com.danga.MemCached.MemCachedClient">
       <constructor-arg>
           <value>memCachedPool</value>
       </constructor-arg>
   </bean>

</beans>


测试


@Controller
   public class MemcachedController {

       @Autowired
       private MemCachedClient memCachedClient;

       @RequestMapping("/memcached")
       public void setMemcachedServer(){
           Boolean target=memCachedClient.set("1""123456");
           System.out.println("memcached 加载是否成功:"+target);

           String result =(String)memCachedClient.get("1");
           System.out.println("memcached 获取的结果:"+result);
           memCachedClient.delete("1");
       }
}


跑一下    测试成功


明天计划的事情:

任务6

今日问题 暂无


返回列表 返回列表
评论

    分享到