• 谷歌guava开源开发包中的LoadingCache系统缓存机制


    CacheController:
    package com..cache.googleCache;
    
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    
    @Controller
    public class CacheController {
    
        @RequestMapping("/setCache")
        public void setCache(HttpServletRequest request, HttpServletResponse response) throws IOException {
    
            String id = request.getParameter("id");
            String name = request.getParameter("name");
            LocalCache.setKey(id,name);
            response.getWriter().print(id+"----"+name);
        }
    
        @RequestMapping("/getCache")
        public void getCache(HttpServletRequest request, HttpServletResponse response) throws IOException {
    
            String id = request.getParameter("id");
            Object result = LocalCache.getKey(id);
            response.getWriter().print(result.toString());
        }
    
    
    }

    具体方法:

    package com..cache.googleCache;
    
    import com.google.common.cache.CacheBuilder;
    import com.google.common.cache.CacheLoader;
    import com.google.common.cache.LoadingCache;
    
    import java.util.concurrent.ExecutionException;
    import java.util.concurrent.TimeUnit;
    
    public class LocalCache {
    
        private static LoadingCache<String, Object> localCache = CacheBuilder.newBuilder()
                .initialCapacity(100)
                .maximumSize(10000)
                //指定时间内没有被创建覆盖,则指定时间过后,再次访问时,会去刷新该缓存,在新值没有到来之前,始终返回旧值
                .refreshAfterWrite(12, TimeUnit.HOURS)
                .build(new CacheLoader<String, Object>() {
                    @Override
                    public String load(String s) {
                        return "null";
                    }
                });
    
        /**
         * @param key   key
         * @param value value
         */
        public static void setKey(String key, Object value) {
            System.out.println("==> Cache.setKey [key:{} value:{}]"+ key+"----"+ value);
            localCache.put(key, value);for (String s:localCache.asMap().keySet()) {
                try {
                    System.err.println(s+"+++111::"+localCache.get(s));
                } catch (ExecutionException e) {
                    e.printStackTrace();
                }
            }
    
    
        }
    
        /**
         *
         * @param key key
         * @return Object
         */
        public static Object getKey(String key) {
            try {
                Object value = localCache.get(key);
                if ("null".equals(value)) {
                    return null;
                }
                return value;
            } catch (Exception e) {
                e.getMessage();
            }
            return null;
        }
    
    
    
    
    }

    模拟调用:

    public static void main(String[] args) {
            
    //         String url = "http://localhost:8080/setCache?id=1&name=li";
             String url = "http://localhost:8080/getCache?id=2";
             String res = getStringData(url, "");
             System.out.println(res);
        }
        
        public static String getStringData(String url,String data) {
            CloseableHttpClient httpClient = HttpClients.createDefault();
            HttpPost httpPost = new HttpPost(url);
            httpPost.setHeader("Content-Type", "application/x-www-form-urlencoded");
            try {
                httpPost.setEntity(new StringEntity(data));
                HttpResponse response = httpClient.execute(httpPost);
                String Str = EntityUtils
                        .toString(response.getEntity());
                return Str;
            } catch (Exception e) {
                e.printStackTrace();
                return null;
            }
        }
  • 相关阅读:
    Linux如何自动获取IP地址
    jq操作select集合
    UDP and TCP
    IPv6
    DHCP, NAT
    队列之顺序存储实现
    ARP, Fragmentation and Reassembly
    Classless Interdomain Routing (CIDR)
    Subnet Routing Examples
    Subnetting
  • 原文地址:https://www.cnblogs.com/lifan12589/p/14718540.html
Copyright © 2020-2023  润新知