• [技术干货] web场景- Memcached调优
    1.1 Memcached简介Memcached是以LiveJournal旗下Danga Interactive公司的Brad Fitzpatric为首开发的一款高性能的分布式内存缓存服务器,通常的使用目的是,通过缓存数据库查询结果,减少数据库访问次数,以提高动态Web应用的速度、提高可扩展性。官方链接:https://memcached.org/1.2 Memcached物理机调优方法1.2.1 Memcached亲和性设置目的:设置memcached服务的亲和性,使用numactl设置CPU与内存的亲和性。提升服务器性能方法:步骤 1 安装numactl            yum -y install numactl步骤 2 编辑/usr/lib/systemd/system/memcached.service            添加如下内容ExecStart=/usr/bin/numactl --cpunodebind=0,1 --membind=0,1 /opt/memcached/bin/memcached -t 48 -p 11211 -u root -m 122880 -c 100000命令参数说明参数名称参数说明cpunodebind=nodes进程绑定CPU,其中0,1表示绑定node0和node1的core--membind=nodes分配进程的内存,其中0,1表示分配的内存在node0和node1上-t <num>使用的线程数(48表示使用48个线程)-p <num>监听的TCP端口-u <username>设定进程所属用户。(只有root用户可以使用这个参数)-m <num>分配给memcached实例的内存大小,以MB为单位-c <num>最大并发连接数 1.3 Memcached虚拟机调优方法目的:修改kvm虚拟机配置文件:配置虚拟机的CPU、内存、网卡。方法:步骤 1  编辑虚拟机配置文件。             以虚拟机vm1为例,执行如下语句编辑虚拟机配置文件:            virsh edit vm1                    该命令为打开vm1的配置文件,后续步骤2-5均在此基础上完成,修改完成后执行 :wq 保存即可,配置文件需重启虚拟机生效,执行如下命令重启   虚拟机:     virsh shutdown vm1      virsh start vm1步骤 2 设置vcpu与物理cpu绑定。            设置vcpu与物理cpu绑定的脚本如下所示:      <vcpu placement='static' cpuset='0-3'>4</vcpu>      <cputune>      <vcpupin vcpu='0' cpuset='0'/>      <vcpupin vcpu='1' cpuset='1'/>      <vcpupin vcpu='2' cpuset='2'/>      <vcpupin vcpu='3' cpuset='3'/>      <emulatorpin cpuset='0-3'/></cputune>参数说明vcpu虚拟核cpuset物理核步骤 3 设置numa绑定。            设置numa绑定的脚本如下所示:        <numatune>        <memnode cellid='0' mode='strict' nodeset='0'/>        </numatune>        <cpu mode='host-passthrough' check='none'>        <topology sockets='1' cores='4' threads='1'/>        <numa>        <cell id='0' cpus='0-3' memory='12582912' unit='KiB'/>        </numa> </cpu> 参数说明nodeset物理机numa nodecellid虚拟机 numa node步骤 4 设置PCIe网卡直通。            设置PCIe网卡直通的脚本如下所示:      <hostdev mode='subsystem' type='pci' managed='yes'>      <source>      <address domain='0x0000' bus='0x82' slot='0x00' function='0x0'/>      </source></hostdev>其中"domain"、"bus"、"slot"和"function"是对应物理网卡的信息,可以执行lspci或者ethtool -i 网卡名 命令查看。              执行lspci,输出如下结果,只需关注最左侧的数字:        “82:00.0 Ethernet controller: Huawei Technologies Co., Ltd. Hi1822 Family (4*25GE) (rev 45)”        其中,网卡的bus-info是16进制数,由上述输出结果最开头的数字82:00.0可以看出,bus为0x82,slot为0x00,function为0x0,domain为0x0000。步骤 5 设置静态大页。宿主机配置静态大页。在kernel启动时的cmdline添加配置参数,即在/boot目录下的grub.cfg 文件添加如下设置:transparent_hugepage=never default_hugepagesz=1G hugepagesz=1G hugepages=200                配置1G的hugepage,需要当前宿主机页表大小为4K。 2.设置内存大页配置。        设置内存大页的脚本如下所示:    <memoryBacking>    <hugepages>    <page size=’ 1048576’ unit=’KiB’ nodeset=’0’/>    </hugepages></memoryBacking>
  • [技术干货] Redis比Memcached的优势在哪里?
    1、Memcached所有的值均是简单字符串,Redis作为其替代者,支持更为丰富的数据类型2、Redis 的速度比 Memcached 快很多3、Redis可以做到持久化数据
  • [技术干货] Memcached与Redis的区别都有哪些?
    1、存储方式Memecache把数据全部存在内存之中,断电后会挂掉,没有持久化功能,数据不能超过内存大小。Redis有部份存在硬盘上,这样能保证数据的持久性。2、数据支持类型Memcache对数据类型支持相对简单,只有String这一种类型Redis有复杂的数据类型。Redis不仅仅支持简单的k/v类型的数据,同时还提供 list,set,zset,hash等数据结构的存储。3、使用底层模型不同它们之间底层实现方式 以及与客户端之间通信的应用协议不一样。Redis直接自己构建了VM 机制 ,因为一般的系统调用系统函数的话,会浪费一定的时间去移动和请求。4、集群模式:Memcached没有原生的集群模式,需要依靠客户端来实现往集群中分片写入数据;但是 Redis 目前 是原生支持 cluster 模式的.5、Memcached是多线程,非阻塞IO复用的网络模型;Redis使用单线程的多路 IO 复用模型。6、Value 值大小不同:Redis 最大可以达到 512MB;Memcached 只有 1MB。
  • [中间件] 【华为云鲲鹏云服务最佳实践】【工具篇】第099期Memcached-1.5.10安装配置指南
    1、 简介Memcached是一套分布式的内存对象缓存系统,使用C语言编写,作为数据库的前端cache,缓存数据库查询结果能够减轻数据库负载。类似一张巨大的hash表,缓存的对象以key-value对的形式存在。2、基础环境类别子项版本获取地址(方法)华为云虚拟机KC1(920)--OSCentOS7.6Kernel4.14 软件包  memcached 1.5.10https://kojipkgs.fedoraproject.org//packages/memcached/1.5.10/2.fc30/src/memcached-1.5.10-2.fc30.src.rpm3、依赖安装yum install –y mock rpm-build4、组件依赖安装 下载并解压组件wget https://kojipkgs.fedoraproject.org//packages/memcached/1.5.10/2.fc30/src/memcached-1.5.10-2.fc30.src.rpm 安装源码包useradd -s /sbin/nologin mockbuildrpm -ivh memcached-1.5.10-2.fc30.src.rpm编译rpmbuild -ba /root/rpmbuild/SPECS/memcached.spec(多次执行,直到编译成功)安装依赖包yum install -y gcc libevent-devel perl-generators perl cyrus-sasl-devel selinux-policy-devel selinux-policy git去掉memcached.spec第39行的括号和if 修改memcached.spec中关于perl依赖包的 安装rpm -ivh RPMS/aarch64/* 启动停止服务service memcached startservice memcached statusservice memcached stop  5、系统配置无6、测试无7、参考信息无8、FQAQ:安装源码包报错   解决用户组的问题,因为在fedora编译的时候存在这个用户组A:yum install mock;useradd -s /sbin/nologin mockbuildQ:编译报错   A:去掉memcached.spec第39行的括号Q:编译报错            A:去掉memcached.spec第39行if   
  • KUNPENG平台Memcached1.5.12移植自动安装脚本
    1 Memcached简介Memcached是一套分布式的高速缓存系统,由LiveJournal的Brad Fitzpatrick开发,但目前被许多网站使用。这是一套开放源代码软件,以BSD license授权发布。memcached缺乏认证以及安全管制,这代表应该将memcached服务器放置在防火墙后。memcached的API使用三十二比特的循环冗余校验(CRC-32)计算键值后,将数据分散在不同的机器上。当表格满了以后,接下来新增的数据会以LRU机制替换掉。由于memcached通常只是当作缓存系统使用,所以使用memcached的应用程序在写回较慢的系统时(像是后端的数据库)需要额外的代码更新memcached内的数据。  2 环境信息2.1 环境信息类别子项版本获取地址OSCentOS7.5 Aarch64href="https://www.centos.org/download/" https://www.centos.org/download/服务器配置16U16GB50GB软件Memcached1.5.12https://memcached.org/files/memcached-1.5.12.tar.gz3 软件移植3.1 环境准备:OS安装类型:CentOS-7.5-aarch64-1804。 注:操作系统安装使用最小简化版安装(如上图),其余步骤安装一般安装操作系统步骤即可。 3.1.1 相关软件下载上传:1、 上传CentOS 7.5系统ISO镜像文件至服务器2、 上传memcached-1.5.12.tar.gz源码包至服务器目录下,如/opt下载地址:https://memcached.org/files/memcached-1.5.12.tar.gz3.2 安装Memcached1、 安装Memcached上传附件脚本至要安装Memcached的服务器上的任意目录,如/opt。添加执行权限:chmod +x /opt/ memcached _install.sh执行脚本sh /opt/memcached _install.sh2、 提示memcached install success表示安装成功。     3.3 验证执行   4 参考信息https://www.huaweicloud.com/kunpeng/software.html
  • [中间件] 【华为云鲲鹏云服务最佳实践】【中间件篇】第002期 Memcached 1.4.15 安装配置指南
    1、简介      memcached是一套分布式的高速缓存系统,由LiveJournal的Brad Fitzpatrick开发,但目前被许多网站使用。这是一套开放源代码软件,以BSD license授权发布。memcached是高性能的分布式内存缓存服务器。一般的使用目的是,通过缓存数据库查询结果,减少数据库访问次数,以提高动态Web应用的速度、提高可扩展性。      官方链接:https://memcached.org/       类别:服务器2、基础环境类别子项版本获取地址(方法)华为云虚拟机RC3(916)--OSCentOS7.5 Kernel4.14 软件包memcached1.4.15 3、依赖安装无4、组件编译安装清除yumyum clean all下载服务器包到本地缓存yum makecache更新yum 包yum -y update   安装memcached服务端yum install -y memcached-devel.aarch645、系统配置无6、测试测试内容:memcached服务端是否正常启动systemctl start memcached.service测试结果:服务端正常运行7、参考信息官方文档:https://github.com/memcached/memcached/wiki/ProgrammingFAQ 8、FAQ无 
  • [交流分享] 【鲲鹏翱翔】应用中间件06-Memcached移植安装指南
    1.   简介Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态、数据库驱动网站的速度。Memcached基于一个存储键/值对的hashmap。其守护进程(daemon)是用C写的,但是客户端可以用任何语言来编写,并通过memcached协议与守护进程通信。本指南描述了在ARM64,CentOS7.5环境下,移植Memcached1.4.20的过程,可供相关人士参考。2.   部署环境Packet NameVersionCentOSCentOS 7.5 with ARMMemcached3.6.31.4.203.   安装部署     3.1 依赖安装在系统中安装需要的组件,安装相应的库:yum  install libevent libevent-devel         3.2 安装Memcached方式一:yum 安装yum  install memcached方式二:源代码编译安装wget   http://www.memcached.org/files/memcached-1.4.20.tar.gz  #下载指定版本的安装包tar   -zxvf memcached-1.4.20.tar.gz   #解压源码cd   memcached-1.4.20./configure   --prefix=/usr/local/memcached  --build=arm-linux#执行configure,配置安装位置make   #编译make   install备注:所有版本安装包地址:https://github.com/memcached/memcached/wiki/ReleaseNotes     3.3 测试安装结束后执行命令启动Memcached#作为后台服务程序运行:/usr/local/memcached/bin/memcached   -p 11211 -m 64m -d telnet   127.0.0.1 11211   #执行memcached连接stats  #连接成功后执行stas命令     3.4 参考信息[1] Memcached教程:https://www.runoob.com/memcached/memcached-set-data.html[2] github地址:https://github.com/memcached/memcached/wiki/Install 
  • 【干货】Memcached客户端连接合集
    Memcached客户端支持多种语言。这里收集Memcached各种客户端安装、配置、连接的示例。后续会继续收集,请持续关注。华为云Memcached(点击这里进入)客户端连接示例:Telnet客户端Java客户端Python客户端C++客户端PHP客户端特别说明:安装客户端的服务器与Memcached实例之间必须保持网络畅通。这里需要保证两点:(1).两者在同一个虚拟私有云VPC内。(2).两者的安全组规则相同。跨VPC访问的配置可参考Redis实例是否支持跨VPC访问?安全组规则配置可参考安全组配置。目前,华为云DCS Redis有免费使用活动,小伙伴们可以来试试:进一步了解Redis相关内容,请联系中间件小哥。
  • 【Memcached客户端连接系列】之PHP客户端
    PHP客户端这里分别给出redhat(CentOS7为例)和debian示例。更多信息可以通过华为云官网获取,点击这里进入。前提安装PHP客户端的服务器与Memcached实例网络畅通。这里需要保证两点:(1).两者在同一个虚拟私有云VPC内。(2).两者的安全组规则相同。RedHat系列:登录到安装C++客户端的服务器(Linux系统)。安装gcc-c++及make等编译组件。yum install gcc-c++ make安装libmemcached。说明:由于libmemcached库需要增加sasl认证参数,因此不能直接使用yum命令安装。wget https://launchpad.net/libmemcached/1.0/1.0.18/+download/libmemcached-1.0.18.tar.gztar -xvf libmemcached-1.0.18.tar.gzcd libmemcached-1.0.18./configure --prefix=/usr/local/libmemcached --enable-saslmake && make install安装libmemcached之前要完成gcc-c++、sasl相关组件的安装。否则会在编译过程中报错,报错问题解决后请执行make clean之后重新make。安装php。yum install php-devel php-common php-cli安装memcached客户端。注意运行configure配置安装时,增加开启sasl参数。wget http://pecl.php.net/get/memcached-2.1.0.tgztar zxvf memcached-2.1.0.tgzcd memcached-2.1.0phpize./configure --with-libmemcached-dir=/usr/local/libmemcached --enable-memcached-saslmake && make install增加php.ini配置。使用find或者locate命令找到php.ini文件(find / -name php.ini),然后在该文件中增加以下两行内容。extension=memcached.so memcached.use_sasl = 1新增连接示例脚本。新增一个memcached.php文件,增加如下内容:<?php     $connect = new Memcached; //声明一个Memcached连接     $connect->setOption(Memcached::OPT_COMPRESSION, false); //关闭压缩     $connect->setOption(Memcached::OPT_BINARY_PROTOCOL, true); //使用二进制协议     $connect->setOption(Memcached::OPT_TCP_NODELAY, true); //关闭TCP网络延迟策略     $connect->addServer('{memcached_instance_ip}', 11211); //此处填写实例ip和端口    $connect->setSaslAuthData('{username}', '{password}'); //如果实例开启免密访问,则删除或者注释此行    $connect->set("DCS", "Come on!");     echo 'DCS: ',$connect->get("DCS");     echo "\n";     $connect->quit(); ?>运行示例脚本,连接Memcached实例。php memcached.php运行结果如下:DDCS: Come on! Ubuntu系列:登录到安装C++客户端的服务器(Linux系统)。安装gcc及make等编译组件。apt install gcc make安装php。推荐使用php5.x的版本,对sasl认证兼容性较好。按照如下步骤先添加php低版本的镜像源,然后安装php5.6以及php5.6-dev。apt-get install -y language-pack-en-base;LC_ALL=en_US.UTF-8;add-apt-repository ppa:ondrej/php;apt-get update;apt-get install php5.6 php5.6-dev;安装完成后,使用php -version,查看版本号为5.6,说明安装成功。PHP 5.6.36-1+ubuntu16.04.1+deb.sury.org+1 (cli)  Copyright (c) 1997-2016 The PHP Group安装sasl组件。apt install libsasl2-dev cloog.ppl安装libmemcached。wget https://launchpad.net/libmemcached/1.0/1.0.18/+download/libmemcached-1.0.18.tar.gztar -xvf libmemcached-1.0.18.tar.gzcd libmemcached-1.0.18./configure --prefix=/usr/local/libmemcached --enable-saslmake && make install安装libmemcached之前要完成gcc、sasl相关组件的安装。否则会在编译过程中报错,报错问题解决后请执行make clean之后重新make。安装Memcached客户端。首先安装zlib组件。apt install zlib1g.dev安装注意运行configure配置安装时,增加开启sasl参数。wget http://pecl.php.net/get/memcached-2.2.0.tgz;tar zxvf memcached-2.2.0.tgz;cd memcached-2.2.0;phpize5.6;./configure --with-libmemcached-dir=/usr/local/libmemcached --enable-memcached-sasl;make && make install;增加pdo.ini配置。使用find或者locate命令找到pdo.ini文件(find / -name pdo.ini),然后在该文件中增加以下两行内容。extension=memcached.so memcached.use_sasl = 1新增连接示例脚本。新增一个memcached.php文件,增加如下内容:<?php     $connect = new Memcached; //声明一个Memcached连接     $connect->setOption(Memcached::OPT_COMPRESSION, false); //关闭压缩     $connect->setOption(Memcached::OPT_BINARY_PROTOCOL, true); //使用二进制协议     $connect->setOption(Memcached::OPT_TCP_NODELAY, true); //关闭TCP网络延迟策略     $connect->addServer('{memcached_instance_ip}', 11211); //此处填写实例ip和端口    $connect->setSaslAuthData('{username}', '{password}'); //如果实例开启免密访问,则删除或者注释此行    $connect->set("DCS", "Come on!");     echo 'DCS: ',$connect->get("DCS");     echo "\n";     $connect->quit(); ?>运行示例脚本,连接Memcached实例。php memcached.php运行结果如下:DCS: Come on!
  • 【Memcached客户端连接系列】之C++客户端
    C++客户端支持免密和密码访问两种模式的Memcached实例。这里分别给出代码示例。前提安装C++客户端的服务器与Memcached实例网络畅通。这里需要保证两点:(1).两者在同一个虚拟私有云VPC内。(2).两者的安全组规则相同。安装C++客户端的服务器已安装了GCC(建议为4.8.4或更高版本)。已获取了最新版本的依赖包:libmemcached-x.y.z.tar.gz(x.y.z为依赖包的版本号),并且上传到安装C++客户端的服务器。步骤登录到安装C++客户端的服务器(Linux系统)。安装sasl相关依赖包。debian类系统:apt install libsasl2-dev cloog.pplRedhat类系统: yum install cyrus-sasl*安装libmemcached-x.y.z.tar.gz依赖包。tar -xzvf libmemcached-x.y.z.tar.gzcd libmemcached-x.y.z./configure --enable-saslmakemake install新建build.sh文件,将如下代码复制到build.sh文件。g++ -o dcs_sample dcs_sample.cpp -lmemcached -std=c++0x -lpthread -lsasl2说明:编译如果报错找不到libmemcached.so.11文件,请用find命令找到此文件,并将其拷贝到/usr/lib目录下。新建dcs_sample.cpp文件,将如下C++代码复制到dcs_sample.cpp文件并修改代码。密码模式代码示例:#include <iostream> #include <string> #include <libmemcached/memcached.h> using namespace std;  #define IP  "ip or domain name"   //Memcached实例连接地址#define PORT  port                        //Memcached实例连接端口           #define USERNAME "userName"  //Memcached实例用户名#define PASSWORD "password"  //Memcached实例连接密码memcached_return rusult;  memcached_st * init() {     memcached_st *memcached = NULL;     memcached_server_st *cache;     memcached = memcached_create(NULL);     cache = memcached_server_list_append(NULL, IP, PORT, &rusult);      sasl_client_init(NULL);          memcached_set_sasl_auth_data(memcached, USERNAME, PASSWORD);           memcached_behavior_set(memcached,MEMCACHED_BEHAVIOR_BINARY_PROTOCOL,1);          memcached_server_push(memcached,cache);          memcached_server_list_free(cache);             return memcached; }  int main(int argc, char *argv[]) {          memcached_st *memcached=init();     string key = "memcached";     string value = "hello world!";     size_t value_length = value.length();     int expire_time = 0;     uint32_t flag = 0;      rusult = memcached_set(memcached,key.c_str(),key.length(),value.c_str(),value.length(),expire_time,flag);       if (rusult != MEMCACHED_SUCCESS){       cout <<"set data failed: " << rusult << endl;       return -1;     }     cout << "set succesed, key: " << key << ", value: " << value << endl;     cout << "get key:" << key << endl;     char* result = memcached_get(memcached,key.c_str(),key.length(),&value_length,&flag,&rusult);     cout << "value:" << result << endl;                      memcached_free(memcached);     return 0; }免密模式代码示例:#include <iostream> #include <string> #include <libmemcached/memcached.h> using namespace std;  #define IP  "ip or domain name"  //Memcached实例连接地址#define PORT  port                       //Memcached实例连接端口memcached_return rusult;  memcached_st * init() {     memcached_st *memcached = NULL;     memcached_server_st *cache;     memcached = memcached_create(NULL);     cache = memcached_server_list_append(NULL, IP, PORT, &rusult);          memcached_server_push(memcached,cache);     memcached_server_list_free(cache);          return memcached; }  int main(int argc, char *argv[]) {          memcached_st *memcached=init();     string key = "memcached";     string value = "hello world!";     size_t value_length = value.length();     int expire_time = 0;     uint32_t flag = 0;      rusult = memcached_set(memcached,key.c_str(),key.length(),value.c_str(),value.length(),expire_time,flag);       if (rusult != MEMCACHED_SUCCESS){       cout <<"set data failed: " << rusult << endl;       return -1;     }     cout << "set succesed, key: " << key << " ,value: " << value << endl;     cout << "get key:" << key << endl;     char* result = memcached_get(memcached,key.c_str(),key.length(),&value_length,&flag,&rusult);     cout << "value:" << result << endl;                       memcached_free(memcached);     return 0; }编译源码,生成dcs_sample二进制文件。chmod 700 build.sh./build.sh执行编译后的二进制文件,连接Memcached实例。./dcs_sample执行结果如下:set succesed, key: memcached ,value: hello world! get key:memcached value:hello world!
  • 【Memcached客户端连接系列】之Python客户端
    Python客户端支持免密和密码访问两种模式的Memcached实例。这里分别给出代码示例。前提安装Python客户端的服务器与Memcached实例网络畅通。这里需要保证两点:(1).两者在同一个虚拟私有云VPC内。(2).两者的安全组规则相同。安装Python客户端的服务器已安装了Python(建议为2.7.6或更高版本)。已获取了最新版本的依赖包:python-binary-memcached-x.y.z.zip(x.y.z为依赖包的版本号),并且上传到安装Python客户端的服务器。步骤登录到安装Python客户端的服务器(Linux系统)。安装依赖包。unzip -xzvf python-binary-memcached-x.y.z.zipcd python-binary-memcached-x.y.zpython setup.py install如以上步骤安装报错,可使用apt或yum方式安装依赖包,如apt方式安装的具体命令如下:apt install python-pip;pip install python-binary-memcached;新建Python文件如dcs_test.py,将如下Python代码复制到dcs_test.py文件并修改代码。密码模式代码示例:import bmemcached client = bmemcached.Client(('ip or domain name:port'), 'userName', 'password') //Memcached实例连接地址 ,用户名和连接密码print "set('key', 'hello world!')" print client.set('key', 'hello world!') print "get('key')" print client.get('key')免密模式代码示例:import bmemcached client = bmemcached.Client('ip or domain name:port') //Memcached实例连接地址print "set('key', 'hello world!')" print client.set('key', 'hello world!') print "get('key')" print client.get('key')运行dcs_test.py文件,可以看到如下结果。# python test.py  set('key', 'hello world!') True get('key') hello world!
  • 【Memcached客户端连接系列】之Java客户端
    Java客户端支持免密和密码访问两种模式的Memcached实例。这里分别给出代码示例。前提安装Java客户端的服务器与Memcached实例网络畅通。这里需要保证两点:(1).两者在同一个虚拟私有云VPC内。(2).两者的安全组规则相同。安装Java客户端的服务器已安装了Java JDK和常用的IDE(如Eclipse)。已获取了最新版本的依赖包:spymemcached-x.y.z.jar(x.y.z为依赖包的版本号),并且上传到安装Java客户端的服务器。步骤登录到安装java客户端的服务器(Linux系统)。在Eclipse中创建一个Java工程,并将spymemcached-x.y.z.jar依赖包导入,工程名可自定义。新建一个ConnectMemcached1类,将如下Java代码复制到类中并修改代码。密码模式代码示例://java 连接加密的Memcached代码 import java.io.IOException; import java.util.concurrent.ExecutionException; import net.spy.memcached.AddrUtil; import net.spy.memcached.ConnectionFactoryBuilder; import net.spy.memcached.ConnectionFactoryBuilder.Protocol; import net.spy.memcached.MemcachedClient; import net.spy.memcached.auth.AuthDescriptor; import net.spy.memcached.auth.PlainCallbackHandler; import net.spy.memcached.internal.OperationFuture;  public class ConnectMemcached1 {     public static void main(String[] args)     {         final String connectionaddress = "ip or domain name:port";  //Memcached实例连接地址         final String username = "userName";//Memcached实例用户名         final String password = "password";//Memcached实例连接密码         MemcachedClient client = null;         try         {             AuthDescriptor authDescriptor =                 new AuthDescriptor(new String[] {"PLAIN"}, new PlainCallbackHandler(username,                         password));             client = new MemcachedClient(                     new ConnectionFactoryBuilder().setProtocol(Protocol.BINARY)                             .setAuthDescriptor(authDescriptor)                             .build(),                     AddrUtil.getAddresses(connectionaddress));             String key = "memcached";//向Memcached中存一个key为"memcached"的数据             String value = "Hello World";//value为Hello World             int expireTime = 5; // 过期时间,单位s; 从写入时刻开始计时,超过expireTime s后,该数据过期失效,无法再读出;             doExcute(client, key, value, expireTime);//执行操作         }         catch (IOException e)         {             e.printStackTrace();         }     }      /**      *向Memcached写数据方法      */     private static void doExcute(MemcachedClient client, String key, String value, int expireTime)     {         try         {             OperationFuture<Boolean> future = client.set(key, expireTime, value);             future.get();// spymemcached set()是异步的,future.get() 等待cache.set()操作结束,也可以不等待,用户根据自己需求选择;             System.out.println("Set操作成功");             System.out.println("Get操作:" + client.get(key));             Thread.sleep(6000);//等待6000毫秒,即6秒,该数据将会过期失效,无法再读出             System.out.println("6秒后再执行Get操作:" + client.get(key));          }         catch (InterruptedException e)         {             e.printStackTrace();         }         catch (ExecutionException e)         {             e.printStackTrace();         }         if (client != null)         {             client.shutdown();         }     } }免密模式代码示例://java 连接免密的Memcached代码 import java.io.IOException; import java.util.concurrent.ExecutionException;  import net.spy.memcached.AddrUtil; import net.spy.memcached.BinaryConnectionFactory; import net.spy.memcached.MemcachedClient; import net.spy.memcached.internal.OperationFuture;  public class ConnectMemcached {     public static void main(String[] args)     {         final String connectionaddress = "ip or domain name:port";  //Memcached实例连接地址         MemcachedClient client = null;         try         {             client = new MemcachedClient(new BinaryConnectionFactory(), AddrUtil.getAddresses(connectionaddress));             String key = "memcached";//向Memcached中存一个key为"memcached"的数据             String value = "Hello World";//value为Hello World             int expireTime = 5; // 过期时间,单位s; 从写入时刻开始计时,超过 expireTime s后,该数据过期失效,无法再读出;             doExcute(client, key, value, expireTime);//执行操作         }         catch (IOException e)         {             e.printStackTrace();         }     }      /**      *向Memcached写数据方法      */     private static void doExcute(MemcachedClient client, String key, String value, int expireTime)     {         try         {             OperationFuture<Boolean> future = client.set(key, expireTime, value);             future.get();// spymemcached set()是异步的,future.get() 等待cache.set()操作结束,也可以不等待,用户根据自己需求选择;             System.out.println("Set操作成功");             System.out.println("Get操作:" + client.get(key));             Thread.sleep(6000);//等待6000毫秒,即6秒,该数据将会过期失效,无法再读出             System.out.println("6秒后再执行Get操作:" + client.get(key));          }         catch (InterruptedException e)         {             e.printStackTrace();         }         catch (ExecutionException e)         {             e.printStackTrace();         }         if (client != null)         {             client.shutdown();         }     } }运行main方法,在Eclipse下的Console窗口可以看到如下结果。Set操作成功 Get操作:Hello World 6秒后再执行Get操作:null
  • 【Memcached客户端连接系列】之Telnet客户端
    Telnet客户端只支持免密访问Memcached实例,此时只支持二进制协议。前提安装Telnet的服务器与Memcached实例网络畅通。这里需要保证两点:(1).两者在同一个虚拟私有云VPC内。(2).两者的安全组规则相同。步骤登录到安装Telnet客户端的服务器(Linux系统)。确认是否安装了Telnet客户端。which telnet连接Memcached实例。telnet {ip or domain name} {port}{ip or domain name} 和{port}分别为Memcached实例的IP地址/域名,以及端口。使用Memcached实例的示例(set和get两行为输入的命令,其他为命令返回内容)。set hello 0 0 6 world! STORED get hello VALUE hello 0 6 world! END
  • 【看点】Memcached 1.5.9 发布,支持 Linux transparent hugepages
    转自开源中国,作者cloudddy 19566 Memcached 1.5.9 发布了,此次更新新增支持 Linux transparent hugepages。更新如下: Fixes [*]修复 ASCII 获取错误处理问题 [*]drop_privileges 如果可用则不再默认 [*]从 crawler 中删除坏的断言 [*]将 seccomp 标为实验性质 [*]在 memcached-tool dump 中包含非 [\w.~-] 字节的键 [*]seccomp 规则中的白名单 clock_gettime [*]段错误: 防止在 sasl_server_start 之前调用 sasl_server_step [*]修复片状lru-maintainer测试 (OS X) New Features [*]支持 Linux transparent hugepages (-L option) Memcached是一个高性能、分布式的缓存系统,可有效加快应用速度、提升应用的可扩展性,降低对后端数据库的性能依赖。分布式缓存 Memcached 是兼容Memcached的内存数据库服务,提供了双机热备、故障恢复、无忧运维等能力,满足用户应用加速以及高读写性能的业务诉求。 现分布式缓存服务Memcached可以免费体验啦,戳这里立即体验
  • 【干货贴】Memcached与Redis有什么区别
    Redis 和 Memcached 都是基于内存的数据存储系统。Memcached是高性能分布式内存缓存服务,其本质上就是一个内存key-value数据库。Redis是一个开源的key-value存储系统。与Memcached类似,Redis将大部分数据存储在内存中,支持的数据类型包括:字符串、哈希表、链表、集合、有序集合以及基于这些数据类型的相关操作。那么,Memcached与Redis有什么区别呢?让我们一起来看一下。 1、数据操作不同与Memcached仅支持简单的key-value结构的数据记录不同,Redis支持的数据类型要丰富得多。Memcached基本只支持简单的key-value存储,不支持枚举,不支持持久化和复制等功能。Redis支持服务器端的数据操作相比Memcached来说,拥有更多的数据结构和并支持更丰富的数据操作,支持list、set、sorted set、hash等众多数据结构,还同时提供了持久化和复制等功能。而通常在Memcached里,使用者需要将数据拿到客户端来进行类似的修改再set回去,这大大增加了网络IO的次数和数据体积。在Redis中,这些复杂的操作通常和一般的GET/SET一样高效。所以,如果需要缓存能够支持更复杂的结构和操作, Redis会是更好的选择。 2、内存管理机制不同在Redis中,并不是所有的数据都一直存储在内存中的。这是和Memcached相比一个最大的区别。当物理内存用完时,Redis可以将一些很久没用到的value交换到磁盘。Redis只会缓存所有的key的信息,如果Redis发现内存的使用量超过了某一个阀值,将触发swap的操作,Redis根据“swappability = age*log(size_in_memory)”计算出哪些key对应的value需要swap到磁盘。然后再将这些key对应的value持久化到磁盘中,同时在内存中清除。这种特性使得Redis可以保持超过其机器本身内存大小的数据。 而Memcached默认使用SlabAllocation机制管理内存,其主要思想是按照预先规定的大小,将分配的内存分割成特定长度的块以存储相应长度的key-value数据记录,以完全解决内存碎片问题。 从内存利用率来讲,使用简单的key-value存储的话,Memcached的内存利用率更高。而如果Redis采用hash结构来做key-value存储,由于其组合式的压缩,其内存利用率会高于Memcached。 3、性能不同由于Redis只使用单核,而Memcached可以使用多核,所以平均每一个核上Redis在存储小数据时比Memcached性能更高。而在100k以上的数据中,Memcached性能要高于Redis,虽然Redis也在存储大数据的性能上进行了优化,但是比起Memcached,还是稍有逊色。 4、集群管理不同Memcached是全内存的数据缓冲系统,Redis虽然支持数据的持久化,但是全内存毕竟才是其高性能的本质。作为基于内存的存储系统来说,机器物理内存的大小就是系统能够容纳的最大数据量。如果需要处理的数据量超过了单台机器的物理内存大小,就需要构建分布式集群来扩展存储能力。 Memcached本身并不支持分布式,因此只能在客户端通过像一致性哈希这样的分布式算法来实现Memcached的分布式存储。相较于Memcached只能采用客户端实现分布式存储,Redis更偏向于在服务器端构建分布式存储。 小结:Redis和Memcached哪个更好?Redis更多场景是作为Memcached的替代者来使用,当需要除key-value之外的更多数据类型支持或存储的数据不能被剔除时,使用Redis更合适。如果只做缓存的话,Memcached已经足够应付绝大部分的需求,Redis 的出现只是提供了一个更加好的选择。总的来说,根据使用者自身的需求去选择才是最合适的。
总条数:19 到第
上滑加载中