memcached的配置和spymemcached的使用笔记
来源:互联网 发布:mac分段压缩文件 编辑:程序博客网 时间:2024/06/05 22:09
软件的版本:memcached是1.4.25,spymemcached是2.8.4,jdk1.6.0_45(64位)。
- 1.安装memcached
- 2.使用spymemcached测试
- 3.查阅memcached运行状态
1.安装memcached
下载memcached-1.4.25.tar.gz放在/opt目录下面,从解压开始:
# 解压文件[root@localhost opt]# tar -zxvf memcached-1.4.251.tar.gzmemcached-1.4.25/memcached-1.4.25/aclocal.m4memcached-1.4.25/assoc.c# (中间省略)[root@localhost opt]# cd memcached-1.4.25/# 进行配置,检查当前的环境是否满足要安装软件的依赖关系[root@localhost memcached-1.4.25]# ./configurechecking build system type… x86_64-unknown-linux-gnuchecking host system type… x86_64-unknown-linux-gnuchecking for a BSD-compatible install… /usr/bin/install -cchecking whether build environment is sane… yeschecking for a thread-safe mkdir -p… /bin/mkdir -pchecking for gawk… gawkchecking whether make sets $(MAKE)… yeschecking whether make supports nested variables… yeschecking for gcc… nochecking for cc… nochecking for cl.exe… noconfigure: error: in `/opt/memcached-1.4.25′:configure: error: no acceptable C compiler found in $PATHSee `config.log’ for more details# 提示说缺少gcc,马上装[root@localhost memcached-1.4.25]#yum -y install gcc# 下面是按照官网的步骤执行[root@localhost memcached-1.4.25]# ./configure[root@localhost memcached-1.4.25]# make[root@localhost memcached-1.4.25]# make test[root@localhost memcached-1.4.25]# sudo make install# 启动memcached# -m:设置内存大小(默认是m;-l:设置监听Ip地址;-p:监听端口;-u:以root用户执行[root@localhost ~]# memcached -m 64 -l 192.168.1.100 -p 11211-u root
2.使用spymemcached测试
public class SpyMemcachedServer { private String ip; private int port; public void setIp(String ip) { this.ip = ip; } public String getIp() { return ip; } public void setPort(int port) { if (port < 0 || port > 65535) { throw new IllegalArgumentException("Port number must be between 0 to 65535"); } this.port = port; } public int getPort() { return port; } public String toString() { return getIp() + ":" + getPort(); }}
import java.util.concurrent.TimeUnit;public interface SpyMemcachedConstants { public static int DEFAULT_TIMEOUT = 5; public static TimeUnit DEFAULT_TIMEUNIT = TimeUnit.SECONDS;}
import java.io.IOException;import java.net.SocketAddress;import java.util.ArrayList;import java.util.Iterator;import java.util.List;import java.util.Map;import java.util.Set;import junit.framework.TestCase;import net.spy.memcached.ConnectionObserver;import net.spy.memcached.transcoders.Transcoder;public class SpyMemcachedTest extends TestCase { private SpyMemcachedManager manager; protected void setUp() throws Exception { super.setUp(); String[][] servs = new String[][] { { "192.168.1.100", "11211" }, // {"localhost", "11212"} }; List<SpyMemcachedServer> servers = new ArrayList<SpyMemcachedServer>(); for (int i = 0; i < servs.length; i++) { SpyMemcachedServer server = new SpyMemcachedServer(); server.setIp(servs[i][0]); server.setPort(Integer.parseInt(servs[i][1])); servers.add(server); } manager = new SpyMemcachedManager(servers); manager.connect(); addObserver(); } protected void tearDown() throws Exception { super.tearDown(); manager.disConnect(); } public void testSet() { System.out.println("====TestSet===="); for (int i = 0; i < 10; i++) { String key = "key" + i; String value = "value" + i; manager.set(key, value, 20); } } public void testGet() { System.out.println("====TestGet===="); for (int i = 0; i < 10; i++) { String key = "key" + i; Object value = manager.get(key); if (value != null) { System.out.println("From memcached"); System.out.println("key=" + key + ";value=" + value); } else { System.out.println("Not found"); System.out.println("key=" + key + ";value=" + value); } } } public void testAdd() { System.out.println("====TestAdd===="); boolean flag = manager.add("key1", "value1-added", 20); // exist assertEquals(false, flag); flag = manager.add("key100", "value100", 20); // don't exist assertEquals(true, flag); testGet(); } public void testReplace() { System.out.println("====TestReplace===="); boolean flag = manager.replace("key2", "value2-replaced", 20); assertEquals(true, flag); flag = manager.replace("key1000", "value1000", 20); assertEquals(false, flag); testGet(); } public void testDelete() { System.out.println("====TestDelete===="); boolean flag = manager.delete("key3"); assertEquals(true, flag); flag = manager.delete("key1000"); assertEquals(false, flag); testGet(); } public void testAsyncGet() { System.out.println("====TestAsyncGet===="); Object value = manager.asyncGet("key4"); if (value != null) { assertEquals("value4", (String) value); } System.out.println("value=" + value); } public void testGetMulti() { System.out.println("====TestGetMulti===="); List<String> keys = new ArrayList<String>(); String[] strKeys = new String[5]; for (int i = 0; i < 5; i++) { keys.add("key" + i); strKeys[i] = "key" + i; } Map<String, Object> cache = manager.getMulti(keys); printMap(cache); cache = manager.getMulti(keys); printMap(cache); } public void testAsyncGetMulti() { System.out.println("====TestAsyncGetMulti===="); List<String> keys = new ArrayList<String>(); String[] strKeys = new String[5]; for (int i = 0; i < 5; i++) { keys.add("key" + i); strKeys[i] = "key" + i; } Map<String, Object> cache = manager.asyncGetMulti(keys); printMap(cache); cache = manager.asyncGetMulti(keys); printMap(cache); } public void testIncrAndDecr() { System.out.println("====TestIncrAndDecr===="); long l = -1; l = manager.increment("incr", 2, 100, 60); assertEquals(100, l); l = manager.increment("incr", 4); assertEquals(104, l); l = manager.decrement("decr", 4, 100, 60); assertEquals(100, l); l = manager.decrement("decr", 3); assertEquals(97, l); System.out.println("incr=" + manager.get("incr").toString()); System.out.println("decr=" + manager.get("decr").toString()); } public void testAsyncIncrAndDecr() { System.out.println("====TestAsyncIncrAndDecr===="); long l = -1; l = manager.asyncIncrement("incr", 2); assertEquals(106, l); l = manager.asyncDecrement("decr", 4); assertEquals(93, l); System.out.println("aincr=" + manager.get("incr").toString()); System.out.println("adecr=" + manager.get("decr").toString()); } public void testPrintStat() throws IOException { System.out.println("====TestPrintStat===="); manager.printStats(); } private void addObserver() { // System.out.println("====AddObserver===="); ConnectionObserver obs = new ConnectionObserver() { public void connectionEstablished(SocketAddress sa, int reconnectCount) { System.out.println("Established " + sa.toString()); } public void connectionLost(SocketAddress sa) { System.out.println("Lost " + sa.toString()); } }; manager.addObserver(obs); } public void testGetTranscoder() { System.out.println("====TestGetTranscoder===="); Transcoder tran = manager.getTranscoder(); System.out.println(tran.getClass().toString()); } private void printMap(Map map) { StringBuffer temp = new StringBuffer(); Set set = map.keySet(); Iterator iter = set.iterator(); while (iter.hasNext()) { String key = (String) iter.next(); Object value = map.get(key); temp.append("key=" + key + ";value=" + value + "\r\n"); } System.out.println(temp.toString()); }}
#测试前,先停止防火墙[root@localhost ~]# service iptables stop
# 执行测试例子(截取部分的信息)2016-02-05 20:03:42.477 INFO net.spy.memcached.MemcachedConnection: Added {QA sa=/192.168.1.100:11211, #Rops=0, #Wops=0, #iq=0, topRop=null, topWop=null, toWrite=0, interested=0} to connect queue====TestSet====2016-02-05 20:03:42.481 INFO net.spy.memcached.MemcachedConnection: Connection state changed for sun.nio.ch.SelectionKeyImpl@44bd928aEstablished /192.168.1.100:112112016-02-05 20:03:42.498 INFO net.spy.memcached.MemcachedConnection: Shut down memcached client2016-02-05 20:03:42.504 INFO net.spy.memcached.MemcachedConnection: Added {QA sa=/192.168.1.100:11211, #Rops=0, #Wops=0, #iq=0, topRop=null, topWop=null, toWrite=0, interested=0} to connect queue====TestGet====Established /192.168.1.100:112112016-02-05 20:03:42.507 INFO net.spy.memcached.MemcachedConnection: Connection state changed for sun.nio.ch.SelectionKeyImpl@1d5a0305From memcachedkey=key0;value=value0From memcachedkey=key1;value=value1From memcachedkey=key2;value=value2From memcachedkey=key3;value=value3From memcachedkey=key4;value=value4From memcached# (省略)
3.查阅memcached运行状态
#因为查阅memcached的运行状态需要用到telnet,而我没有安装telnet,所以先安装telnet-server端和telnet-client端。[root@localhost ~]# yum install telnet-server[root@localhost ~]# yum install telnet# 查阅memcached运行状态:[root@localhost ~]# telnet 192.168.1.100 11211Trying 192.168.1.100…Connected to 192.168.1.100.Escape character is ‘^]’.statsSTAT pid 4828 // memcached服务器的进程IdSTAT uptime 543 // 服务器已经运行的秒数STAT time 1454703156 // 服务器当前的unix时间戳STAT version 1.4.25 // //memcached版本STAT libevent 1.4.13-stable // libevent版本STAT pointer_size 64 // 当前操作系统的指针大小(32位系统一般是32bit,64就是64位操作系统)STAT rusage_user 0.004999 // 进程的累计用户时间STAT rusage_system 0.083987 // 进程的累计系统时间STAT curr_connections 5 // 服务器当前存储的items数量STAT total_connections 18 // 从服务器启动以后存储的items总数量STAT connection_structures 6 // 服务器分配的连接构造数STAT reserved_fds 20STAT cmd_get 65 // get命令(获取)总请求次数STAT cmd_set 16 // set命令(保存)总请求次数STAT cmd_flush 0 // flush命令请求次数STAT cmd_touch 0 // touch命令请求次数STAT get_hits 60 // 总命中次数STAT get_misses 5 // 总未命中次数STAT delete_misses 1 // delete命令未命中次数STAT delete_hits 1 // delete命令命中次数STAT incr_misses 1 // incr命令未命中次数STAT incr_hits 2 // incr命令命中次数STAT decr_misses 1 // decr命令未命中次数STAT decr_hits 2 // decr命令命中次数STAT cas_misses 0 // cas命令未命中次数STAT cas_hits 0 // cas命令命中次数STAT cas_badval 0 // 使用擦拭次数STAT touch_hits 0 // touch命令未命中次数STAT touch_misses 0 // touch命令命中次数STAT auth_cmds 0 // 认证命令处理的次数STAT auth_errors 0 // 认证失败数目STAT bytes_read 1120 // 总读取字节数(请求字节数)STAT bytes_written 3100 // 总发送字节数(结果字节数)STAT limit_maxbytes 67108864 // 分配给memcached的内存大小(字节b,启动memcached服务器配置64m,换算:67108864 b = 65536 kb = 64 m)STAT accepting_conns 1 // 服务器是否达到过最大连接(0/1)STAT listen_disabled_num 0 // 失效的监听数STAT time_in_listen_disabled_us 0STAT threads 4 // 当前线程数STAT conn_yields 0 // 连接操作主动放弃数目STAT hash_power_level 16STAT hash_bytes 524288STAT hash_is_expanding 0STAT malloc_fails 0STAT bytes 908 // 当前存储占用的字节数STAT curr_items 12 // 当前存储的数据总数STAT total_items 14 // 启动以来存储的数据总数STAT expired_unfetched 0STAT evicted_unfetched 0STAT evictions 0 // 为获取空闲内存而删除的items数(分配给memcache的空间用满后需要删除旧的items来得到空间分配给新的items)STAT reclaimed 0 // 已过期的数据条目来存储新数据的数目STAT crawler_reclaimed 0STAT crawler_items_checked 0STAT lrutail_reflocked 0END
–完–
Demo下载
参考:
官方教程:http://www.memcached.org/downloads
memcached 的配置及 spymemcached 客户端简单使用:http://www.cnblogs.com/atio/p/3198230.html
spymemcached源码深入分析:http://my.oschina.net/astute/blog/93492
JAVA MemCache 史无前例的详细讲解!看完包精通MEMCACHE!:http://blog.csdn.net/hjm4702192/article/details/7894080
centos使用yum安装gcc:http://www.oschina.net/code/snippet_54100_10351
memcached之java客户端:spymemcached使用:http://blog.csdn.net/fhd001/article/details/6764038
linux查看memcached状态:http://www.2cto.com/os/201303/193264.html
linux查看memcached状态:http://blog.sina.com.cn/s/blog_6a1fb8420102uz90.html
linux下如何关闭防火墙?如何查看防火墙当前的状态:http://blog.csdn.net/bslzl/article/details/7937899
linux下查看进程和端口:http://blog.chinaunix.net/uid-25510439-id-2981118.html
memcached client – spymemcached使用:http://blog.csdn.net/gtuu0123/article/details/4849905
window的memcached的下载地址: https://commaster.net/content/installing-memcached-windows
- memcached的配置和spymemcached的使用笔记
- memcached的安装以及SpyMemcached的使用
- memcached client -- spymemcached使用
- memcached client -- spymemcached使用
- spymemcached和spring的整合
- spymemcached和spring的整合
- spring整合spymemcached实现Memcached的各种操作
- memcached-Spymemcached
- spymemcached和xmemcached的性能对比
- spymemcached和xmemcached的性能对比
- memcached之java客户端:spymemcached使用
- memcached之java客户端:spymemcached使用
- memcached之java客户端:spymemcached使用
- MemCached的使用笔记
- 使用spymemcached spring整合的时候遇到的一个配置问题
- memcached之在maven项目中使用spymemcached
- memcached之在maven项目中使用spymemcached
- memcached的安装和使用
- LeetCode60. Permutation Sequence
- sha1 加密
- Mysql数据库连接脚本
- 解决Windows下python中文乱码问题
- 头文件与库文件的区别与联系
- memcached的配置和spymemcached的使用笔记
- [Algorithm]Maze Prim算法与A*寻路算法(下)
- LeetCode47. Permutations II
- Project文档编辑和权限分配
- POJ3083 DFS&BFS
- nyoj779兰州烧饼
- ADO.NET之command更新数据(视图版)
- hdu 4509
- POJ 3069