memcached(2)常用语法与java连接服务

memcached常用语法及java使用方式

Author:SimpleWu

Memcached 存储命令

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

如果set的key已经存在,该命令可以更新该key所对应的原来的数据,也就是实现更新的作用。

set key flags exptime bytes [noreply]
value 

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

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

add key flags exptime bytes [noreply]
value

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

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

replace key flags exptime bytes [noreply]
value

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

append key flags exptime bytes [noreply]
value

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

prepend key flags exptime bytes [noreply]
value

Memcached CAS(Check-And-Set 或 Compare-And-Swap) 命令用于执行一个"检查并设置"的操作

它仅在当前客户端最后一次取值后,该key 对应的值没有被其他客户端修改的情况下, 才能够将值写入。

检查是通过cas_token参数进行的, 这个参数是Memcach指定给已经存在的元素的一个唯一的64位值。

cas key flags exptime bytes unique_cas_token [noreply]
value

参数说明如下:

  • key:键值 key-value 结构中的 key,用于查找缓存值。
  • flags:可以包括键值对的整型参数,客户机使用它存储关于键值对的额外信息 。
  • exptime:在缓存中保存键值对的时间长度(以秒为单位,0 表示永远)
  • bytes:在缓存中存储的字节数
  • unique_cas_token通过 gets 命令获取的一个唯一的64位值。
  • noreply(可选): 该参数告知服务器不需要返回数据
  • value:存储的值(始终位于第二行)(可直接理解为key-value结构中的value)

Memcached 查找命令

Memcached get 命令获取存储在 key(键) 中的 value(数据值) ,如果 key 不存在,则返回空。

get key

多个 key 使用空格隔开

get key1 key2 key3

Memcached gets 命令获取带有 CAS 令牌存 的 value(数据值) ,如果 key 不存在,则返回空。

gets key

多个 key 使用空格隔开

gets key1 key2 key3

Memcached delete 命令用于删除已存在的 key(键)。

delete key [noreply]

Memcached 统计命令

Memcached stats 命令用于返回统计信息例如 PID(进程号)、版本号、连接数等。

stats

结果:

这里显

stats
STAT pid 1162
STAT uptime 5022
STAT time 1415208270
STAT version 1.4.14
STAT libevent 2.0.19-stable
STAT pointer_size 64
STAT rusage_user 0.096006
STAT rusage_system 0.152009
STAT curr_connections 5
STAT total_connections 6
STAT connection_structures 6
STAT reserved_fds 20
STAT cmd_get 6
STAT cmd_set 4
STAT cmd_flush 0
STAT cmd_touch 0
STAT get_hits 4
STAT get_misses 2
STAT delete_misses 1
STAT delete_hits 1
STAT incr_misses 2
STAT incr_hits 1
STAT decr_misses 0
STAT decr_hits 1
STAT cas_misses 0
STAT cas_hits 0
STAT cas_badval 0
STAT touch_hits 0
STAT touch_misses 0
STAT auth_cmds 0
STAT auth_errors 0
STAT bytes_read 262
STAT bytes_written 313
STAT limit_maxbytes 67108864
STAT accepting_conns 1
STAT listen_disabled_num 0
STAT threads 4
STAT conn_yields 0
STAT hash_power_level 16
STAT hash_bytes 524288
STAT hash_is_expanding 0
STAT expired_unfetched 1
STAT evicted_unfetched 0
STAT bytes 142
STAT curr_items 2
STAT total_items 6
STAT evictions 0
STAT reclaimed 1
END

示了很多状态信息,下边详细解释每个状态项:

  • pid: memcache服务器进程ID
  • uptime:服务器已运行秒数
  • time:服务器当前Unix时间戳
  • version:memcache版本
  • pointer_size:操作系统指针大小
  • rusage_user:进程累计用户时间
  • rusage_system:进程累计系统时间
  • curr_connections:当前连接数量
  • total_connections:Memcached运行以来连接总数
  • connection_structures:Memcached分配的连接结构数量
  • cmd_get:get命令请求次数
  • cmd_set:set命令请求次数
  • cmd_flush:flush命令请求次数
  • get_hits:get命令命中次数
  • get_misses:get命令未命中次数
  • delete_misses:delete命令未命中次数
  • delete_hits:delete命令命中次数
  • incr_misses:incr命令未命中次数
  • incr_hits:incr命令命中次数
  • decr_misses:decr命令未命中次数
  • decr_hits:decr命令命中次数
  • cas_misses:cas命令未命中次数
  • cas_hits:cas命令命中次数
  • cas_badval:使用擦拭次数
  • auth_cmds:认证命令处理的次数
  • auth_errors:认证失败数目
  • bytes_read:读取总字节数
  • bytes_written:发送总字节数
  • limit_maxbytes:分配的内存总大小(字节)
  • accepting_conns:服务器是否达到过最大连接(0/1)
  • listen_disabled_num:失效的监听数
  • threads:当前线程数
  • conn_yields:连接操作主动放弃数目
  • bytes:当前存储占用的字节数
  • curr_items:当前存储的数据总数
  • total_items:启动以来存储的数据总数
  • evictions:LRU释放的对象数目
  • reclaimed:已过期的数据条目来存储新数据的数目

Memcached stats items 命令用于显示各个 slab 中 item 的数目和存储时长(最后一次访问距离现在的秒数)。

stats items

结果:

stats items
STAT items:1:number 1
STAT items:1:age 7
STAT items:1:evicted 0
STAT items:1:evicted_nonzero 0
STAT items:1:evicted_time 0
STAT items:1:outofmemory 0
STAT items:1:tailrepairs 0
STAT items:1:reclaimed 0
STAT items:1:expired_unfetched 0
STAT items:1:evicted_unfetched 0
END

Memcached flush_all 命令用于清理缓存中的所有 key=>value(键=>值) 对。

该命令提供了一个可选参数 time,用于在制定的时间后执行清理缓存操作。

flush_all [time] [noreply]

JAVA连接使用Memcached 服务

要使用Java连接memcached服务,一般常见的有两种方式:

  1. 使用Memcached-Java-Client方式(官方提供)
  2. 使用spymemcached方式

两种方式的对比:

Memcached-Java-Client方式,较早推出的memcached JAVA客户端API,应用广泛,运行比较稳定。

spymemcached方式,支持异步,单线程的memcached客户端,用到了java1.5版本的concurrent和nio,存取速度会高于前者,但是稳定性不好,测试中常报timeOut等相关异常。?

项目中加入spymemcached依赖

<!-- spymemcached -->
<dependency>
  <groupId>com.google.code.simple-spring-memcached</groupId>
  <artifactId>spymemcached</artifactId>
  <version>2.8.4</version>
</dependency>

spymemcached操作memcache,连接memcached服务器,并写入数据,检索出数据。

public static void main(String[] args) throws IOException, InterruptedException, ExecutionException {
        //添加memcached的服务的地址和端口号
        InetSocketAddress address = new InetSocketAddress("127.0.0.1", 11211);
        //创建memcachedClient客户端连接对象
        MemcachedClient client = new MemcachedClient(address);
        //存储数据
        @SuppressWarnings("rawtypes")
        Future future = client.set("SimpleWu", 900, "[email protected]");
        //查看存储状态
        System.out.println("status:" + future.get());
        //输出值
        System.out.println("value in cache:" + client.get("SimpleWu"));
        //client.delete("hello"); //删除
        //client.flushall();   //清除所有数据
        client.shutdown();   //关闭连接
    }

同样使用Maven来导入Memcached-Java-Client的jar包。

<!-- Memcached-Java-Client -->
<dependency>
  <groupId>com.whalin</groupId>
  <artifactId>Memcached-Java-Client</artifactId>
  <version>3.0.2</version>
</dependency>
<dependency>
  <groupId>org.slf4j</groupId>
  <artifactId>slf4j-simple</artifactId>
  <version>1.6.4</version>
</dependency>

使用Memcached-java-client操作memcached服务器。添加数据到memcached,然后检索出数据。

public static void main(String[] args) {
        SockIOPool pool = SockIOPool.getInstance();  //创建memcache连接池
        String[] addresses = { "127.0.0.1:11211" };  //服务器地址,可以添加多个
        Integer[] weights = {3};     //添加权重
        pool.setServers(addresses);  //服务器地址
        pool.setWeights(weights);    //权重信息
        pool.setInitConn( 5 );       //初始连接数
        pool.setMinConn( 5 );        //最小连接数
        pool.setMaxConn( 250 );      //最大连接数
        pool.setMaxIdle( 1000 * 60 * 60 * 6 );  //最大处理时间。
        pool.setMaintSleep( 30 );    // 设置主线程的睡眠时间
        pool.setNagle(false);        //是否缓冲
        pool.setSocketTO(3000);      //Socket阻塞读取数据的超时时间
        pool.setSocketConnectTO(0);  //连接建立时对超时的控制
        pool.initialize();           //初始化
        MemCachedClient client = new MemCachedClient();  // 使用MemCacheClient
        client.add("SimpleWu", "[email protected]");    // 添加
        System.out.println(client.get("SimpleWu"));
        client.delete("hello");    // 删除
        client.flushAll();         // 清空
    }

java具体命令使用参考

适用场合

  • 分布式应用。由于memcached本身基于分布式的系统,所以尤其适合大型的分布式系统。
  • 数据库前段缓存。数据库常常是网站系统的瓶颈。数据库的大并发量访问,常常造成网站内存溢出。当然我们也可以使用hibernate的缓存机制。但memcached是基于分布式的,并可独立于网站应用本身,所以更适合大型网站进行应用的拆分。
  • 服务器间数据共享。举例来讲,我们将网站的登录系统、查询系统拆分为两个应用,放在不同的服务器上,并进行集群,那这个时候用户登录后,登录信息如何从登录系统服务器同步到查询系统登录系统将登录信息缓存起来,服务器呢?这时候,我们便可以使用memcached,查询系统便可以获得登录信息,就像获取本地信息一样。

不适用的场合

那些不需要“分布”的,不需要共享的,或者干脆规模小到只有一台服务器的应用,memcached不会带来任何好处,相反还会拖慢系统效率,因为网络连接同样需要资源

原文地址:https://www.cnblogs.com/SimpleWu/p/9987991.html

时间: 2024-11-05 21:53:39

memcached(2)常用语法与java连接服务的相关文章

四个常用的Java连接池

C3P0.BoneCP.DBCP.Proxool是四个常用的Java连接池,根据环境需求和项目要求选取适当的线程池完成数据库相关操作. C3P0 是一个开放源代码的JDBC连接池,它在lib目录中与Hibernate一起发布,包括了实现jdbc3和jdbc2扩展规范说明的Connection 和Statement 池的DataSources 对象. BoneCP 是一个开源的快速的 JDBC 连接池.BoneCP很小,只有四十几K(运行时需要log4j和Google Collections的支持

MySQL常用指令,java,php程序员,数据库工程师必备。程序员小冰常用资料整理

MySQL常用指令,java,php程序员,数据库工程师必备.程序员小冰常用资料整理 MySQL常用指令(备查) 最常用的显示命令: 1.显示数据库列表. show databases; 2.显示库中的数据表: use mysql; show tables; 3.显示数据表的结构: describe 表名; 4.建库: create database 库名; 5.建表: use 库名: create table 表名 (字段设定列表): 6.删库和删表: drop database 库名; dr

【JDBC编程】Java 连接 MySQL 基本过程以及封装数据库工具类

鉴于linux系统下安装oracle数据库过于麻烦,而相关的java连接mysql基本方法的参考文章过少且参差不齐,故本人查阅了一些书和网络资料写下此文章. 从数据库环境搭建.基本语法到封装工具类全过程,可作为参考.转载请注明来源. 一. 常用的JDBC API 1. DriverManager类 : 数据库管理类,用于管理一组JDBC驱动程序的基本服务.应用程序和数据库之间可以通过此类建立连接.常用的静态方法如下 static connection getConnection(String u

Java进阶(二十五)Java连接mysql数据库(底层实现)

Java进阶(二十五)Java连接mysql数据库(底层实现) 前言 很长时间没有系统的使用java做项目了.现在需要使用java完成一个实验,其中涉及到java连接数据库.让自己来写,记忆中已无从搜索.特将之前使用的方法做一简单的总结.也能够在底层理解一下连接数据库的具体步骤. 实现 首先需要导入相关的jar包,我使用的为:mysql-connector-java-5.1.7-bin.jar. 下面来看一下我所使用的数据库连接方法类: MysqlUtil.java package cn.edu

JAVA连接ACCESS、MYSQL、SQLSEVER、ORACLE数据库

. 概述 1.1 JDBC概念 JDBC(Java Database Connectivity)是Java语言为了支持SQL功能而提供的与数据库连接的用户的接口,JDBC中包括了一组由(Java)语言书写的接口和类,它们都是独立于特定的DBMS,或者说他们可以和各种数据库相关联. 1.2 JDBC用途 JDBC由一组Java语言编写的类和接口组成,使用内嵌式的SQL,主要实现三方面功能:建立于数据库的链接,执行SQL声明以及处理SQL执行结果:JDBC支持基本的SQL功能,使用它可以方便地与不同

JAVA消息服务JMS规范及原理详解

一.简介 JMS即Java消息服务(Java Message Service)应用程序接口,是一个Java平台中关于面向消息中间件(MOM)的API,用于在两个应用程序之间,或分布式系统中发送消息,进行异步通信.Java消息服务是一个与具体平台无关的API,绝大多数MOM提供商都对JMS提供支持. JMS允许应用程序组件基于JavaEE平台创建.发送.接收和读取消息.它使分布式通信耦合度更低,消息服务更加可靠以及异步性. 二.常用术语介绍 在提到JMS时,我们通常会说到一些术语,解释如下: 消息

jsp(Java的服务网页)$javabean

JSP:Java Server Page(Java的服务网页),也是Java的动态网页. JSP的本质:其实就是一个Servlet. JSP---->翻译成Servlet类---->编译成字节码文件--->解释执行了.   1.jsp的基本语法: 1.JSP的注释: 作用:注释Java脚本代码 语法:<%--这是注释--%>,JSP的注释不会被翻译到Servlet代码中去. 2.JSP的Java脚本表达式: 作用:输出数据到页面上 语法:<%=表达式%>(实际上就

通过java连接mysql总结

简介:通过java连接mysql需要用到JDBC驱动.JDBC驱动安装在mysql-client客户端,mysql-server服务端不需要安装. 数据库安装初始化略.测试用到的命令: 1.创建测试用库,表,字段: create database score; use score; create table score(id nvarchar(10),stu_id nvarchar(10),c_name nvarchar(10),grade nvarchar(10)); insert into

java连接MySQL进行增删改操作时报错

java连接MySQL数据库后执行execute语句,控制台总是报错,如下: Exception in thread "main" java.sql.SQLException: Could not retrieve transation read-only status server ……? Caused by: java.sql.SQLException: Unknown system variable 'tx_read_only' 我捣鼓了一整个下午,参考别人的代码,甚至完全套用别