zoukankan      html  css  js  c++  java
  • memcached使用

    简介:

    利用memcached可以实现缓存服务器,memcached利用TCP将缓存存储在其他服务器中,且memcached是利用内存看空间来保存缓存数据的,减少了不必要的磁盘I/O。另外,memcached在存储区中对于每一个key都维护一个过期时间,一旦达到这个过期时间,memcached便会自动删除该key,方便了我们的过期检查机制的实现,只需在保存缓存数据时指定过期时间即可。

    使用memcache的两种实现jar包:

    1、使用net.py.spymemcached:

      1)在pom.xml中添加对net.py.spymemcached的依赖;

    <dependency>
            <groupId>net.spy</groupId>
            <artifactId>spymemcached</artifactId>
            <version>2.11.0</version>
    </dependency>

    2)使用Demo:

     1 package spymemcached;
     2 
     3 import java.io.IOException;
     4 import java.io.Serializable;
     5 import java.net.InetSocketAddress;
     6 import java.util.Date;
     7 
     8 import net.spy.memcached.MemcachedClient;
     9 
    10 public class MemcacheUse {
    11         private static class MyData implements Serializable {
    12                private static final long serialVersionUID = 1L;
    13                private long d = new Date().getTime();
    14 
    15                public String toString() {
    16                       return "my data [" + d + "]" ;
    17               }
    18        }
    19 
    20         public static void main(String[] args) throws IOException {
    21               MyData myData = new MyData();
    22               MemcachedClient c = new MemcachedClient (new InetSocketAddress(
    23                             "127.0.0.1", 11211));
    24                // Store a value (async) for one hour
    25               c.set( "someKey", 3600, myData);
    26                // Retrieve a value (synchronously).
    27               MyData myObject = (MyData) c.get( "someKey");
    28               c.shutdown();
    29               System. out.println(myObject.toString());
    30        }
    31 }

    3)使用Demo,根据需求进行封装的类:

     1 package com.practice.cache;
     2 
     3 import java.io.IOException;
     4 import java.net.InetSocketAddress;
     5 
     6 import org.springframework.stereotype.Component;
     7 
     8 import net.spy.memcached.MemcachedClient;
     9 import net.spy.memcached.internal.OperationFuture;
    10 
    11 @Component
    12 public class PhonePtCache {
    13     private MemcachedClient client;
    14 
    15     private String hostName = "127.0.0.1";
    16     private int port = 11211;
    17     private int time = 3600;
    18 
    19     public PhonePtCache() {
    20         try {
    21             client = new MemcachedClient(new InetSocketAddress(hostName,port));
    22         } catch (IOException e) {
    23             e.printStackTrace();
    24         }
    25     }
    26 
    27     public OperationFuture<Boolean> set(String key, Object o) {
    28         return client.set(key, time, o);
    29     }
    30 
    31     public Object get(String key) {
    32         return client.get(key);
    33     }
    34 
    35     public OperationFuture<Boolean> delete(String key) {
    36         return client.delete(key);
    37     }
    38 }

    2、使用com.whalin.Memcached-Java-Client
    1)在pom.xml中添加依赖:

    <dependency>
           <groupId>com.whalin</groupId>
           <artifactId>Memcached-Java-Client</artifactId>
           <version>3.0.2</version>
    </dependency>

    2)使用Demo

     1 package spymemcached;
     2 
     3 import com.whalin.MemCached.MemCachedClient;
     4 import com.whalin.MemCached.SockIOPool;
     5 
     6 public class MemCacheInvoke {
     7     protected static MemCachedClient mcc = new MemCachedClient();
     8     static{
     9        // 设置缓存服务器列表,当使用分布式缓存的时,可以指定多个缓存服务器。(这里应该设置为多个不同的服务器)
    10         String[] servers =
    11                 {
    12                         "127.0.0.1:11211",
    13                 };
    14 
    15         // 设置服务器权重
    16         Integer[] weights = {3, 2};
    17         // 创建一个Socked连接池实例
    18         SockIOPool pool = SockIOPool. getInstance();
    19       // 向连接池设置服务器和权重
    20         pool.setServers(servers);
    21         pool.setWeights(weights);
    22         // set some TCP settings
    23         // disable nagle
    24         // set the read timeout to 3 secs
    25         // and don't set a connect timeout
    26         pool.setNagle( false);
    27         pool.setSocketTO(3000);
    28         pool.setSocketConnectTO(0);
    29        // initialize the connection pool
    30         pool.initialize();
    31     }
    32 
    33     public static void main(String[] args) {
    34         mcc.set("foo" , "This is a test String" );
    35         String bar = mcc.get("foo" ).toString();
    36         System. out.println(">>> " + bar);
    37     }
    38 }
  • 相关阅读:
    海量数据中,寻找最小的k个数。
    快速排序
    反转一个单链表,分别以迭代和递归的形式来实现
    N个大小不等的自然数排序,时间复杂度为O(n),空间复杂度为O(1)
    堆排序
    两个已经排好序的链表合并为一个有序链表
    字符串过滤空格、回车、tab
    求一个浮点数的连续子序列最大乘积 (2013 小米校园招聘笔试题)
    单向循环链表队列,从头开始报数,当报到m或者m的倍数的元素出列
    给一个数组,元素都是整数(有正数也有负数),寻找连续的元素相加之和为最大的序列。
  • 原文地址:https://www.cnblogs.com/-crazysnail/p/3923119.html
Copyright © 2011-2022 走看看