memcached 客户端总结

        本文将从memcached 使用角度,从客户端,协议,服务器端来简要介绍一下memcached 的特性。

memcached是一个高性能的分布式K-V内存存储系统,其在内存中维护了一张hash表,由于其可以在内存中读取,所以读写速度很快,由于内容存在内存中,断电后会遗失,所以可靠性不如db,现在也有将memcached和BDB结合在一起的,叫做memcacheDB,这里不做讨论

由于其读写速度快的特性,在服务端的应用中,memcache 多应用于web机器和db层面之间的缓存。

对于memcache来说,它的分布式是在客户端实现的,客户端使用一致性hash的算法,实现memcache的分布式。

        一致性hash简要介绍:

对每个memcached服务节点计算其hash值,并按照hash值大小顺序将其顺时针排列在一个圆之上,当有新的key过来存储的时候,计算其hash值,并按照顺时针查找,找到的第一个的hash值大于key的hash值的节点,如果找不到,那就取第一台机器,就将其存储在这个节点之上。这样的好处是,如果增加了一个节点,只有新增的节点和其上一个节点之间的hash值的key的存取会有变化,如下图所示:

这样大大减少了增加机器后对命中率的影响。

但是可能会出现如下情况

这样的话,server1的存的量要远远大于server2存的量(只有server1和server2的中间的hash值的key 才会被存到cache里面),在这里,memcache客户端使用虚拟节点的方式,实现负载均衡。

所谓虚拟节点,就是在这个圆上设置一些点,使得落在这些点区间内的某个key归结到上面两台机器上去,具体做法可以是,对上面两个节点,在名称之后加上#序号,假设我们设置三个虚拟节点,分别就是server1#1 server1#2 server1#3 ,server2#1 server2#2 server2#3,设置之后计算节点的hash值,节点的分布如下图所示

 

这样我们相当于增加了一些节点,这样的负载就均衡了一些。

以上就是memcache客户端的一些知识。

时间: 2024-10-29 02:36:28

memcached 客户端总结的相关文章

Memcached客户端性能评测报告

转载:http://wenku.baidu.com/view/38a195c02cc58bd63186bdcb; 1.      Memcached客户端简介 本次memcached客户端评测以JAVA开源客户项目为评测对象,分别选择Memcached-Java-Client.spymemcached.xmemcached.alisoft xplatform asf cache四个项目,其中分别由两个产品基于堵塞式IO和NOI实现的客户端.两个国内开源项目或两个国外开源项目. 选择的客户端简介如

支持 .NET Core 的 Memcached 客户端 EnyimMemcachedCore

1. 介绍 EnyimMemcachedCore 是一个支持 .NET Core 的 Memcached 客户端,是从 EnyimMemcached 迁移至 .NET Core的,源代码托管在 GitHub 上:https://github.com/cnblogs/EnyimMemcachedCore ,NuGet 包地址:https://www.nuget.org/packages/EnyimMemcachedCore . 2. 使用说明 2.1 安装 NuGet 包 Install-Pack

使用memcached客户端Xmemcached与Spring整合

1 简介 Xmemcached是一个高性能的基于java nio的memcached客户端.在经过三个RC版本后,正式发布1.10-final版本. xmemcached特性一览: 1.高性能 2.支持完整的memcached文本协议,二进制协议将在1.2版本实现. 3.支持JMX,可以通过MBean调整性能参数.动态添加/移除server.查看统计等. 4.支持客户端统计 5.支持memcached节点的动态增减. 6.支持memcached分布:余数分布和一致性哈希分布. 7.更多的性能调整

分析Memcached客户端如何把缓存数据分布到多个服务器上

Memcached客户端可以设多个memcached服务器,它是如何把数据分发到各个服务器上,而使各个服务器负载平衡的呢? 可以看看.net版中的客户端中的源码,就可以知道 先看代码:   1 /// <summary>   2         /// Returns appropriate SockIO object given   3         /// string cache key and optional hashcode.   4         ///    5      

.NET平台上的Memcached客户端介绍

早上接到一个任务,需要对Linux服务器的Memcached的update操作进行性能测试,我发现我是一个典型的“手里拿着锤子,就把所有问题都当成钉子”的人.我第一个念头就是,上Memcached的官网找.NET的客户端.最后在Codeplex上找到了一个叫Memcached Providers的客户端程序,很小,218K,里面就3个DLL,一个是Memcached Providers本身的DLL,还有一个是Enyim.Caching,Enyim.Caching也是一个.NET平台上的Memca

Spring学习(五)——集成memcached客户端

memcached是高性能的分布式内存缓存服务器.许多Web应用都将数据保存到RDBMS中,应用服务器从中读取数据并在浏览器中显示. 但随着数据量的增大.访问的集中,就会出现RDBMS的负担加重.数据库响应恶化. 网站显示延迟等重大影响.memcached特别适合 用来解决上述问题,它可以缓存数据库查询结果,减少数据库访问次数,以提高动态Web应用的速度. 提高可扩展性.本例将在前一篇中 实现的Demo程序基础上集成memcached客户端. 1.单个服务端安装部署 官网http://memca

Memcached客户端-XMemcached使用

一. XMemcached 简介 XMemcached 是一个新 java memcached client .也许你还不知道 memcached 是什么?可以先看看这里.简单来说, Memcached  是一个高性能的分布式内存对象的 key-value 缓存系统,用于动态 Web 应用以减轻数据库负载,现在也有很多人将它作为内存式数据库在使用, memcached 通过它的自定义协议与客户端交互,而XMemcached 就是它的一个 java 客户端实现. 二. 使用指南 2.1  简单例子

[学习积累]memcached客户端和连接池

前阵子在网上找了个demo学了一下memcached的简单使用. 今天回顾了一下,我想:连接池不是应该算是服务端管理的东西么,Client应该是客户端管理的东西,怎么能放在同一个class里边呢?于是把demo改了改,代码如下: 服务端: package studyMemcached; import com.danga.MemCached.SockIOPool; public class MemServer {     private static SockIOPool pool;     pu

Windows下Memcached在.Net程序中的实际运用(从Memcached客户端Enyim的库的编译到实际项目运用) 转发

1.一点基础概念 2.获取EnyimMemcached客户端的源代码并编译出动态库 3.Memcached的服务器安装(windows server) 4.在web项目中实战 一.基础概念 memcached是什么?memcached是分布式缓存系统,特点是高性能.分布式内存缓存系统.memcached能做什么?用来给动态web提升响应速度(通过缓存数据,减少数据库访问压力).为什么要用memcached?笔者认为使用它的原因是能提升网站整体性能,减少数据库的的请求压力.据某位博主说合理使用Me