当前位置:  编程技术>移动开发
本页文章导读:
    ▪Java开发中的Memcache原理及兑现(七)Memcached客户端程序 【转】        Java开发中的Memcache原理及实现(七)Memcached客户端程序 【转】 Java开发中的Memcache原理及实现(七)Memcached客户端程序 http://jiaxiaoyuan1204.blog.163.com/blog/static/65553152010520112614157/  七、     .........
    ▪ Ant自动封装        Ant自动打包  Ant使用   在ant的官网http://ant.apache.org进行下载后apache-ant-1.8.2包 解压(存放的路径不要有中文字符) 把ant里的lib设置到环境变量:E:\Android\apache-ant-1.8.2\lib 这样在命令行里就可.........
    ▪ GMap效能:地址名称查询地址信息       GMap功能:地址名称查询地址信息 功能:根据地址名称查询地址信息Location.Geocoder.getFromLocationName(String locationName, int maxResults),返回的是一个List<Address>,每一个相关的地址都被封装成.........

[1]Java开发中的Memcache原理及兑现(七)Memcached客户端程序 【转】
    来源: 互联网  发布时间: 2014-02-18
Java开发中的Memcache原理及实现(七)Memcached客户端程序 【转】
Java开发中的Memcache原理及实现(七)Memcached客户端程序 http://jiaxiaoyuan1204.blog.163.com/blog/static/65553152010520112614157/
 
七、            Memcached客户端程序

Memcached的java客户端已经存在三种了:

?  官方提供的基于传统阻塞io由Greg Whalin维护的客户端

?  Dustin Sallings实现的基于java nio的Spymemcached

?  XMemcached


1. 三种API比较
1)      memcached client for java

较早推出的memcached JAVA客户端API,应用广泛,运行比较稳定。


2)      spymemcached

A simple, asynchronous, single-threaded memcached client written in java. 支持异步,单线程的memcached客户端,用到了java1.5版本的concurrent和nio,存取速度会高于前者,但是稳定性不好,测试中常报timeOut等相关异常。


3)      xmemcached

XMemcached同样是基于java nio的客户端,java nio相比于传统阻塞io模型来说,有效率高(特别在高并发下)和资源耗费相对较少的优点。传统阻塞IO为了提高效率,需要创建一定数量的连接形成连接池,而nio仅需要一个连接即可(当然,nio也是可以做池化处理),相对来说减少了线程创建和切换的开销,这一点在高并发下特别明显。因此XMemcached与Spymemcached在性能都非常优秀,在某些方面(存储的数据比较小的情况下)Xmemcached比Spymemcached的表现更为优秀,具体可以看这个Java Memcached Clients Benchmark。


2.  建议

由于memcached client for java发布了新版本,性能上有所提高,并且运行稳定,所以建议使用memcached client for java。

XMemcached也使用得比较广泛,而且有较详细的中文API文档,具有如下特点:高性能、支持完整的协议、支持客户端分布、允许设置节点权重、动态增删节点、支持JMX、与Spring框架和Hibernate-memcached的集成、客户端连接池、可扩展性好等。

下面给出这三种客户端的示例程序。


3.  示例程序
1)      memcached client for java

从前面介绍的Java环境的Memcached客户端程序项目网址里,下载最新版的客户端程序包:java_memcached-release_2.5.1.zip,解压后,文件夹里找到java_memcached-release_2.5.1.jar,这个就是客户端的JAR包。将此JAR包添加到项目的构建路径里,则项目中,就可以使用Memcached了。

示例代码如下:

package temp;



import com.danga.MemCached.*;

import org.apache.log4j.*;



public class CacheTest {

    public static void main(String[] args) {

       /**

        * 初始化SockIOPool,管理memcached的连接池

        * */

       String[] servers = { "10.11.15.222:10000" };

       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 < 1000; i++) {

           /**

            * 将对象加入到memcached缓存

            * */

           boolean success = memCachedClient.set("" + i, "Hello!");

           /**

            * 从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));

       }

    }

}


2)      spymemcached

spymemcached当前版本是2.5版本,官方网址是:http://code.google.com/p/spymemcached/。可以从地址:http://spymemcached.googlecode.com/files/memcached-2.5.jar下载最新版本来使用。

示例代码如下:

package temp;



import java.net.InetSocketAddress;

import java.util.concurrent.Future;



import net.spy.memcached.MemcachedClient;



public class TestSpyMemcache {

    public static void main(String[] args) {

       // 保存对象

       try {

           /* 建立MemcachedClient 实例,并指定memcached服务的IP地址和端口号 */

           MemcachedClient mc = new MemcachedClient(new InetSocketAddress("10.11.15.222", 10000));

           Future<Boolean> b = null;

           /* 将key值,过期时间(秒)和要缓存的对象set到memcached中 */

           b = mc.set("neea:testDaF:ksIdno", 900, "someObject");

           if (b.get().booleanValue() == true) {

              mc.shutdown();

           }

       } catch (Exception ex) {

           ex.printStackTrace();

       }

       // 取得对象

        try {

           /* 建立MemcachedClient 实例,并指定memcached服务的IP地址和端口号 */

           MemcachedClient mc = new MemcachedClient(new InetSocketAddress("10.11.15.222", 10000));

           /* 按照key值从memcached中查找缓存,不存在则返回null */

           Object b = mc.get("neea:testDaF:ksIdno");

           System.out.println(b.toString());

           mc.shutdown();

       } catch (Exception ex) {

           ex.printStackTrace();

       }

    }

}


3)      xmemcached

Xmemcached的官方网址是:http://code.google.com/p/xmemcached/,可以从其官网上下载最新版本的1.2.4来使用。地址是:http://xmemcached.googlecode.com/files/xmemcached-1.2.4-src.tar.gz。

示例代码如下:

package temp;



import java.io.IOException;

import java.util.concurrent.TimeoutException;



import net.rubyeye.xmemcached.utils.AddrUtil;

import net.rubyeye.xmemcached.MemcachedClient;

import net.rubyeye.xmemcached.MemcachedClientBuilder;

import net.rubyeye.xmemcached.XMemcachedClientBuilder;

import net.rubyeye.xmemcached.exception.MemcachedException;



public class TestXMemcache {

    public static void main(String[] args) {

       MemcachedClientBuilder builder = new XMemcachedClientBuilder(AddrUtil

              .getAddresses("10.11.15.222:10000"));

       MemcachedClient memcachedClient;

       try {

           memcachedClient = builder.build();

      

           memcachedClient.set("hello", 0, "Hello,xmemcached");

           String value = memcachedClient.get("hello");

           System.out.println("hello=" + value);

           memcachedClient.delete("hello");

           value = memcachedClient.get("hello");

           System.out.println("hello=" + value);

           // close memcached client

           memcachedClient.shutdown();

       } catch (MemcachedException e) {

           System.err.println("MemcachedClient operation fail");

           e.printStackTrace();

       } catch (TimeoutException e) {

           System.err.println("MemcachedClient operation timeout");

           e.printStackTrace();

       } catch (InterruptedException e) {

           // ignore

       }catch (IOException e) {

           System.err.println("Shutdown MemcachedClient fail");

           e.printStackTrace();

       }

    }

}


    
[2] Ant自动封装
    来源: 互联网  发布时间: 2014-02-18
Ant自动打包

 Ant使用

 

在ant的官网http://ant.apache.org进行下载后apache-ant-1.8.2包

解压(存放的路径不要有中文字符)

把ant里的lib设置到环境变量:E:\Android\apache-ant-1.8.2\lib

这样在命令行里就可以直接使用ant

学习资料:
1.  ant使用指南.rar

2. 文档:apache-ant-1.8.2/docs/manual/index.html下的Ant Tasks à List of Tasks

 

 

Ant的For循环

 

在ant的核心包里没有相关的For循环的Task,要下载相应的扩展包,已经有人写过了。

扩展包:Ant-contrib包就是一个里面有For循环的扩展包。

下载地址:http://ant-contrib.sourceforge.net/

使用这个扩展包中的for循环的介绍:http://enjoyyou.blog.hexun.com/41449457_d.html

把ant-contrib里的lib包复制到apache-ant-1.8.2\lib下面,就可以了

 

 

混淆proguard

 

混淆proguard是一个开源项目,ant自动打包的过程用的就是这个开源项目,在android-sdk-windows\tools目录下有一个proguard文件夹,里面就有这相应的jar包

Android sdk里自带的proguard jar包有一个bug,对于一些方法在混淆时会报异常,要解决这个bug,只需要去proguard的官网http://proguard.sourceforge.net/下载最新的jar包proguard4.6

下载下来后,用proguard4.6\lib里的jar包替换android-sdk-windows\tools\proguard\lib里的jar,用proguard4.6\lib\bin里的以.bat结尾的文件替换android-sdk-windows\tools\proguard\bin里的文件

 

 

下载svn里的项目(svnant)

 

因为我们的项目是用svn来进行托管,所以需要用ant来下载最新代码,根据服务器所用的svnservice的版本去svnant的官网http://subclipse.tigris.org/svnant.html 下载svnant的版本,我用的是:svnant-1.1.0-RC2

然后只要把svnant-1.1.0-RC2\lib里的jar包复制到apache-ant-1.8.2\lib里就可以了

在下载下来的jar里,有相应的doc文档,可以知道怎么使用

 

写脚本,布署项目

 

  • 在项目里要加入几个文件(build.properties, build.xml, local.properties, proguard.cfg), 怎样得到这些文件了,只需要用命令创建一个android项目,就可以得到这些文件(这些文件对于不同的项目,基本上是一样的):

    现在来说说这几个文件:
    1). Build.xml文件:这个文件是ant运行时脚本,这是一个固定的模板,其中主要需要变动的是:<project name="MyAndroidApp" default="help">里的name属性,这个属性的唯一作用是用于命名生成的apk文件(如MyAndroidApp-release.apk);但注意,这个文件不要在eclipse里打开,如果打开了会报错,解决办法只有把这个文件先删除再复制进去。
    2). Build.properties文件:这是一个属性文件,可以更改编译时的一些属性,我主要用到的是下面几个属性

    jar.libs.dir表示如果你引用的第三方jar包的路径,其default=libs
    java.encoding表示文件的编码,其default=gbk
    key.store表示key的路径,如:xx/xxxx.keystore
    key.alias表示key的别名,这个别名不要带路径
    key.store.password, key.alias.password就不用说了。
    3). Local.properties文件:这个也是一个属性文件,其中用于记录sdk.dir的路径

     4). proguard.cfg文件:这个是混淆配置文件,其中的大部分是都是一样的,只要根据模板走就行了,其中主要是注意两点:
    *. -keep class * extends android.view.View 这个表示自定义的view对象不做混淆,其默认情况下是没有的,但这个必须要写,因为我们会在xml文件里使用其全路径
    *. -dontwarn com.mapbar.android.**这名话很重要,如果我们使用了第三方的jar包,编译时也会对第三方的jar进行混淆,如果第三方法的jar包里有类所关联的类没有加入到这个jar包中,则在编译时,会warn,而且这个warn会让编译过程终止。而这句话的意思是,不要抛出前缀为com.mapbar.android的warn,这样就不会终止编译过程了。
  •  写ant脚本和配置文件(build.xml, build.properties)

     a). build.properties是一个属性文件,是一些打包的配置文件



     

    b). build.xml文件的写法:
















  • 使用:只要打开命令行,进入这个目录,一个ant命令就行。


  •  

    1 楼 yangjiaweivip 2011-09-29  
    楼主能给我一个全的build.xml和default.properties您可以把一些关键密码删除掉,我现在看了许多,您的比较全面
    2 楼 枫叶灬紫云 2011-09-30  
    同上,希望楼主看到后可以给个完整点的文件包,现在一个工程一大包就得一两百个,研究了下ant,还是有不少疑问,希望能帮下忙,非常感谢!!!              
    3 楼 枫叶灬紫云 2011-09-30  
    楼主看到话,发到这个邮箱,非常感谢 471029411@qq.com
    4 楼 三毛 2011-11-03  
    您太给力啦
    5 楼 hshm 2011-11-22  
    楼主,能把default.properties放出来么?
    6 楼 巩建军 2012-02-03  
    楼主可以给我一个全的build.xml和default.properties吗?您可以把关键信息处理掉,邮箱guhong@yeah.net
    7 楼 seamount 2012-02-10  
    大哥帮忙给个完整的TestDemo好不,搞了半天也没搞定。。。谢谢了pursuemoon@qq.com
    8 楼 mariner 2012-03-16  
    请楼主分享一份完整点的文件包,多谢。1239066763@qq.com
    9 楼 zkl905138211 2012-03-19  
    请楼主分享一下完整的包(credentials.xml)90513811@qq.com,非常感谢
    10 楼 475310736 2012-05-16  
    楼主啊给个demo好不,1771893348@qq.com
    11 楼 libo19881179 2012-06-01  
    楼主能不截图吗...求个源码 谢谢了 812258893@qq.com
    12 楼 libo19881179 2012-06-01  
    libo19881179 写道
    楼主能不截图吗...求个源码 谢谢了 812258893@qq.com

    最好能去掉svn部分
    13 楼 fhsh168 2012-06-11  
    求一份源码,非常感谢  576673831@qq.com

        
    [3] GMap效能:地址名称查询地址信息
        来源: 互联网  发布时间: 2014-02-18
    GMap功能:地址名称查询地址信息
    功能:


    根据地址名称查询地址信息
    Location.Geocoder.getFromLocationName(String locationName, int maxResults),返回的是一个List<Address>,每一个相关的地址都被封装成一个Address.

        
    最新技术文章:
    ▪Android开发之登录验证实例教程
    ▪Android开发之注册登录方法示例
    ▪Android获取手机SIM卡运营商信息的方法
    ▪Android实现将已发送的短信写入短信数据库的...
    ▪Android发送短信功能代码
    ▪Android根据电话号码获得联系人头像实例代码
    ▪Android中GPS定位的用法实例
    ▪Android实现退出时关闭所有Activity的方法
    ▪Android实现文件的分割和组装
    ▪Android录音应用实例教程
    ▪Android双击返回键退出程序的实现方法
    nosql iis7站长之家
    ▪Android获取当前已连接的wifi信号强度的方法
    ▪Android实现动态显示或隐藏密码输入框的内容
    ▪根据USER-AGENT判断手机类型并跳转到相应的app...
    ▪Android Touch事件分发过程详解
    ▪Android中实现为TextView添加多个可点击的文本
    ▪Android程序设计之AIDL实例详解
    ▪Android显式启动与隐式启动Activity的区别介绍
    ▪Android按钮单击事件的四种常用写法总结
    ▪Android消息处理机制Looper和Handler详解
    ▪Android实现Back功能代码片段总结
    ▪Android实用的代码片段 常用代码总结
    ▪Android实现弹出键盘的方法
    ▪Android中通过view方式获取当前Activity的屏幕截...
    ▪Android提高之自定义Menu(TabMenu)实现方法
    ▪Android提高之多方向抽屉实现方法
    ▪Android提高之MediaPlayer播放网络音频的实现方法...
    ▪Android提高之MediaPlayer播放网络视频的实现方法...
    ▪Android提高之手游转电视游戏的模拟操控
     


    站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3