热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

简单入门Memcached

首先讲一下Memcache和Memcached。为什么会有Memcache和Memcached两种名称呢?其实Memcache是这个项目的名称,而Memcached是它服务器端的主
首先讲一下Memcache和Memcached。

为什么会有Memcache和Memcached两种名称呢?其实Memcache是这个项目的名称,而Memcached是它服务器端的主程序文件名。

什么是Memcached

Memcached是一种基于内存的key-value存储。它在内存里维护一个统一的巨大的hash表,用来存储各种格式的数据,包括图像、视频、文件以及数据库
检索的结果等。
Memcached通过缓存数据库查询结果,减少数据库访问次数,以提高动态Web应用的速度、提高可扩展性。

工作原理:

  1. 客户端第一次访问应用程序时,会到数据库(RDBMS)中取出数据,返回给客户端;同时也将取出的数据保存到Memcached中。
  2. 第二次访问时,因为数据已经缓存,不不用去数据库查询了,直接从Memcached取。
ubuntu下Memcached安装

由于Memcache是基于libevent的,所以确保你的系统已经装了libevent,libevent是个程序库,它将Linux的epoll、BSD类操作系统的kqueue等事件处理功能封装成统一的接口。
由于memcached和libevent是由C编写的,所以首先确保你的系统安装了gcc。

sudo apt-get install libevent libevent-deve //安装libevent库
sudo apt-get install build-essential//安装 C/C++ 的编译环境 gtk libgtk2.0-dev
sudo apt-get install libgtk2.0-dev
sudo apt-get install memcached//安装 Memcached

Memcached 连接

telnet 命令并指定主机ip和端口来连接 Memcached 服务。

telnet HOST PORT

《简单入门Memcached》

telnet写入memcache命令格式
\r\n \r\n

  1. 可以是”set”, “add”, “replace”
  2. 保存数据的key
  3. 是一个16位的无符号的整数(以十进制的方式表示)。
  4. 过期的时间。0表示存储的数据永远不过时
  5. 需要存储的字节数 ,当用户希望存储空数据时,可以为0
  6. 最后客户端需要加上”\r\n”作为”命令头”的结束标志。

telnet响应命令

  1. STORED 表示存储成功
  2. NOT_STORED 表示存储失败,但是该失败不是由于错误
    其他操作命令方法同上

telnet 其他命令
1. Stats 状态
2. stats reset 清空统计数据
3. Flush_all 清空数据
4. Quit 退出telnet

Memcached 运行

memcached -p 11211 -m 64m -d

启动了memcached,监听TCP端口11211,最大内存使用量为64M。
启动Memcached 常用参数
-d是启动一个守护进程;
-m是分配给Memcache使用的内存数量,单位是MB;
-u是运行Memcache的用户;
-l是监听的服务器IP地址,可以有多个地址;
-p是设置Memcache监听的端口,,最好是1024以上的端口;
-c是最大运行的并发连接数,默认是1024;
-P是设置保存Memcache的pid文件。

Java 连接 Memcached 服务

在学习中我使用了两种驱动jar包

import java.net.InetSocketAddress;
import net.spy.memcached.MemcachedClient;
public class M {
public static void main(String[] args) {
try{
MemcachedClient mcc = new MemcachedClient(new InetSocketAddress("127.0.0.1", 11211)); // 本地连接 Memcached 服务
System.out.println("Connection to server sucessful.");
mcc.shutdown(); // 关闭连接
}catch(Exception ex){
System.out.println( ex.getMessage() );
}
}
}
运行结果:
2016-08-10 18:50:33.404 INFO net.spy.memcached.MemcachedConnection: Added {QA sa=/127.0.0.1:11211, #Rops=0, #Wops=0, #iq=0, topRop=null, topWop=null, toWrite=0, interested=0} to connect queue
Connection to server sucessful.
2016-08-10 18:50:33.409 INFO net.spy.memcached.MemcachedConnection: Shut down memcached client

import com.danga.MemCached.MemCachedClient;
import com.danga.MemCached.SockIOPool;
public class MemcachedJava {
public static void main(String[] args) {
//初始化SockIOPool,管理Memcached的连接池
String[] server = { "127.0.0.1:11211" };
SockIOPool pool = SockIOPool.getInstance();//获取sock连接池的实例对象
pool.setServers(server);
pool.setFailover(true);
pool.setInitConn(10); //设置初始连接数
pool.setMinConn(5);//最小连接数
pool.setMaxConn(250);//最大连接数
pool.setMaintSleep(30);
pool.setNagle(false);
pool.setSocketTO(3000);
pool.setAliveCheck(true);
pool.initialize();
try{
// 本地连接 Memcached 服务
MemCachedClient mcc = new MemCachedClient();
System.out.println("Connection to server sucessful.");
// mcc.add("frady", "this is a test");
//System.out.println(mcc.get("frady"));
}catch(Exception ex){
System.out.println( ex.getMessage() );
}
}
}
运行结果:
Connection to server sucessful.

具体的Memcached命令可以参见
Memcached 教程–菜鸟教程


推荐阅读
  • Centos下安装memcached+memcached教程
    本文介绍了在Centos下安装memcached和使用memcached的教程,详细解释了memcached的工作原理,包括缓存数据和对象、减少数据库读取次数、提高网站速度等。同时,还对memcached的快速和高效率进行了解释,与传统的文件型数据库相比,memcached作为一个内存型数据库,具有更高的读取速度。 ... [详细]
  • 本文介绍了在Android开发中使用软引用和弱引用的应用。如果一个对象只具有软引用,那么只有在内存不够的情况下才会被回收,可以用来实现内存敏感的高速缓存;而如果一个对象只具有弱引用,不管内存是否足够,都会被垃圾回收器回收。软引用和弱引用还可以与引用队列联合使用,当被引用的对象被回收时,会将引用加入到关联的引用队列中。软引用和弱引用的根本区别在于生命周期的长短,弱引用的对象可能随时被回收,而软引用的对象只有在内存不够时才会被回收。 ... [详细]
  • PHP图片截取方法及应用实例
    本文介绍了使用PHP动态切割JPEG图片的方法,并提供了应用实例,包括截取视频图、提取文章内容中的图片地址、裁切图片等问题。详细介绍了相关的PHP函数和参数的使用,以及图片切割的具体步骤。同时,还提供了一些注意事项和优化建议。通过本文的学习,读者可以掌握PHP图片截取的技巧,实现自己的需求。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • 在重复造轮子的情况下用ProxyServlet反向代理来减少工作量
    像不少公司内部不同团队都会自己研发自己工具产品,当各个产品逐渐成熟,到达了一定的发展瓶颈,同时每个产品都有着自己的入口,用户 ... [详细]
  • 开发笔记:Java是如何读取和写入浏览器Cookies的
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了Java是如何读取和写入浏览器Cookies的相关的知识,希望对你有一定的参考价值。首先我 ... [详细]
  • GreenDAO快速入门
    前言之前在自己做项目的时候,用到了GreenDAO数据库,其实对于数据库辅助工具库从OrmLite,到litePal再到GreenDAO,总是在不停的切换,但是没有真正去了解他们的 ... [详细]
  • 本文介绍了在Ubuntu下制作deb安装包及离线安装包的方法,通过备份/var/cache/apt/archives文件夹中的安装包,并建立包列表及依赖信息文件,添加本地源,更新源列表,可以在没有网络的情况下更新系统。同时提供了命令示例和资源下载链接。 ... [详细]
  • Todayatworksomeonetriedtoconvincemethat:今天在工作中有人试图说服我:{$obj->getTableInfo()}isfine ... [详细]
  • 篇首语:本文由编程笔记#小编为大家整理,主要介绍了软件测试知识点之数据库压力测试方法小结相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 上图是InnoDB存储引擎的结构。1、缓冲池InnoDB存储引擎是基于磁盘存储的,并将其中的记录按照页的方式进行管理。因此可以看作是基于磁盘的数据库系统。在数据库系统中,由于CPU速度 ... [详细]
  • Hibernate延迟加载深入分析-集合属性的延迟加载策略
    本文深入分析了Hibernate延迟加载的机制,特别是集合属性的延迟加载策略。通过延迟加载,可以降低系统的内存开销,提高Hibernate的运行性能。对于集合属性,推荐使用延迟加载策略,即在系统需要使用集合属性时才从数据库装载关联的数据,避免一次加载所有集合属性导致性能下降。 ... [详细]
  • LVS实现负载均衡的原理LVS负载均衡负载均衡集群是LoadBalance集群。是一种将网络上的访问流量分布于各个节点,以降低服务器压力,更好的向客户端 ... [详细]
author-avatar
别他妈给脸不要脸别动老子东西
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有