您的位置:首页 > 数据库 > Memcache

Memcached 入门-介绍-使用-优化

2013-09-18 10:42 387 查看
http://leiwuluan.iteye.com/blog/1173402

SockIOPool

Java_memcached-release

一、了解和使用使用安装memcached

在这一块已经有车了,就不再造了。

一个日本君写的: 长野雅广 memcached- 全面剖析.pdf

heiyeluren( 黑夜路人) Memcached- 原理和使用详解.pdf

下面截图:

























二、java memcached 客启端的调用

2.1 下载客户端jar 包 java_memcached-release_X.x.jar

https://github.com/gwhalin/Memcached-Java-Client 可下载最新

三、简单Demo

建工程、拷jar 包、再拷下面代码。



package com.ea.online.memcache;

import java.util.Date;

import com.danga.MemCached.MemCachedClient;

import com.danga.MemCached.SockIOPool;

public class SimpleMemCachedClient {

protected static MemCachedClient mcc = new MemCachedClient();

protected static SockIOPool sUpool = null;

static {

String[] servers = { "localhost:11211" };

Integer[] weights = { 3, 3, 2 };

sUpool = SockIOPool.getInstance();

sUpool.setServers(servers);

sUpool.setWeights(weights);

sUpool.setMaintSleep(30);

sUpool.setNagle(false);

sUpool.setSocketTO(3000);

sUpool.setSocketConnectTO(0);

sUpool.initialize();

}

public static void main(String[] args) {

mcc.set("testKey", "This is a test String",

new Date(new Date().getTime() + 10000));// 过期时间为10秒

String bar = mcc.get("testKey").toString();

System.out.println("testKey-->" + bar);

while (true) {

try {

Thread.sleep(1000);

} catch (InterruptedException e) {

e.printStackTrace();

}

System.out.println(mcc.get("testKey"));

}

}

}



Demo 成功后就讲 下面两个类的一些设置参数:SockIOPool 、MemCachedClient

四、SockIOPool 是socket 连接池类

setServers(String[] servers) :设置服务器信息数组;

setWeights(String[] weights) :设置服务器权重数组;

setInitConn(int count) :设置初始连接数;

setMinConn(int minConn) :设置最小连接数;

setMaxConn(int maxConn) :设置最大连接数;

setMaxIdle(long arg0) :设置最大处理时间;

setMaintSleep(long arg0) :主线程的睡眠时间;

initialize() :初始化连接池。

五、MemCachedClient 类及其常用方法

add(String key, Object value) :添加一个键值对到缓存中;

add(String key, Object value,Date expires) :添加一个键值对到缓存中,并设置其超时时间;

set(String key, Object value) :在缓存中设置一个键的值;

set(String key, Object value, Date expires) :在缓存中设置一个键的值,并设置其超时时间;

get(String key) :获得某个键的值。

incr(String key) :为某个键上的值执行+1 操作;

decr(String key) :为某个键上的值执行-1 操作;

replace(String key, String value) :将某个键的值替换成新的值;

replace(String key, String value, Date expires) :将某个键的值替换成新的值,并设置其超时时间。

六、Memcached 优化

可以参考: hyj_dx http://hyj-dx.iteye.com/blog/305161







1、客户端在与 memcached 服务建立连接之后,进行存取对象的操作,每个被存取的对象都有一个唯一的标识符 key,存取操作均通过这个 key 进行,保存到 memcached 中的对象实际上是放置内存中的,并不是保存在 cache 文件中的,这也是为什么 memcached 能够如此高效快速的原因。注意,这些对象并不是持久的,服务停止之后,里边的数据就会丢失。

2、当存入cached的数据超过了cached的容量后会将最长时间没调用的对象挤出,这正好应征了cached的特征。

3、利用memcached常用的做法:在每取得一次cached对象后,重新设置这个对象的cache时间,这样能够使得经常被调用的对象可以长期滞留在缓存中,使得效率增倍。



memcached 技术配置参数研究

failover表示对于服务器出现问题时的自动修复。

initConn初始的时候连接数,

minConn表示最小闲置连接数,

maxConn最大连接数,

maintSleep表示是否需要延时结束

nagle是TCP对于socket创建的算法,

socketTO是socket连接超时时间,

aliveCheck表示心跳检查,确定服务器的状态。

Servers是memcached服务端开的地址和ip列表字符串,

weights是上面服务器的权重,必须数量一致,否则权重无效

可从以下几方面考虑优化

1. 重新设置配置参数。

2. 尽量使用小容量的数据内容.

3. 增加memcached提高服务获取的内存总量、提高命中率。

4. 可以采用多个memcache服务进行侦听,分开处理,针对服务提供的频繁度划分服务内存

5. 根据服务器的性能不同设置权重 weights

6. 对需要使用memcache服务的机器ip,服务端做访问限制。

避免memcached里的数据不会被别有心意的人再利用,或责保证服务器的内存不被漫天遍地的垃圾数据所堆积,造成命中极低

7. 优化memcached客户端的代码。



、、、、、、、、、、



七、小技巧

h 显示帮助

-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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: