memcached Java调用,注意点和基础知识

  • 1. Memcached Client简要介绍 

    Memcached Client目前有3种:

    Memcached Client for Java

    SpyMemcached

  • XMemcached

    前两种的下载地址http://pan.baidu.com/s/1dEMWfuD

    这三种Client一般的认知是:

    Memcached Client for Java 比 SpyMemcached更稳定、更早、更广泛;

    SpyMemcached 比 Memcached Client for Java更高效;

    XMemcached 比 SpyMemcache并发效果更好。

2.Java调用memcached用例

 2.1   Memcached Client for Java用例

import com.whalin.MemCached.MemCachedClient;
import com.whalin.MemCached.SockIOPool;
public class TestMemcached {
	public static void main(String[] args) {
		/*初始化SockIOPool,管理memcached的连接池*/
		String[] servers = { "120.143.23.240:12000"};//注意这里的memcached可以是多个
		SockIOPool pool = SockIOPool.getInstance();
		pool.setServers(servers);
		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();
		/*建立MemcachedClient实例*/
		MemCachedClient memCachedClient = new MemCachedClient();
		for (int i = 0; i < 5; i++) {
			/*将对象加入到memcached缓存*/
			boolean success = memCachedClient.set("" + i, "Hello!");
			boolean yes = memCachedClient.set("yuanyirui", "ni shi yi ge da cai bi!");
			/*从memcached缓存中按key值取对象*/
			String result = (String) memCachedClient.get("" + i);
			System.out.println(String.format("set( %d ): %s", i, success));
			System.out.println(String.format("get( %d ): %s", i, result));
		}
	}
}

每个缓存都是一个server;

2.2 SpyMemcached
用例

import java.net.InetSocketAddress;
import java.util.concurrent.Future;

import net.spy.memcached.MemcachedClient;

public class MClientSet {

	public static void main(String[] args){
		try{
			/*建立MemcachedClient 实例,并指定memcached服务的IP地址和端口号*/
			MemcachedClient mc = new MemcachedClient(new InetSocketAddress("120.143.23.240", 12000));
			Future<Boolean> b = null;
			/*将key值,过期时间(秒)和要缓存的对象set到memcached中*/
			b = mc.set("yuanyirui", 900, "ni shi yi ge da cai niao11");
//			Object c = mc.get("yuanyirui");
//		    System.out.println(c.toString());
			if(b.get().booleanValue()==true){
				mc.shutdown();//
			}
		}
		catch(Exception ex){
			ex.printStackTrace();
		}
	}
}

3.补充知识:五种基本 memcached 命令

add:仅当缓存中不存在键时,add 命令才会向缓存中添加一个键值对。如果缓存中已经存在键,则之前的值将仍然保持相同,并且您将获得响应;

replace:仅当键已经存在时,replace 命令才会替换缓存中的键。如果缓存中不存在键,将从
memcached 服务器接受到一条 NOT_STORED 响应;

set:有没有的数据都添加;

get:获取--没啥说的了;

delete:用于删除 memcached 中的任何现有值。您将使用一个键调用delete,如果该键存在于缓存中,则删除该值。如果不存在,则返回一条NOT_FOUND 消息;

小结:上面的中文解释就很清晰了。使用add可以避免恶意攻击。

问题:这就是秒杀的设计方式么 :

4.使用注意点: 

Memcached的Key,要杜绝使用空格,且长度控制在250个字符。

Memcached的Value,要控制体积,必须小于1MB,必要时进行使用压缩。

失效时间,0为永久有效,最大值不得超过30天(2592000s),否则重新计算可能缓存只有1秒

Memcached仅支持LRU算法,完全适用你的需要。

尽量不要将List这种重体积对象扔到Memcached中,传输、存储都会产生瓶颈。

使用一致性哈希算法实现,提高多个Memcacehd Server利用率。

5.memcached基础知识:

5.1 默认端口:11211

telnet localhost 11211

5.2 启动命令:

memcached -d -p 12000 -u nobody -c 1024 -m64

-p 监听的端口

-l 连接的IP地址, 默认是本机

-d start 启动memcached服务

-d restart 重起memcached服务

-d stop|shutdown 关闭正在运行的memcached服务

-d install 安装memcached服务

-d uninstall 卸载memcached服务

-u 以的身份运行 (仅在以root运行的时候有效)

-m 最大内存使用,单位MB。默认64MB

-M 内存耗尽时返回错误,而不是删除项

-c 最大同时连接数,默认是1024

-f 块大小增长因子,默认是1.25

-n 最小分配空间,key+value+flags默认是48

-h 显示帮助

5.3 查看:

ps -ef|grep memcached

5.4 关掉memcached

kill -9 `cat /var/run/memcached.pid`

时间: 2024-10-12 17:45:04

memcached Java调用,注意点和基础知识的相关文章

总结了零基础学习Java编程语言的几个基础知识要点

很多Java编程初学者在刚接触Java语言程序的时候,不知道该学习掌握哪些必要的基础知识.本文总结了零基础学习Java编程语言的几个基础知识要点. 1先了解什么是Java的四个方面   初学者先弄清这些Java的基本概念也是必不可少的,死记硬背肯定是不行的,重在理解,理解它们之间的区别与联系,分别有哪些应用.想想这些代码中用到了哪些知识点.不要一味地照着书本敲代码.而不去理解. 1.Java编程语言,即语法. 2.Java文件格式,即各种文件夹.文件的后缀. 3.Java虚拟机(JVM),即处理

Java网络编程一:基础知识详解

网络基础知识 1.OSI分层模型和TCP/IP分层模型的对应关系 这里对于7层模型不展开来讲,只选择跟这次系列主题相关的知识点介绍. 2.七层模型与协议的对应关系 网络层   ------------     IP(网络之间的互联协议) 传输层   ------------     TCP(传输控制协议).UDP(用户数据报协议) 应用层   ------------     Telnet(Internet远程登录服务的标准协议和主要方式).FTP(文本传输协议).HTTP(超文本传送协议) 3

java学习篇之---css基础知识(一)

css基础知识(一) 1.css样式: 加载css样式有以下四种: 1).外部样式 2).内部样式 3).行内样式 4).导入样式 <link href="layout.css" rel="stylesheet" type="text/css" /> 这种形式是把css单独写到一个css文件内,然后在源代码中以link方式链接.它的好处是不但本页可以调用,其它页面也可以调用,是最常用的一种形式. <style> h2 {

Java IO(1)基础知识——字节与字符

正所谓怕什么来什么,这是知名的“墨菲定律”.Java基础涵盖各个方面,敢说Java基础扎实的人不是刚毕业的学生,就是工作N年的程序员.工作N年的程序员甚至也不敢人人都说Java基础扎实,甚至精通,往往只是“无他唯熟尔”——熟手而已. IO这块我确实怕,它不难,只有两个方面:输入/输出.但你说它用得多不多,我相信没有你写的并发多,并发往往是处处可见,写着写着就熟了,而IO却往往只是某个模块会涉及,所以也就并不是每个程序员在开发维护自己的模块时都会用到有关IO的API,而碰到的时候常常陷入窘迫,不知

2.1号Java复习题目——Java中的字符串(基础知识整理)

Java中的字符串基础知识 作为程序开发当中,使用最频繁的类型之一,字符串有着与基础类型相同的地位,甚至在 JVM(Java 虚拟机)编译的时候会对字符串做特殊的处理,比如拼加操作可能会被 JVM 直接合成为一个最终的字符串,从而到达高效运行的目的. 1 String 特性 String 是标准的不可变类(immutable),对它的任何改动,其实就是创建了一个新对象,再把引用指向该对象: String 对象赋值之后就会在常量池中缓存,如果下次创建会判定常量池是否已经有缓存对象,如果有的话直接返

Java之JSP和Servlet基础知识。

JSP基础 JSP起源 JSP,Java Server Pager的简称.由SUN倡导并联合其它公司创建. JSP是一门脚本语言 JSP可以嵌入到HTML中 JSP拥有Java语言的所有特性 面向对象.健壮.多线程.安全.可移植.高性能 JSP运行于JSP容器中 Tomcat.Jetty等. JSP会被转换成Servlet JSP->Servlet->Class文件. Mac下常用shell命令: pwd 打印当前目录 ls 列出当前目录下的所有文件目录 cd 更改目录 .代表当前工作目录 .

【Java】JavaIO(一)、基础知识

一.常用概念介绍 Java的IO,实现输入输出的基础,可以方便的实现数据的输入输出 二.流的分类 1. 按照流向来分: a). 输入流:向应用程序输 b). 输出流:从应用程序中输出 输入输出流是站在程序的角度来说的,只要是向程序中输入就是输入流,从程序中输出数据就是输出流. 2. 按照流的数据单元来分: a). 字节流:数据的传输单元为一个字节,8位 b). 字符流:数据的传输单元为一个字符,16位 3. 按照流的角色分类 a). 节点流:向一个特定设备读写的流,流链接的是两个实际的数据源.

别样JAVA学习(一)基础知识

之前Python进行机器学习发现当数据量越来越大时,单纯的python处理已难以满足, 需要用到hadoop对数据的并行处理,而hadoop用JAVA编写,因此我开始了JAVA的学习. 以下是学习笔记 共有9章,章节大体思路是:为什么--->是什么--->如何做. 关于why? 简而言之对数据的有效处理. 关于what? 那么欢迎来到爬虫的世界. 一.基础常识 1.软件开发 a:什么是软件? 软件:一系列按照特定顺序组织的计算机数据和指令的集合. 常见软件:系统软件:如DOS,windows,

Java中实现异常处理的基础知识

异常 (Exception):发生于程序执行期间,表明出现了一个非法的运行状况.许多JDK中的方法在检测到非法情况时,都会抛出一个异常对象. 例如:数组越界和被0除. 源代码示例: package yanzheng; //关于异常  2015.11.11 import javax.swing.*; public class AboutException { public static void main(String[] args) { int i=1, j=0, k; //   k=i/j;