- 浏览: 285599 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
梦醒无尘:
异步处理框架已经用到项目上,感谢你利用休息时间创造出一款舒服的 ...
asyn4j 1.2 发布 -
xiaokang1582830:
有一点没有考虑到的就是是否可以提供目前已经在调用的calss和 ...
asyn4j -- 异步方法调用框架 -
snowolf:
记得曾经实现过iBatis+EhCache,实现了一个iBat ...
让ibatis 支持 memcached -
bsspirit:
很好,很好!!
java annotation 实例 -
ij仔:
...
Statement,PreparedStatement区别
前段时间学习了mina框架.就确定写一个小实例玩一下.
看到不少开源第三方的memcached连接工具(xmemcached),都采用NIO方式.
于是就有了一个想法用mina作为底层NIO框架与memcached连接.
希望能给学习Mina的新人帮助.
能力有限项目还没有很好完善.不过基本的相关操作已实现.
如果大家有兴趣和我一起完善这个项目,请站内信联络.
源码(svn):
http://asksite.googlecode.com/svn/trunk/minamemcahed
测试类及相关API调用
spring 定义服务
相关jar依赖 mina 和 mina依赖的jar 包
jar包在附件中
好像听说过比mina的性能还要好,不知稳定性怎么样.
我记得都是同一个作者。
是一个韩国人,trustin Lee。我最近在看netty的源代码,觉得netty的建模比较好
好像听说过比mina的性能还要好,不知稳定性怎么样.
我记得都是同一个作者。
都是lee写的,不过netty3性能确实比mina好
plurk的comet server就是用netty3实现的
Using Netty we have comet running on 100.000+ open connections - this uses some GB of memory and 20% of CPU on a quad core server. I.e. we have solved the C10k * 10 problem using non-blocking technology and some pretty impressive libraries (namely Java NIO and Netty).
A big kudos goes to Trustin Lee for his amazing work on Netty!
好像听说过比mina的性能还要好,不知稳定性怎么样.
我记得都是同一个作者。
好像听说过比mina的性能还要好,不知稳定性怎么样.
希望对你有用,多提建议.
看到不少开源第三方的memcached连接工具(xmemcached),都采用NIO方式.
于是就有了一个想法用mina作为底层NIO框架与memcached连接.
希望能给学习Mina的新人帮助.
能力有限项目还没有很好完善.不过基本的相关操作已实现.
如果大家有兴趣和我一起完善这个项目,请站内信联络.
源码(svn):
http://asksite.googlecode.com/svn/trunk/minamemcahed
测试类及相关API调用
public class CacheTest { static MinaConnect mc = null; static LinkedList<CacheFilter> filterList = new LinkedList<CacheFilter>(); @BeforeClass public static void init() { List<MemCachedAddress> addreeList = new ArrayList<MemCachedAddress>(); //memcached server ip address and port InetSocketAddress address1 = new InetSocketAddress("127.0.0.1", 11211); InetSocketAddress address2 = new InetSocketAddress("192.168.1.105",11212); //add memcached server addreeList.add(new MemCachedAddress(address1, 3)); addreeList.add(new MemCachedAddress(address2, 7)); mc = new MinaConnect(addreeList); //start connect mc.connect(); } @AfterClass public static void destory() { mc.shutDown(); } @Test @Ignore public void testSet() throws Exception { User user = new User(); user.setId(1); user.setName("tina"); boolean result = mc.set("name", 0, user); System.out.println(result); } @Test public void testGet() throws Exception { User user = (User) mc.get("name"); System.out.println(user.getName()); /* * user = (User) mc.get("user2"); System.out.println(user.getName()); * user = (User) mc.get("user3"); System.out.println(user.getName()); */ } @Test @Ignore public void testReplace() throws Exception { User user = new User(); user.setId(1); user.setName("replacetest"); boolean result = mc.replace("test2", 10000, user); System.out.println(result); } @Test @Ignore public void testDelete() throws Exception { boolean result = mc.delete("test2"); System.out.println(result); } @Test @Ignore public void testIncr() throws Exception { long i = mc.incr("incrtest", 2); System.out.println(i); } @Test @Ignore public void testGets() throws Exception { User[] users = new User[10]; for (int i = 0; i < users.length; i++) { users[i] = new User(); users[i].setId(i); users[i].setName("test" + i); if (i == 3) { InetSocketAddress address2 = new InetSocketAddress( "192.168.1.105", 11212); mc.removeServer(address2); } boolean result = mc.set("user" + i, 0, users[i]); System.out.println(result); } List<String> list = new ArrayList<String>(); for (int i = 0; i < 10; i++) { list.add("user" + i); } Map<String, Object> map = mc.gets(list); Iterator<String> keySet = map.keySet().iterator(); while (keySet.hasNext()) { User user = (User) map.get(keySet.next()); System.out.println(user.getName()); } } @Test @Ignore public void testSomeNoreplay() throws Exception { User pan = (User) mc.get("test"); System.out.println(pan.getName()); } }
spring 定义服务
<bean id="minaBean" class="com.memcached.spring.MinaMemcachedFactoryBean"> <property name="address"> <list> <value>127.0.0.1:11211</value> </list> </property> <property name="weights"> <list> <value>3</value> </list> </property> </bean>
相关jar依赖 mina 和 mina依赖的jar 包
jar包在附件中
- minamemcached.jar (50.5 KB)
- 下载次数: 154
评论
9 楼
yin_bp
2010-03-23
有空看看开源bbossgroups项目中基于mina协议的rpc调用框架
很实用也很简单:
1.客服端和服务端配置以下组件(基于bboss-aop框架):
<property name="rpc.test" singlable="true" class="org.frameworkset.spi.remote.RPCTest"/>
2.获取远程组件实例
单点调用
RPCTestInf testInf = (RPCTestInf)BaseSPIManager.getBeanObject("(mina::172.16.17.216:1186)/rpc.test");
多点调用
RPCTestInf testInf = (RPCTestInf)BaseSPIManager.getBeanObject("(mina::192.168.11.102:1186;192.168.11.102:12346)/rpc.test");
组播调用
RPCTestInf testInf = (RPCTestInf)BaseSPIManager.getBeanObject("(mina::all)/rpc.test");
单点调用-传递认证信息
RPCTestInf testInf = (RPCTestInf)BaseSPIManager.getBeanObject("(mina::172.16.17.216:1186)/rpc.test?user=admin&password=123456");
多点调用-传递认证信息
RPCTestInf testInf = (RPCTestInf)BaseSPIManager.getBeanObject("(mina::192.168.11.102:1186;192.168.11.102:12346)/rpc.test?user=admin&password=123456");
组播调用-传递认证信息
RPCTestInf testInf = (RPCTestInf)BaseSPIManager.getBeanObject("(mina::all)/rpc.test?user=admin&password=123456");
3.远程方法调用
Object count = testInf.getCount();
4.调用结果处理
单点调用的结果就是服务接口返回的值,无需处理。如果方法调用失败,系统将抛出具体的远程异常。
多点调用和组播调用的结果处理方法一样,以多点调用为例:
RPCTestInf testInf = (RPCTestInf)BaseSPIManager.getBeanObject("(mina::192.168.11.102:1186;192.168.11.102:12346)/rpc.test?User=admin&password=123456");
Object count = testInf.getCount();
Object count = testInf.getCount();
获取192.168.11.102:1186返回的结果:
Object count_1186 = BaseSPIManager.getRPCResult("192.168.11.102", "1186", count);如果返回值是异常,那么直接抛出该异常。
或者
Object count_1186 = BaseSPIManager.getMinaRPCResult
("192.168.11.102:1186", count);如果返回值是异常,那么直接抛出该异常。
或者
Object count_1186 =
BaseSPIManager.getRPCResult("192.168.11.102:1186", count,
org.frameworkset.remote.Target.BROADCAST_TYPE_MINA); 如果返回值是异常,那么直接抛出该异常。
获取192.168.11.102:12346返回的结果:
Object count_12346 = BaseSPIManager.getRPCResult("192.168.11.102", "12346", count); 如果返回值是异常,那么直接抛出该异常。
或者
Object count_12346 = BaseSPIManager.getMinaRPCResult
("192.168.11.102:12346", count);
或者
Object count_12346 =
BaseSPIManager.getRPCResult("192.168.11.102:12346", count,
org.frameworkset.remote.Target.BROADCAST_TYPE_MINA); 如果返回值是异常,那么直接抛出该异常。
很简单吧
详细信息参考博客文章:
http://blog.csdn.net/yin_bp/archive/2010/03/20/5398418.aspx
bbossgroups项目下载地址:
https://sourceforge.net/projects/bboss/files/
很实用也很简单:
1.客服端和服务端配置以下组件(基于bboss-aop框架):
<property name="rpc.test" singlable="true" class="org.frameworkset.spi.remote.RPCTest"/>
2.获取远程组件实例
单点调用
RPCTestInf testInf = (RPCTestInf)BaseSPIManager.getBeanObject("(mina::172.16.17.216:1186)/rpc.test");
多点调用
RPCTestInf testInf = (RPCTestInf)BaseSPIManager.getBeanObject("(mina::192.168.11.102:1186;192.168.11.102:12346)/rpc.test");
组播调用
RPCTestInf testInf = (RPCTestInf)BaseSPIManager.getBeanObject("(mina::all)/rpc.test");
单点调用-传递认证信息
RPCTestInf testInf = (RPCTestInf)BaseSPIManager.getBeanObject("(mina::172.16.17.216:1186)/rpc.test?user=admin&password=123456");
多点调用-传递认证信息
RPCTestInf testInf = (RPCTestInf)BaseSPIManager.getBeanObject("(mina::192.168.11.102:1186;192.168.11.102:12346)/rpc.test?user=admin&password=123456");
组播调用-传递认证信息
RPCTestInf testInf = (RPCTestInf)BaseSPIManager.getBeanObject("(mina::all)/rpc.test?user=admin&password=123456");
3.远程方法调用
Object count = testInf.getCount();
4.调用结果处理
单点调用的结果就是服务接口返回的值,无需处理。如果方法调用失败,系统将抛出具体的远程异常。
多点调用和组播调用的结果处理方法一样,以多点调用为例:
RPCTestInf testInf = (RPCTestInf)BaseSPIManager.getBeanObject("(mina::192.168.11.102:1186;192.168.11.102:12346)/rpc.test?User=admin&password=123456");
Object count = testInf.getCount();
Object count = testInf.getCount();
获取192.168.11.102:1186返回的结果:
Object count_1186 = BaseSPIManager.getRPCResult("192.168.11.102", "1186", count);如果返回值是异常,那么直接抛出该异常。
或者
Object count_1186 = BaseSPIManager.getMinaRPCResult
("192.168.11.102:1186", count);如果返回值是异常,那么直接抛出该异常。
或者
Object count_1186 =
BaseSPIManager.getRPCResult("192.168.11.102:1186", count,
org.frameworkset.remote.Target.BROADCAST_TYPE_MINA); 如果返回值是异常,那么直接抛出该异常。
获取192.168.11.102:12346返回的结果:
Object count_12346 = BaseSPIManager.getRPCResult("192.168.11.102", "12346", count); 如果返回值是异常,那么直接抛出该异常。
或者
Object count_12346 = BaseSPIManager.getMinaRPCResult
("192.168.11.102:12346", count);
或者
Object count_12346 =
BaseSPIManager.getRPCResult("192.168.11.102:12346", count,
org.frameworkset.remote.Target.BROADCAST_TYPE_MINA); 如果返回值是异常,那么直接抛出该异常。
很简单吧
详细信息参考博客文章:
http://blog.csdn.net/yin_bp/archive/2010/03/20/5398418.aspx
bbossgroups项目下载地址:
https://sourceforge.net/projects/bboss/files/
8 楼
pan_java
2010-02-28
有空学习一下netty.
7 楼
nicky_hk
2010-02-28
nishizhutou 写道
pan_java 写道
lvgang 写道
jboss 的 netty 也不错
好像听说过比mina的性能还要好,不知稳定性怎么样.
我记得都是同一个作者。
是一个韩国人,trustin Lee。我最近在看netty的源代码,觉得netty的建模比较好
6 楼
tapestry1122
2010-02-26
nishizhutou 写道
pan_java 写道
lvgang 写道
jboss 的 netty 也不错
好像听说过比mina的性能还要好,不知稳定性怎么样.
我记得都是同一个作者。
都是lee写的,不过netty3性能确实比mina好
plurk的comet server就是用netty3实现的
引用
Using Netty we have comet running on 100.000+ open connections - this uses some GB of memory and 20% of CPU on a quad core server. I.e. we have solved the C10k * 10 problem using non-blocking technology and some pretty impressive libraries (namely Java NIO and Netty).
A big kudos goes to Trustin Lee for his amazing work on Netty!
5 楼
nishizhutou
2010-02-25
pan_java 写道
lvgang 写道
jboss 的 netty 也不错
好像听说过比mina的性能还要好,不知稳定性怎么样.
我记得都是同一个作者。
4 楼
pan_java
2010-02-25
lvgang 写道
jboss 的 netty 也不错
好像听说过比mina的性能还要好,不知稳定性怎么样.
3 楼
lvgang
2010-02-25
jboss 的 netty 也不错
2 楼
pan_java
2010-02-25
memcached 写道
构思不错,正学习Mina有用.
希望对你有用,多提建议.
1 楼
memcached
2010-02-25
构思不错,正学习Mina有用.
发表评论
-
sql 解析 工具(sql parse)
2010-11-25 12:51 5945项目地址: http://jsqlparser.source ... -
asyn4j 1.2 发布
2010-10-08 19:16 18971.2更新 1.设置关闭服务延时 2.设置异步工作 ... -
asyn4j -- 异步方法调用框架
2010-08-24 19:41 3879asyn4j 是一个java异步方法调用框架,基于消费者与生产 ... -
代码备忘录
2010-08-06 10:47 1305List 迭代 private final List& ... -
java分布式学习笔记
2010-07-19 22:05 39011.分布式JAVA应用 基于TC ... -
写正则表达式--工具分享
2010-04-07 11:06 1222这是一个写和测正则表达式很好的工具,不知大家有没有用过! 里面 ... -
JMF 通过 Applet 获取数据
2009-12-22 15:15 1670import java.awt.BorderLayou ... -
yanf4j 服务端读取操作 源码分析
2009-12-19 15:13 1434最近学习 NIO,学习了XMemcached 和 它的NIO框 ... -
Statement,PreparedStatement区别
2009-12-17 16:04 2258以Oracle为例吧 Statement ... -
java 排序 整合
2009-12-17 14:59 1237package net.rubyeye.xmemcached. ... -
JVM 结束挂钩程序
2009-12-16 15:08 1199public class HookTest { /** ... -
java优化编程--读书笔记
2009-12-09 14:58 18571.JVM管理两种类型的内存:堆内存(heap),栈内存(st ... -
Java的内存泄漏
2009-11-30 11:54 992Java的一个重要优点就是通过垃圾收集器(Garbage Co ... -
TCP/IP 无阻塞 Socket
2009-11-25 17:25 1958package com.io; import java. ... -
java socket 多线程处理
2009-11-25 16:16 2299public class MallShopSoketServe ... -
写ZIP文件
2009-11-24 09:42 996public class ZipTest { /** ... -
XML DOM API
2009-11-23 11:49 1511javax.xml.parse.DocumentBuilder ... -
自定义类加载器
2009-11-23 09:34 1132public class CryptoClassLoader ... -
ibatis 缓存 key 过长,大家有什么看法
2009-11-21 10:50 1068实体类 public class Account impl ... -
ibatis 缓存模块 key实现类
2009-11-20 16:15 1216//更新CacheKey hashcode ,每个参数 ...
相关推荐
3. **MINA客户端实现**:阐述如何使用MINA建立与Memcached服务器的连接,创建自定义的协议解码器和编码器来处理通信过程。 4. **数据序列化与反序列化**:在Memcached中存储的对象通常需要进行序列化,讨论如何选择...
本压缩包中的"有用的jar包"涉及了几个关键领域的库:MySQL数据库连接、Memcached缓存处理、Apache MINA网络通信框架以及JSON数据序列化。下面将详细解释这些jar包所涵盖的知识点。 1. MySQL JDBC驱动: MySQL JDBC...
BoneCP 是一个高性能的开源java数据库连接池实现库。它的设计初衷就是为了提高数据库连接池的性能,根据某些测试数据发现,BoneCP是最快的连接池。BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加...
BoneCP 是一个高性能的开源java数据库连接池实现库。它的设计初衷就是为了提高数据库连接池的性能,根据某些测试数据发现,BoneCP是最快的连接池。BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加...
Tokyo Tyrant则作为Tokyo Cabinet的网络接口,支持Memcached传输协议,负责网络连接和协议解析,与Tokyo Cabinet配合实现网络存储功能。 ICE(Internet Communications Engine)是一个跨语言的网络通信框架,提供了...
Java实现的FTP连接与数据浏览程序 1个目标文件 摘要:Java源码,网络相关,FTP Java实现的FTP连接与数据浏览程序,实现实例化可操作的窗口。 部分源代码摘录: ftpClient = new FtpClient(); //实例化FtpClient对象 ...
BoneCP 是一个高性能的开源java数据库连接池实现库。它的设计初衷就是为了提高数据库连接池的性能,根据某些测试数据发现,BoneCP是最快的连接池。BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加...
BoneCP 是一个高性能的开源java数据库连接池实现库。它的设计初衷就是为了提高数据库连接池的性能,根据某些测试数据发现,BoneCP是最快的连接池。BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加...
BoneCP 是一个高性能的开源java数据库连接池实现库。它的设计初衷就是为了提高数据库连接池的性能,根据某些测试数据发现,BoneCP是最快的连接池。BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加...
BoneCP 是一个高性能的开源java数据库连接池实现库。它的设计初衷就是为了提高数据库连接池的性能,根据某些测试数据发现,BoneCP是最快的连接池。BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加...
BoneCP 是一个高性能的开源java数据库连接池实现库。它的设计初衷就是为了提高数据库连接池的性能,根据某些测试数据发现,BoneCP是最快的连接池。BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加...
BoneCP 是一个高性能的开源java数据库连接池实现库。它的设计初衷就是为了提高数据库连接池的性能,根据某些测试数据发现,BoneCP是最快的连接池。BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加...
BoneCP 是一个高性能的开源java数据库连接池实现库。它的设计初衷就是为了提高数据库连接池的性能,根据某些测试数据发现,BoneCP是最快的连接池。BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加...
BoneCP 是一个高性能的开源java数据库连接池实现库。它的设计初衷就是为了提高数据库连接池的性能,根据某些测试数据发现,BoneCP是最快的连接池。BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加...
BoneCP 是一个高性能的开源java数据库连接池实现库。它的设计初衷就是为了提高数据库连接池的性能,根据某些测试数据发现,BoneCP是最快的连接池。BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加...
BoneCP 是一个高性能的开源java数据库连接池实现库。它的设计初衷就是为了提高数据库连接池的性能,根据某些测试数据发现,BoneCP是最快的连接池。BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加...
BoneCP 是一个高性能的开源java数据库连接池实现库。它的设计初衷就是为了提高数据库连接池的性能,根据某些测试数据发现,BoneCP是最快的连接池。BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加...
基于Zookeeper的临时节点特性,当服务提供者断开连接时,临时节点消失,从而实现服务剔除。 7. **版本管理和服务调用链问题** 通过多版本开发避免影响旧版本服务;使用分布式服务追踪工具如Zipkin来解决调用链过...