热门标签 | 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 教程–菜鸟教程


推荐阅读
  • PHP函数的工作原理与性能分析
    在编程语言中,函数是最基本的组成单元。本文将探讨PHP函数的特点、调用机制以及性能表现,并通过实际测试给出优化建议。 ... [详细]
  • 实践指南:使用Express、Create React App与MongoDB搭建React开发环境
    本文详细介绍了如何利用Express、Create React App和MongoDB构建一个高效的React应用开发环境,旨在为开发者提供一套完整的解决方案,包括环境搭建、数据模拟及前后端交互。 ... [详细]
  • 如何在PHP中安装Xdebug扩展
    本文介绍了如何从PECL下载并编译安装Xdebug扩展,以及如何配置PHP和PHPStorm以启用调试功能。 ... [详细]
  • 本文介绍了如何在Linux系统中获取库源码,并在从源代码编译软件时收集所需的依赖项列表。 ... [详细]
  • 黄聪:MySQL主从复制配置,实现高效读写分离
    大型网站为应对高并发访问,不仅需要在前端实现分布式负载均衡,还需在数据业务和访问层采取有效措施。采用传统的数据结构已无法满足需求,通过配置MySQL主从复制,可实现高效的读写分离,显著提升系统性能和稳定性。 ... [详细]
  • 在OpenCV 3.1.0中实现SIFT与SURF特征检测
    本文介绍如何在OpenCV 3.1.0版本中通过Python 2.7环境使用SIFT和SURF算法进行图像特征点检测。由于这些高级功能在OpenCV 3.0.0及更高版本中被移至额外的contrib模块,因此需要特别处理才能正常使用。 ... [详细]
  • 本文详细介绍了如何搭建一个高可用的MongoDB集群,包括环境准备、用户配置、目录创建、MongoDB安装、配置文件设置、集群组件部署等步骤。特别关注分片、读写分离及负载均衡的实现。 ... [详细]
  • 本文通过分析一个具体的案例,探讨了64位Linux系统对32位应用程序的兼容性问题。案例涉及OpenVPN客户端在64位系统上的异常行为,通过逐步排查和代码测试,最终定位到了与TUN/TAP设备相关的系统调用兼容性问题。 ... [详细]
  • 本文档详细介绍了软通动力Java开发工程师职位的笔试题目,涵盖了Java基础、集合框架、JDBC、JSP等内容,并提供了详细的答案解析。 ... [详细]
  • 深入理解云计算与大数据技术
    本文详细探讨了云计算与大数据技术的关键知识点,包括大数据处理平台、社会网络大数据、城市大数据、工业大数据、教育大数据、数据开放与共享的应用,以及搜索引擎与Web挖掘、推荐技术的研究及应用。文章还涵盖了云计算的基础概念、特点和服务类型分类。 ... [详细]
  • 在Effective Java第三版中,建议在方法返回类型中优先考虑使用Collection而非Stream,以提高代码的灵活性和兼容性。 ... [详细]
  • Spring Boot使用AJAX从数据库读取数据异步刷新前端表格
      近期项目需要是实现一个通过筛选选取所需数据刷新表格的功能,因为表格只占页面的一小部分,不希望整个也页面都随之刷新,所以首先想到了使用AJAX来实现。  以下介绍解决方法(请忽视 ... [详细]
  • Redis:缓存与内存数据库详解
    本文介绍了数据库的基本分类,重点探讨了关系型与非关系型数据库的区别,并详细解析了Redis作为非关系型数据库的特点、工作模式、优点及持久化机制。 ... [详细]
  • Memcached的delete命令用于删除memcached服务器现有的键。语法memcacheddelete命令的基本语法如下所示:deletekey如果键成功删除,则返回DE ... [详细]
  • MySQL 数据库索引技术原理初探
    概述什么是索引一本书500页的书,如果没有目录,直接去找某个知识点,可能需要找一会儿,但是借助前面的目录,就可以快速找到对应知识点在书的哪一页。这里的目录就是索引。所以,为什么会有 ... [详细]
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社区 版权所有