memcached-java客户端xmemcached使用总结

缓存学习(四):MemCached的Java客户端 目录 1基本使用 2高级特性 2.1为节点设置权重 2.2动态调整集群 2.3 NIO连接池 2.4节点选择 2.5 Key迭代器 2.6命名空间 2.7安全认证 2.8 Failure模式和 Standby模式 3结合Spring使用 上一篇提到,Memcached将数据全部保存在内存中,并且服务端节点间互相分离,这就带来了一定的性能问题: 首先,由于... 阅读详情

memcached-java客户端xmemcached使用总结

标签: memcachedxmemcached分布式缓存spring
  3609人阅读  评论(0)  收藏  举报
  分类:

目录(?)[+]

1. 最近调研了下memcached,之前2篇博客简单得介绍了用法,现在做个总结就当调研结束,本博客将从以下几个方面进行总结,

a. xmemcached简介

b. xmemcached的分布式

c. xmemcached支持的存储对象

d. xmemcached的容错性

e. xmemcached的性能测试

    由于memcached可以与spring集成,所以本博客以和spring集成来讲以上几点


先来看看如何与spring集成,首先在pom中引入相应的包(spring相关的不列出来)

[plain]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. <dependency>  
  2.             <groupId>com.googlecode.xmemcached</groupId>  
  3.             <artifactId>xmemcached</artifactId>  
  4.             <version>2.0.0</version>  
  5.         </dependency>  

以下是properties文件:

[plain]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. # the pool size(the number of client)  
  2. memcached.connectionPoolSize=50  
  3. # in this mode, when a node out, it will throws MemcachedException when call this node  
  4. memcached.failureMode=true  
  5. #server1    
  6. memcached.server1.host=192.168.88.140  
  7. memcached.server1.port=11211  
  8. memcached.server1.weight=1  
  9. #server2    
  10. memcached.server2.host=192.168.88.141  
  11. memcached.server2.port=11211  
  12. memcached.server2.weight=1  
  13. #server3    
  14. memcached.server3.host=192.168.88.142  
  15. memcached.server3.port=11211  
  16. memcached.server3.weight=1  


spring bean配置:

[plain]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <beans xmlns="http://www.springframework.org/schema/beans"  
  3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"  
  4.     xmlns:p="http://www.springframework.org/schema/p" xmlns:c="http://www.springframework.org/schema/c"  
  5.     xmlns:rabbit="http://www.springframework.org/schema/rabbit" xmlns:task="http://www.springframework.org/schema/task"  
  6.     xsi:schemaLocation="http://www.springframework.org/schema/beans   
  7.                         http://www.springframework.org/schema/beans/spring-beans.xsd  
  8.                         http://www.springframework.org/schema/context   
  9.                         http://www.springframework.org/schema/context/spring-context.xsd  
  10.                         http://www.springframework.org/schema/rabbit  
  11.                         http://www.springframework.org/schema/rabbit/spring-rabbit-1.3.xsd  
  12.                         http://www.springframework.org/schema/task  
  13.                         http://www.springframework.org/schema/task/spring-task.xsd">  
  14.   
  15.     <bean id="memcachedClientBuilder" class="net.rubyeye.xmemcached.XMemcachedClientBuilder"  
  16.         p:connectionPoolSize="${memcached.connectionPoolSize}" p:failureMode="${memcached.failureMode}">  
  17.         <!-- XMemcachedClientBuilder have two arguments.First is server list,and   
  18.             second is weights array. -->  
  19.         <constructor-arg>  
  20.             <list>  
  21.                 <bean class="java.net.InetSocketAddress">  
  22.                     <constructor-arg>  
  23.                         <value>${memcached.server1.host}</value>  
  24.                     </constructor-arg>  
  25.                     <constructor-arg>  
  26.                         <value>${memcached.server1.port}</value>  
  27.                     </constructor-arg>  
  28.                 </bean>  
  29.                 <bean class="java.net.InetSocketAddress">  
  30.                     <constructor-arg>  
  31.                         <value>${memcached.server2.host}</value>  
  32.                     </constructor-arg>  
  33.                     <constructor-arg>  
  34.                         <value>${memcached.server2.port}</value>  
  35.                     </constructor-arg>  
  36.                 </bean>  
  37.                 <bean class="java.net.InetSocketAddress">  
  38.                     <constructor-arg>  
  39.                         <value>${memcached.server3.host}</value>  
  40.                     </constructor-arg>  
  41.                     <constructor-arg>  
  42.                         <value>${memcached.server3.port}</value>  
  43.                     </constructor-arg>  
  44.                 </bean>  
  45.             </list>  
  46.         </constructor-arg>  
  47.         <constructor-arg>  
  48.             <list>  
  49.                 <value>${memcached.server1.weight}</value>  
  50.                 <value>${memcached.server2.weight}</value>  
  51.                 <value>${memcached.server3.weight}</value>  
  52.             </list>  
  53.         </constructor-arg>  
  54.         <!-- BinaryCommandFactory -->  
  55.         <property name="commandFactory">  
  56.             <bean class="net.rubyeye.xmemcached.command.BinaryCommandFactory" />  
  57.         </property>  
  58.         <property name="transcoder">  
  59.             <bean class="net.rubyeye.xmemcached.transcoders.SerializingTranscoder" />  
  60.         </property>  
  61.         <property name="bufferAllocator">  
  62.             <bean class="net.rubyeye.xmemcached.buffer.SimpleBufferAllocator"></bean>  
  63.         </property>  
  64.     </bean>  
  65.     <!-- Use factory bean to build memcached client -->  
  66.     <bean id="memcachedClient" factory-bean="memcachedClientBuilder"  
  67.         factory-method="build" destroy-method="shutdown" />  
  68.   
  69. </beans>  

这样就可以用memcachedClient了

举个简单的例子说明如何使用:

[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. @Autowired  
  2.     private MemcachedClient memcachedClient;  
  3.   
  4.     public Map<String, User> queryFromCache(List<String> keys) {  
  5.         Map<String, User> users = new HashMap<String, User>();  
  6.         for (String key : keys) {  
  7.             try {  
  8.                 User user = memcachedClient.get(key);  
  9.                 users.put(key, user);  
  10.             } catch (TimeoutException e) {  
  11.                 e.printStackTrace();  
  12.             } catch (InterruptedException e) {  
  13.                 e.printStackTrace();  
  14.             } catch (MemcachedException e) {  
  15.                 e.printStackTrace();  
  16.             }  
  17.         }  
  18.         return users;  
  19.     }  



xmemcached简介

xmemcached是一个新Java memcached client。简单来说,Memcached 是一个高性能的分布式内存对象的key-value缓存系统,用于动态Web应用以减轻数据库负载,现在也有很多人将它作为内存式数据库在使用,memcached通过它的自定义协议与客户端交互,而XMemcached就是它的一个Java客户端实现。

Memcached的java客户端已经存在两个了:官方提供的基于传统阻塞io的客户端 、Dustin Sallings实现的基于java nio的spymemcached 。另外还有一些在此基础上的改进版本。

XMemcached的主要特性

高性能

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

支持完整的协议

Xmemcached支持所有的memcached协议,包括1.4.0正式开始使用的 二进制协议 。

支持客户端分布

Memcached的分布只能通过客户端来实现,XMemcached实现了此功能,并且提供了一致性哈希(consistent hash)算法的实现。

允许设置节点权重

XMemcached允许通过设置节点的权重来调节memcached的负载,设置的权重越高,该memcached节点存储的数据将越多,所承受的负载越大。

动态增删节点

XMemcached允许通过JMX或者代码编程实现节点的动态添加或者移除,方便用户扩展和替换节点等。

支持JMX

XMemcached通过JMX暴露的一些接口,支持client本身的监控和调整,允许动态设置调优参数、查看统计数据、动态增删节点等。

xmemcached的分布式

由于memcached不支持服务器端分布式,所以m emcached的分布只能通过客户端来实现,xmemcached实现了此功能,并且提供了一致性哈希(consistent hash)算法的实现,关于一致性hashing见http://kb.cnblogs.com/page/42734/
需要说明的是这还只是客户端分布式,不支持主从,各个节点其实还是单独存储,并且未实现存储冗余,节点挂了数据就会相应得丢失
具有如下优势:

允许设置节点权重

XMemcached允许通过设置节点的权重来调节memcached的负载,设置的权重越高,该memcached节点存储的数据将越多,所承受的负载越大。

动态增删节点

XMemcached允许通过JMX或者代码编程实现节点的动态添加或者移除,方便用户扩展和替换节点等。

支持JMX

XMemcached通过JMX暴露的一些接口,支持client本身的监控和调整,允许动态设置调优参数、查看统计数据、动态增删节点等


xmemcached支持的存储对象

xmemcached支持的存储比较简单,只要实现了java序列化接口(Serializable接口)的对象就可以存储,当然可以包含Map、Set、List这些复杂对象

xmemcached的容错性

如果当前连接了3个服务器端,其中有一个突然挂掉,那么执行client操作时会抛出异常,但是如果memcached.failureMode=true设置成false那么就不抛出异常,只不过你查询的那个数据显示为null
由于是客户端分布式,所以并未实现存储冗余,如果要冗余需要自己实现代码

xmemcached的性能测试

这里有一个博客介绍了spymemcached和xmemcached的性能对比,http://www.blogjava.net/killme2008/archive/2009/03/04/257852.html
下面我自己来做一个测试
测试环境
memcached版本1.4.22
启动memcached的内存:1G
节点数:3
测试结果单位:tps

先测试简单的String,测试一共开100个线程,每个线程执行10000次操作,结果如下:
写76062
读91116
删89863

再来测试复杂型的Map, 测试一共开50个线程,每个线程执行100次操作,结果如下:
写2399
读1901
删13227

具体代码如下:
[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. public class PerformanceTest {  
  2.   
  3.     static class TestWriteRunnable implements Runnable {  
  4.   
  5.         private MemcachedClient mc;  
  6.         private CountDownLatch cd;  
  7.         int repeat;  
  8.         int start;  
  9.   
  10.         public TestWriteRunnable(MemcachedClient mc, int start, CountDownLatch cdl, int repeat) {  
  11.             super();  
  12.             this.mc = mc;  
  13.             this.start = start;  
  14.             this.cd = cdl;  
  15.             this.repeat = repeat;  
  16.   
  17.         }  
  18.   
  19.         public void run() {  
  20.             try {  
  21.   
  22.                 for (int i = 0; i < repeat; i++) {  
  23.                     String key = String.valueOf(start + i);  
  24.                     if (!mc.set(key, 0, key)) {  
  25.                         System.err.println("set error");  
  26.                     }  
  27.   
  28.                 }  
  29.   
  30.             } catch (Exception e) {  
  31.                 e.printStackTrace();  
  32.             } finally {  
  33.                 cd.countDown();  
  34.             }  
  35.         }  
  36.   
  37.     }  
  38.   
  39.     static class TestReadRunnable implements Runnable {  
  40.   
  41.         private MemcachedClient mc;  
  42.         private CountDownLatch cd;  
  43.         int repeat;  
  44.         int start;  
  45.   
  46.         public TestReadRunnable(MemcachedClient mc, int start, CountDownLatch cdl, int repeat) {  
  47.             super();  
  48.             this.mc = mc;  
  49.             this.start = start;  
  50.             this.cd = cdl;  
  51.             this.repeat = repeat;  
  52.   
  53.         }  
  54.   
  55.         public void run() {  
  56.             try {  
  57.                 for (int i = 0; i < repeat; i++) {  
  58.   
  59.                     String key = String.valueOf(start + i);  
  60.                     String result = (String) mc.get(key);  
  61.                     if (!key.equals(result)) {  
  62.                         System.out.println(key + " " + result);  
  63.                         System.err.println("get error");  
  64.                     }  
  65.                 }  
  66.   
  67.             } catch (Exception e) {  
  68.                 e.printStackTrace();  
  69.             } finally {  
  70.                 cd.countDown();  
  71.             }  
  72.         }  
  73.   
  74.     }  
  75.   
  76.     static class TestDeleteRunnable implements Runnable {  
  77.   
  78.         private MemcachedClient mc;  
  79.         private CountDownLatch cd;  
  80.         int repeat;  
  81.         int start;  
  82.   
  83.         public TestDeleteRunnable(MemcachedClient mc, int start, CountDownLatch cdl, int repeat) {  
  84.             super();  
  85.             this.mc = mc;  
  86.             this.start = start;  
  87.             this.cd = cdl;  
  88.             this.repeat = repeat;  
  89.   
  90.         }  
  91.   
  92.         public void run() {  
  93.             try {  
  94.                 for (int i = 0; i < repeat; i++) {  
  95.                     String key = String.valueOf(start + i);  
  96.                     if (!mc.delete(key))  
  97.                         System.err.println("delete error");  
  98.                 }  
  99.   
  100.             } catch (Exception e) {  
  101.                 e.printStackTrace();  
  102.             } finally {  
  103.                 cd.countDown();  
  104.             }  
  105.         }  
  106.   
  107.     }  
  108.   
  109.     // thread num=10, repeat=10000,size=2, all=200000 ,velocity=1057 , using  
  110.     // time:189187  
  111.     static public void main(String[] args) {  
  112.         try {  
  113.             String address = "192.168.88.140:11211 192.168.88.141:11211 192.168.88.142:11211";  
  114.   
  115.             int size = Runtime.getRuntime().availableProcessors();  
  116.   
  117.             int thread = 100;  
  118.   
  119.             int repeat = 10000;  
  120.   
  121.             MemcachedClientBuilder builder = new XMemcachedClientBuilder(AddrUtil.getAddresses(address), new int[] { 1,  
  122.                     1, 1 });  
  123.             MemcachedClient mc = null;  
  124.             builder.setConnectionPoolSize(5);  
  125.             try {  
  126.                 mc = builder.build();  
  127.             } catch (IOException e) {  
  128.                 e.printStackTrace();  
  129.             }  
  130.             CountDownLatch cdl = new CountDownLatch(thread);  
  131.             long t = System.currentTimeMillis();  
  132.             for (int i = 0; i < thread; i++) {  
  133.                 new Thread(new PerformanceTest.TestWriteRunnable(mc, i * 10000, cdl, repeat)).start();  
  134.             }  
  135.             cdl.await();  
  136.             long all = thread * repeat;  
  137.             long usingtime = (System.currentTimeMillis() - t);  
  138.   
  139.             System.out.println(String.format(  
  140.                     "test write,thread num=%d, repeat=%d,size=%d, all=%d ,velocity=%d , using time:%d", thread, repeat,  
  141.                     size, all, 1000 * all / usingtime, usingtime));  
  142.   
  143.             cdl = new CountDownLatch(thread);  
  144.             t = System.currentTimeMillis();  
  145.             for (int i = 0; i < thread; i++) {  
  146.                 new Thread(new PerformanceTest.TestReadRunnable(mc, i * 10000, cdl, repeat)).start();  
  147.             }  
  148.             cdl.await();  
  149.             all = thread * repeat;  
  150.             usingtime = (System.currentTimeMillis() - t);  
  151.             System.out.println(String.format(  
  152.                     "test read,thread num=%d, repeat=%d,size=%d, all=%d ,velocity=%d , using time:%d", thread, repeat,  
  153.                     size, all, 1000 * all / usingtime, usingtime));  
  154.             cdl = new CountDownLatch(thread);  
  155.             t = System.currentTimeMillis();  
  156.             for (int i = 0; i < thread; i++) {  
  157.                 new Thread(new PerformanceTest.TestDeleteRunnable(mc, i * 10000, cdl, repeat)).start();  
  158.             }  
  159.             cdl.await();  
  160.             all = thread * repeat;  
  161.             usingtime = (System.currentTimeMillis() - t);  
  162.             System.out.println(String.format(  
  163.                     "test delete,thread num=%d, repeat=%d,size=%d, all=%d ,velocity=%d , using time:%d", thread,  
  164.                     repeat, size, all, 1000 * all / usingtime, usingtime));  
  165.   
  166.             mc.shutdown();  
  167.         } catch (Exception e) {  
  168.             e.printStackTrace();  
  169.         }  
  170.     }  
  171. }  


[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. public class PerformanceTest2 {  
  2.     static Map<String, Book> map2 = new HashMap<String, Book>();  
  3.     static final int ELEMENT_NUM = 100;  
  4.     static {  
  5.         for (int i = 0; i < ELEMENT_NUM; i++)  
  6.             map2.put(String.valueOf(i), new Book(i, String.valueOf(i), String.valueOf(i)));  
  7.     }  
  8.   
  9.     static class TestWriteRunnable implements Runnable {  
  10.   
  11.         private MemcachedClient mc;  
  12.         private CountDownLatch cd;  
  13.         int repeat;  
  14.         int start;  
  15.   
  16.         public TestWriteRunnable(MemcachedClient mc, int start, CountDownLatch cdl, int repeat) {  
  17.             super();  
  18.             this.mc = mc;  
  19.             this.start = start;  
  20.             this.cd = cdl;  
  21.             this.repeat = repeat;  
  22.   
  23.         }  
  24.   
  25.         public void run() {  
  26.             try {  
  27.   
  28.                 for (int i = 0; i < repeat; i++) {  
  29.                     String key = String.valueOf(start + i);  
  30.                     if (!mc.set(key, 0, map2)) {  
  31.                         System.err.println("set error");  
  32.                     }  
  33.   
  34.                 }  
  35.   
  36.             } catch (Exception e) {  
  37.                 e.printStackTrace();  
  38.             } finally {  
  39.                 cd.countDown();  
  40.             }  
  41.         }  
  42.   
  43.     }  
  44.   
  45.     static class TestReadRunnable implements Runnable {  
  46.   
  47.         private MemcachedClient mc;  
  48.         private CountDownLatch cd;  
  49.         int repeat;  
  50.         int start;  
  51.   
  52.         public TestReadRunnable(MemcachedClient mc, int start, CountDownLatch cdl, int repeat) {  
  53.             super();  
  54.             this.mc = mc;  
  55.             this.start = start;  
  56.             this.cd = cdl;  
  57.             this.repeat = repeat;  
  58.   
  59.         }  
  60.   
  61.         @SuppressWarnings("unchecked")  
  62.         public void run() {  
  63.             try {  
  64.                 for (int i = 0; i < repeat; i++) {  
  65.   
  66.                     String key = String.valueOf(start + i);  
  67.                     Map<String, Book> result = (Map<String, Book>) mc.get(key);  
  68.                     if (result.size() != ELEMENT_NUM) {  
  69.                         System.err.println("get error");  
  70.                     }  
  71.                 }  
  72.   
  73.             } catch (Exception e) {  
  74.                 e.printStackTrace();  
  75.             } finally {  
  76.                 cd.countDown();  
  77.             }  
  78.         }  
  79.   
  80.     }  
  81.   
  82.     static class TestDeleteRunnable implements Runnable {  
  83.   
  84.         private MemcachedClient mc;  
  85.         private CountDownLatch cd;  
  86.         int repeat;  
  87.         int start;  
  88.   
  89.         public TestDeleteRunnable(MemcachedClient mc, int start, CountDownLatch cdl, int repeat) {  
  90.             super();  
  91.             this.mc = mc;  
  92.             this.start = start;  
  93.             this.cd = cdl;  
  94.             this.repeat = repeat;  
  95.   
  96.         }  
  97.   
  98.         public void run() {  
  99.             try {  
  100.                 for (int i = 0; i < repeat; i++) {  
  101.                     String key = String.valueOf(start + i);  
  102.                     if (!mc.delete(key))  
  103.                         System.err.println("delete error");  
  104.                 }  
  105.   
  106.             } catch (Exception e) {  
  107.                 e.printStackTrace();  
  108.             } finally {  
  109.                 cd.countDown();  
  110.             }  
  111.         }  
  112.   
  113.     }  
  114.   
  115.     // thread num=10, repeat=10000,size=2, all=200000 ,velocity=1057 , using  
  116.     // time:189187  
  117.     static public void main(String[] args) {  
  118.         try {  
  119.             String address = "192.168.88.140:11211 192.168.88.141:11211 192.168.88.142:11211";  
  120.   
  121.             int size = Runtime.getRuntime().availableProcessors();  
  122.   
  123.             int thread = 50;  
  124.   
  125.             int repeat = 100;  
  126.   
  127.             MemcachedClientBuilder builder = new XMemcachedClientBuilder(AddrUtil.getAddresses(address), new int[] { 1,  
  128.                     1, 1 });  
  129.             MemcachedClient mc = null;  
  130.             builder.setConnectionPoolSize(5);  
  131.             try {  
  132.                 mc = builder.build();  
  133.             } catch (IOException e) {  
  134.                 e.printStackTrace();  
  135.             }  
  136.   
  137.             CountDownLatch cdl = new CountDownLatch(thread);  
  138.             long t = System.currentTimeMillis();  
  139.             for (int i = 0; i < thread; i++) {  
  140.                 new Thread(new PerformanceTest2.TestWriteRunnable(mc, i * 10000, cdl, repeat)).start();  
  141.             }  
  142.             try {  
  143.                 cdl.await();  
  144.             } catch (InterruptedException e) {  
  145.   
  146.             }  
  147.             long all = thread * repeat;  
  148.             long usingtime = (System.currentTimeMillis() - t);  
  149.   
  150.             System.out.println(String.format(  
  151.                     "test write,thread num=%d, repeat=%d,size=%d, all=%d ,velocity=%d , using time:%d", thread, repeat,  
  152.                     size, all, 1000 * all / usingtime, usingtime));  
  153.   
  154.             cdl = new CountDownLatch(thread);  
  155.             t = System.currentTimeMillis();  
  156.             for (int i = 0; i < thread; i++) {  
  157.                 new Thread(new PerformanceTest2.TestReadRunnable(mc, i * 10000, cdl, repeat)).start();  
  158.             }  
  159.             try {  
  160.                 cdl.await();  
  161.             } catch (InterruptedException e) {  
  162.   
  163.             }  
  164.             all = thread * repeat;  
  165.             usingtime = (System.currentTimeMillis() - t);  
  166.             System.out.println(String.format(  
  167.                     "test read,thread num=%d, repeat=%d,size=%d, all=%d ,velocity=%d , using time:%d", thread, repeat,  
  168.                     size, all, 1000 * all / usingtime, usingtime));  
  169.             cdl = new CountDownLatch(thread);  
  170.             t = System.currentTimeMillis();  
  171.             for (int i = 0; i < thread; i++) {  
  172.                 new Thread(new PerformanceTest2.TestDeleteRunnable(mc, i * 10000, cdl, repeat)).start();  
  173.             }  
  174.             try {  
  175.                 cdl.await();  
  176.             } catch (InterruptedException e) {  
  177.   
  178.             }  
  179.             all = thread * repeat;  
  180.             usingtime = (System.currentTimeMillis() - t);  
  181.             System.out.println(String.format(  
  182.                     "test delete,thread num=%d, repeat=%d,size=%d, all=%d ,velocity=%d , using time:%d", thread,  
  183.                     repeat, size, all, 1000 * all / usingtime, usingtime));  
  184.   
  185.             mc.shutdown();  
  186.         } catch (Exception e) {  
  187.             e.printStackTrace();  
  188.         }  
  189.     }  
  190. }  


顶
0
踩
0
 
 
Windows 10下三菱PLC控件安装报错Error Number:-119的终极解决方案(附详细步骤) 本文针对Windows 10系统安装三菱PLC控件时常见的Error Number:-119报错,提供了深度分析与终极解决方案。文章剖析了该错误源于oleaut32.dll文件版本冲突,并详细介绍了通过设置兼容性模式、手动注册DLL、直接安装MX Component以及高级系统修复等多种方法,帮助用户彻底解决此安装难题,顺利搭建PLC开发环境。 阅读详情

相关推荐

用Python+NumPy手把手实现分数阶傅里叶变换(FRFT),搞定线性调频信号分析

本文详细介绍了如何使用Python和NumPy实现分数阶傅里叶变换(FRFT),特别针对线性调频信号(Chirp信号)分析。通过从零开始的代码实现和可视化案例,展示了FRFT在时变信号处理中的强大能力,帮助工程师和研究人员高效分析频率随时间变化的信号。

weixin_29062823的博客 218

MemcachedUtil 工具类

/** * */ package org.lang2hong.utils; import java.io.IOException; import java.net.InetAddress; import java.net.UnknownHostException; import java.util.Properties; import java.util.concurrent.Tim

lang2zhang的专栏 782

Mac版UltraEdit 18.00.0.19破解教程:终端一行命令搞定(附版本适配指南)

本文为Mac用户提供了UltraEdit的合法替代方案与授权指南,强调破解软件的法律风险和安全隐忧。推荐使用VS Code、Sublime Text等开源或商业编辑器,结合终端工具如Vim/Neovim,实现高效文本编辑。同时详细介绍了UltraEdit的官方授权选项,帮助开发者在遵守软件许可的前提下提升工作效率。

k9l0m1的博客 357

XMemcached缓存系统

package com.wujintao.memcached; import java.io.IOException; import java.util.concurrent.TimeoutException; import net.rubyeye.xmemcached.Counter; import net.rubyeye.xmemcached.GetsResponse; import ne

我只是一个简单的Coder,为了兴趣和理想奋斗在生活的道路上 1115

TPRI-DMP平台介绍

TPRI-DMP为华能集团西安热工院自主产权的工业云PaaS平台,已经过13年的发展和迭代,其具备大规模能源电力行业生产应用软件开发和运行能力

ashou706的专栏 2276

从零到一:DETR模型在自定义数据集上的实战部署与调优

本文详细介绍了DETR模型在自定义数据集上的实战部署与调优过程,包括环境准备、数据转换、模型配置、训练技巧及问题排查。通过具体代码示例和实用建议,帮助开发者高效完成从零到一的DETR模型部署,特别适合目标检测领域的实践应用。

weixin_42524100的博客 463

Xmemcached用户指南

一、XMemcached简介 XMemcached是一个新java memcachedclient。也许你还不知道memcached是什么?可以先看看这里。简单来说,Memcached 是一个高性能的分布式内存对象的key-value缓存系统,用于动态Web应用以减轻数据库负载,现在也有很多人将它作为内存式数据库在使用,memcached通过它的自定义协议与客户端交互,而XMemcached就是...

dowhathowtodo 182

SCI论文Discussion写作:如何用AI工具三步打造审稿人认可的深度逻辑框架

本文针对SCI论文Discussion写作的痛点,提出利用AI工具三步构建深度逻辑框架的方法。首先,使用Claude等工具搭建个性化提纲,解决“浅显病”与“混乱症”;其次,高效整合文献与结果,填充证据;最后,优化逻辑衔接与学术语言,打造审稿人认可的流畅论证。该方法强调研究者主导,AI辅助,显著提升写作效率与深度。

weixin_28235513的博客 236

基于java nio的memcached客户端——xmemcached

1、xmemcached是什么? xmemcached是基于java nio实现的memcached客户端API。 实际上是基于我实现的一个简单nio框架 http://code.google.com/p/yanf4j/ 的基础上实现的(目前是基于yanf4j 0.52),核心代码不超过1000行,序列化机制直接挪用spymemcached的Transcoder。 性能方面,在读写简单类型上...

庄周梦蝶 198

实战案例:用多智能体系统模拟房地产市场的架构设计

房地产市场是典型的复杂自适应系统:买方纠结“要不要上车”、卖方盘算“挂多少钱能快速成交”、中介忙着“撮合两边赚佣金”、政府琢磨“怎么调政策稳房价”——每一个参与者的微小决策,最终都会汇聚成“房价暴涨”“成交冰点”这样的宏观现象。传统的计量经济学模型(比如线性回归)假设“所有人都是理性人”,但现实中没人能算清所有变量——你可能因为“同事买了学区房”就跟风,也可能因为“怕失业”而放弃买房。这时候,多智能体系统(MAS)

移动开发前沿的博客 1123

第1章 大数据概述

三次信息化浪潮 信息化浪潮 发生时间 标志 解决的问题 代表企业 第一次 1980年前后 个人计算机 信息处理 Intel、AMD、IBM、苹果、微软、联想、戴尔、惠普等 第二次 1995年前后 互联网 信息传输

wyz191的专栏 7088

Xmemcached使用【二】

Xmemcached的Wiki:http://code.google.com/p/xmemcached/wiki/User_Guide_zh#与Hibernate-memcached集成 一、软件环境      1、memcached-1.4.5      2、xmemcached-1.4.1 二、简单示例     1、设置节点权重         如果需要编程设置,通过下面代码:...

To Strive To Seek To Find Not To Yield 281

【AI智能体】Dify集成 Echarts实现数据报表展示实战详解

Dify集成 Echarts 实现智能数据报表集成与展示实战详解

congge 5962

java nio的memcached客户端--xmemcached

2010-11-06 02:16 1、xmemcached是什么?   基于java nio实现的memcached客户端API。 实际上是基于我实现的一个简单nio框架 http://code.google.com/p/yanf4j/ 的基础上实现的(目前是基于yanf4j 0.54),序列化机制直接挪用spymemcached的Transcoder。 性能方面与spyme...

一条鱼 + 一条鱼 179

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

XMemcached完全指南:高性能Java Memcached客户端入门到精通

XMemcached是一款高性能、易用的多线程Java Memcached客户端,专为提升分布式缓存应用的性能和可靠性而设计。本文将从基础概念到高级特性,全面介绍如何使用XMemcached构建高效的缓存解决方案,帮助开发者快速掌握这一强大工具。 ## 为什么选择XMemcached? 在众多Java Memcached客户端中,XMemcached凭借其独特优势脱颖而出: - **卓越性能

gitblog_01118的博客 373

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

memcached-java客户端xmemcached简单使用

1. 前一篇文章简单说了下如何安装memcached,想到了memcached是分布式的缓存框架,所以自己在公司的3台测试机上安装了下。 2. 关于什么是xmemcached就不多说了,其实就是实现了memcached的java客户端,关于分布式下一篇会稍微详细点介绍,这里只要知道这个分布式其实是客户端的分布式,其实是没有主从节点的概念的。 3. 直接贴代码,看看如何使用 import ja

Cumu Blog 2971

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Memcached客户端-XMemcached使用

一、 XMemcached 简介  XMemcached 是一个新 java memcached client 。也许你还不知道 memcached 是什么?可以先看看这里。简单来说, Memcached  是一个高性能的分布式内存对象的 key-value 缓存系统,用于动态 Web 应用以减轻数据库负载,现在也有很多人将它作为内存式数据库在使用, memcached 通过它的自定义协议

Java我人生的技术博客 3938

java memcached 压缩_基于java nio的memcached客户端——xmemcached

packagenet.rubyeye.xmemcached.test;importjava.util.ArrayList;importjava.util.List;importjava.util.Map;importjava.io.Serializable;importnet.rubyeye.xmemcached.XMemcachedClient;classNameimplementsSerial...

weixin_35343148的博客 152

XMemcached——一个新的开源Java memcached客户端

From: http://www.infoq.com/cn/news/2009/10/xmemcached-introduction   XMemcached是一个基于Java nio的memcached客户端。它线程安全,结构简单,支持所有的memcached文本协议和二进制协议,并且有比较优异的性能表现。它还支持一些高级特性,如JMX、动态增删节点、客户端统计以及nio连接池等。Inf...

liudaoru - 悟 167

memcached-java客户端xmemcached使用总结 & 与Spring 集成

1. 最近调研了下memcached,之前2篇博客简单得介绍了用法,现在做个总结就当调研结束,本博客将从以下几个方面进行总结, a. xmemcached简介 b. xmemcached的分布式 c. xmemcached支持的存储对象 d. xmemcached的容错性 e. xmemcached的性能测试     由于memcached可以与spring集成,所以本博客以和spri

小兵qwer的专栏 424
上一篇: memcached-java客户端xmemcached使用总结
下一篇: spring beans源码解读之--总结篇
javaPie
博客等级 码龄16年 1171粉丝 43原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值