精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

面試官:你是如何使用JDK來實(shí)現(xiàn)自己的緩存(支持高并發(fā))?

開發(fā) 架構(gòu) 后端
只是在單線程或者多線程間作數(shù)據(jù)緩存,其實(shí)完全可以自己手寫一個(gè)緩存工具。下面就來簡單實(shí)現(xiàn)一個(gè)這樣的工具。

[[267393]]

需求分析

項(xiàng)目中經(jīng)常會(huì)遇到這種場景:一份數(shù)據(jù)需要在多處共享,有些數(shù)據(jù)還有時(shí)效性,過期自動(dòng)失效。比如手機(jī)驗(yàn)證碼,發(fā)送之后需要緩存起來,然后處于安全性考慮,一般還要設(shè)置有效期,到期自動(dòng)失效。我們怎么實(shí)現(xiàn)這樣的功能呢?

解決方案

  1.  使用現(xiàn)有的緩存技術(shù)框架,比如redis,ehcache。優(yōu)點(diǎn):成熟,穩(wěn)定,功能強(qiáng)大;缺點(diǎn),項(xiàng)目需要引入對應(yīng)的框架,不夠輕量。
  2.  如果不考慮分布式,只是在單線程或者多線程間作數(shù)據(jù)緩存,其實(shí)完全可以自己手寫一個(gè)緩存工具。下面就來簡單實(shí)現(xiàn)一個(gè)這樣的工具。

先上代碼: 

  1. import java.util.HashMap;  
  2. import java.util.Map;  
  3. import java.util.concurrent.*;  
  4. /**  
  5.  * @Author: lixk  
  6.  * @Date: 2018/5/9 15:03  
  7.  * @Description: 簡單的內(nèi)存緩存工具類  
  8.  */  
  9. public class Cache {  
  10.  //鍵值對集合  
  11.  private final static Map<String, Entity> map = new HashMap<>();  
  12.  //定時(shí)器線程池,用于清除過期緩存  
  13.  private final static ScheduledExecutorService executor = Executors.newSingleThreadScheduledExecutor();  
  14.  /**  
  15.  * 添加緩存  
  16.  *  
  17.  * @param key 鍵  
  18.  * @param data 值  
  19.  */  
  20.  public synchronized static void put(String key, Object data) {  
  21.  Cache.put(key, data, 0);  
  22.  }  
  23.  /**  
  24.  * 添加緩存  
  25.  *  
  26.  * @param key 鍵  
  27.  * @param data 值  
  28.  * @param expire 過期時(shí)間,單位:毫秒, 0表示***長  
  29.  */  
  30.  public synchronized static void put(String key, Object data, long expire) {  
  31.  //清除原鍵值對  
  32.  Cache.remove(key);  
  33.  //設(shè)置過期時(shí)間  
  34.  if (expire > 0) {  
  35.  Future future = executor.schedule(new Runnable() {  
  36.  @Override  
  37.  public void run() {  
  38.  //過期后清除該鍵值對  
  39.  synchronized (Cache.class) {  
  40.  map.remove(key);  
  41.  }  
  42.  }  
  43.  }, expire, TimeUnit.MILLISECONDS);  
  44.  map.put(key, new Entity(data, future));  
  45.  } else {  
  46.  //不設(shè)置過期時(shí)間  
  47.  map.put(key, new Entity(data, null));  
  48.  }  
  49.  }  
  50.  /**  
  51.  * 讀取緩存  
  52.  *  
  53.  * @param key 鍵  
  54.  * @return  
  55.  */  
  56.  public synchronized static Object get(String key) {  
  57.  Entity entity = map.get(key);  
  58.  return entity == null ? null : entity.getValue();  
  59.  }  
  60.  /**  
  61.  * 讀取緩存  
  62.  *  
  63.  * @param key 鍵  
  64.  * * @param clazz 值類型  
  65.  * @return  
  66.  */  
  67.  public synchronized static <T> T get(String key, Class<T> clazz) {  
  68.  return clazz.cast(Cache.get(key));  
  69.  }  
  70.  /**  
  71.  * 清除緩存  
  72.  *  
  73.  * @param key  
  74.  * @return  
  75.  */  
  76.  public synchronized static Object remove(String key) {  
  77.  //清除原緩存數(shù)據(jù)  
  78.  Entity entity = map.remove(key);  
  79.  if (entity == null) return null;  
  80.  //清除原鍵值對定時(shí)器  
  81.  Future future = entity.getFuture();  
  82.  if (future != null) future.cancel(true);  
  83.  return entity.getValue();  
  84.  }  
  85.  /**  
  86.  * 查詢當(dāng)前緩存的鍵值對數(shù)量  
  87.  *  
  88.  * @return  
  89.  */  
  90.  public synchronized static int size() {  
  91.  return map.size();  
  92.  }  
  93.  /**  
  94.  * 緩存實(shí)體類  
  95.  */  
  96.  private static class Entity {  
  97.  //鍵值對的value  
  98.  private Object value;  
  99.  //定時(shí)器Future   
  100.  private Future future;  
  101.  public Entity(Object value, Future future) {  
  102.  this.value = value;  
  103.  this.future = future;  
  104.  }  
  105.  /**  
  106.  * 獲取值  
  107.  *  
  108.  * @return  
  109.  */  
  110.  public Object getValue() {  
  111.  return value;  
  112.  }  
  113.  /**  
  114.  * 獲取Future對象  
  115.  *  
  116.  * @return  
  117.  */  
  118.  public Future getFuture() {  
  119.  return future;  
  120.  }  
  121.  }  

本工具類主要采用 HashMap+定時(shí)器線程池 實(shí)現(xiàn),map 用于存儲(chǔ)鍵值對數(shù)據(jù),map的value是 Cache 的內(nèi)部類對象 Entity,Entity 包含 value 和該鍵值對的生命周期定時(shí)器 Future。Cache 類對外只提供了 put(key, value), put(key, value, expire), get(key), get(key, class), remove(key), size()幾個(gè)同步方法。

當(dāng)添加鍵值對數(shù)據(jù)的時(shí)候,首先會(huì)調(diào)用remove()方法,清除掉原來相同 key 的數(shù)據(jù),并取消對應(yīng)的定時(shí)清除任務(wù),然后添加新數(shù)據(jù)到 map 中,并且,如果設(shè)置了有效時(shí)間,則添加對應(yīng)的定時(shí)清除任務(wù)到定時(shí)器線程池。

測試 

  1. import java.util.concurrent.ExecutionException;  
  2. import java.util.concurrent.ExecutorService;  
  3. import java.util.concurrent.Executors;  
  4. import java.util.concurrent.Future;  
  5. /**  
  6.  * @Author: lixk  
  7.  * @Date: 2018/5/9 16:40  
  8.  * @Description: 緩存工具類測試  
  9.  */  
  10. public class CacheTest {  
  11.  /**  
  12.  * 測試  
  13.  *  
  14.  * @param args  
  15.  */  
  16.  public static void main(String[] args) throws InterruptedException, ExecutionException {  
  17.  String key = "id" 
  18.  //不設(shè)置過期時(shí)間  
  19.  System.out.println("***********不設(shè)置過期時(shí)間**********");  
  20.  Cache.put(key, 123);  
  21.  System.out.println("key:" + key + ", value:" + Cache.get(key));  
  22.  System.out.println("key:" + key + ", value:" + Cache.remove(key));  
  23.  System.out.println("key:" + key + ", value:" + Cache.get(key));  
  24.  //設(shè)置過期時(shí)間  
  25.  System.out.println("  
  26. ***********設(shè)置過期時(shí)間**********");  
  27.  Cache.put(key, "123456", 1000);  
  28.  System.out.println("key:" + key + ", value:" + Cache.get(key));  
  29.  Thread.sleep(2000);  
  30.  System.out.println("key:" + key + ", value:" + Cache.get(key));  
  31.  /******************并發(fā)性能測試************/  
  32.  System.out.println("  
  33. ***********并發(fā)性能測試************");  
  34.  //創(chuàng)建有10個(gè)線程的線程池,將1000000次操作分10次添加到線程池  
  35.  ExecutorService executorService = Executors.newFixedThreadPool(10);  
  36.  Future[] futures = new Future[10];  
  37.  /********添加********/  
  38.  {  
  39.  long start = System.currentTimeMillis();  
  40.  for (int j = 0; j < 10; j++) {  
  41.  futures[j] = executorService.submit(() -> {  
  42.  for (int i = 0; i < 100000; i++) {  
  43.  Cache.put(Thread.currentThread().getId() + key + i, i, 300000);  
  44.  }  
  45.  });  
  46.  }  
  47.  //等待全部線程執(zhí)行完成,打印執(zhí)行時(shí)間  
  48.  for (Future future : futures) {  
  49.  future.get();  
  50.  }  
  51.  System.out.printf("添加耗時(shí):%dms  
  52. ", System.currentTimeMillis() - start);  
  53.  }  
  54.  /********查詢********/  
  55.  {  
  56.  long start = System.currentTimeMillis();  
  57.  for (int j = 0; j < 10; j++) {  
  58.  futures[j] = executorService.submit(() -> {  
  59.  for (int i = 0; i < 100000; i++) {  
  60.  Cache.get(Thread.currentThread().getId() + key + i);  
  61.  }  
  62.  });  
  63.  }  
  64.  //等待全部線程執(zhí)行完成,打印執(zhí)行時(shí)間  
  65.  for (Future future : futures) {  
  66.  future.get();  
  67.  }  
  68.  System.out.printf("查詢耗時(shí):%dms  
  69. ", System.currentTimeMillis() - start);  
  70.  }  
  71.  System.out.println("當(dāng)前緩存容量:" + Cache.size());  
  72.  }  

測試結(jié)果: 

  1. ***********不設(shè)置過期時(shí)間**********  
  2. key:id, value:123  
  3. key:id, value:123  
  4. key:id, value:null  
  5. ***********設(shè)置過期時(shí)間**********  
  6. key:id, value:123456  
  7. key:id, value:null  
  8. ***********并發(fā)性能測試************  
  9. 添加耗時(shí):2313ms  
  10. 查詢耗時(shí):335ms  
  11. 當(dāng)前緩存容量:1000000 

測試程序使用有10個(gè)線程的線程池來模擬并發(fā),總共執(zhí)行一百萬次添加和查詢操作,時(shí)間大約都在兩秒多,表現(xiàn)還不錯(cuò),每秒40萬讀寫并發(fā)應(yīng)該還是可以滿足大多數(shù)高并發(fā)場景的^_^ 

責(zé)任編輯:龐桂玉 來源: 今日頭條
相關(guān)推薦

2025-03-10 11:48:22

項(xiàng)目服務(wù)設(shè)計(jì)

2024-02-20 14:10:55

系統(tǒng)緩存冗余

2025-02-26 12:19:52

2015-08-13 10:29:12

面試面試官

2024-01-19 14:03:59

Redis緩存系統(tǒng)Spring

2024-05-11 15:11:44

系統(tǒng)軟件部署

2021-05-08 08:35:33

Webpack前端性能

2023-10-28 09:13:32

系統(tǒng)面試官架構(gòu)

2024-12-25 15:44:15

2024-02-04 10:08:34

2025-09-23 02:15:00

2023-12-19 09:24:22

LinuxBIOSUEFI

2022-02-14 20:53:33

開源庫開發(fā)代碼

2024-11-08 13:36:09

2023-12-06 13:38:00

Redis緩存穿透緩存擊穿

2024-03-12 10:44:42

2024-10-15 10:00:06

2020-10-26 07:07:50

線程安全框架

2020-10-15 06:26:24

高并發(fā)場景冰河

2025-09-22 08:26:37

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

天堂аⅴ在线地址8| 国产日韩中文在线| 久久久亚洲国产精品| 国产三级第一页| 亚洲国产精品久久久天堂| 欧美性极品xxxx做受| 久久久久久99| 国产精品高潮呻吟AV无码| 黄色日韩在线| 在线视频精品一| www.com黄色片| 操喷在线视频| 国产欧美日韩不卡免费| 成人午夜高潮视频| 日本一级一片免费视频| 欧美一级一片| 欧美精品亚洲二区| 亚洲 欧美 综合 另类 中字| 男人的天堂在线| 国产精品一区专区| 国产精品久久久久av| 日本黄色片免费观看| 蜜桃国内精品久久久久软件9| 精品视频在线免费| av免费看网址| 国产天堂在线| 91视频国产资源| 91人成网站www| 久久久999久久久| 中国女人久久久| 在线免费看av不卡| 亚洲乱码国产乱码精品精大量| 国产美女视频一区二区 | 久久一区二区三区四区| 91精品久久久久久久久久另类| 国产又爽又黄的视频| 欧美一区成人| 最近2019年手机中文字幕 | av手机免费看| 美女国产一区二区| 欧美中文字幕第一页| 精品无码久久久久久久久| 久久在线免费| 一区二区国产精品视频| 一起草在线视频| 高清日韩中文字幕| 精品久久人人做人人爽| 日本中文字幕在线不卡| 电影一区二区三区久久免费观看| 欧美日韩一区二区不卡| 激情综合网俺也去| 性国裸体高清亚洲| 欧美日韩精品在线| 各处沟厕大尺度偷拍女厕嘘嘘| 操人在线观看| 亚洲午夜一区二区三区| 激情视频小说图片| 国产福利视频在线| 亚洲免费伊人电影| 亚洲国产精品女人| av毛片在线看| 亚洲午夜在线电影| 国产原创中文在线观看| 国产免费拔擦拔擦8x高清在线人| 一区二区三区不卡视频| 欧美中日韩在线| 国产理论在线| 日本丶国产丶欧美色综合| 国产精品成人久久电影| 午夜影院在线播放| 欧美午夜精品一区| 91 视频免费观看| 免费一级欧美片在线观看网站| 精品人伦一区二区三区蜜桃免费 | 人人艹在线视频| 手机亚洲手机国产手机日韩| xx视频.9999.com| 欧美日韩免费做爰视频| 国内精品福利| 国产97在线观看| 亚洲综合精品视频| 丁香一区二区三区| 欧美色欧美亚洲另类七区| 日韩三级影院| 亚洲综合精品久久| 日韩毛片在线免费看| 亚洲精品成a人ⅴ香蕉片| 91精品欧美福利在线观看| 91精品又粗又猛又爽| 秋霞蜜臀av久久电影网免费| 亚洲人成电影网站色…| a一级免费视频| 亚洲免费观看| 国产日韩欧美另类| 深爱激情五月婷婷| 国产精品免费免费| www.亚洲成人网| 国产v日韩v欧美v| 欧美精品色综合| 成人影视免费观看| 第一sis亚洲原创| 欧美高清视频在线观看| 中文字幕xxxx| 成人手机电影网| 日韩精品久久一区二区三区| av免费看在线| 色狠狠综合天天综合综合| 亚洲天堂伊人网| 日韩有码一区| 欧美国产日本在线| 日本午夜小视频| 琪琪一区二区三区| 精品日韩欧美| 超碰电影在线播放| 欧美午夜电影一区| 国产sm在线观看| 水蜜桃精品av一区二区| 57pao精品| 国产77777| 亚洲人成网站色在线观看| 国产美女三级视频| ccyy激情综合| 久久亚洲综合国产精品99麻豆精品福利 | 丝袜诱惑制服诱惑色一区在线观看 | 免费一级肉体全黄毛片| 免费精品视频| 国产精品视频免费观看| 97caopron在线视频| 欧美色图片你懂的| xxxx日本黄色| 快she精品国产999| 国产精品美女黄网| 牛牛精品视频在线| 欧美美女激情18p| 男人操女人动态图| 国产精品亚洲欧美| 国产综合动作在线观看| 亚洲无线看天堂av| 日韩一区二区在线免费观看| 午夜剧场免费在线观看| 精品一区二区三区视频 | 人人妻人人澡人人爽人人精品| 欧美fxxxxxx另类| 国产精品九九九| 福利视频在线看| 在线视频一区二区免费| 国产精品免费无码| 亚洲综合精品| 欧美日韩一区二区三区在线观看免 | 中文字幕av一区二区三区高| 欧美污视频网站| 国产a久久精品一区二区三区 | 9l亚洲国产成人精品一区二三| 超在线视频97| 精品国产无码一区二区三区| 亚洲精品国产成人久久av盗摄| 香蕉视频xxx| 国模大胆一区二区三区| 国产一区不卡在线观看| 日韩深夜视频| 国产亚洲成av人片在线观看桃| 在线永久看片免费的视频| 国产欧美日韩视频在线观看| 午夜一区二区视频| 国产一区二区三区四区三区四| 国产精品国模大尺度私拍| 欧美巨大xxxx做受沙滩| 精品三级在线看| 自拍偷拍欧美亚洲| 国产午夜亚洲精品羞羞网站| 91精品无人成人www| 亚洲一区二区三区无吗| 国产精品福利视频| 成人美女视频| 久久久成人精品视频| 亚洲国产综合网| 亚洲人成精品久久久久久| 人妻 丝袜美腿 中文字幕| 色999国产精品| 成人免费视频网站| 国产不卡人人| 日韩在线视频国产| 国精产品一品二品国精品69xx| 黑丝美女久久久| a级大片在线观看| 美腿丝袜一区二区三区| 青少年xxxxx性开放hg| 国产成人精品亚洲线观看| 91精品国产91久久久久久不卡| 国产系列在线观看| 91精品国产福利| 日韩中文字幕在线观看视频| 国产欧美综合在线观看第十页| 宇都宫紫苑在线播放| 亚洲专区一区| 日韩一级免费看| 欧美老女人另类| 4444kk亚洲人成电影在线| 欧美成人影院| 欧美精品一区二区免费| 国产高清一区在线观看| 精品国一区二区三区| 久久久精品视频网站| 国产日产欧产精品推荐色| 国产精品一区二区在线免费观看| 日韩电影一二三区| 18黄暴禁片在线观看| 首页国产精品| 日本视频精品一区| 国产欧美三级电影| 成人精品网站在线观看| 国产综合色区在线观看| 欧美成人中文字幕在线| 999国产在线视频| 精品久久国产老人久久综合| 一区二区视频网| 欧美丝袜第一区| 国产午夜精品无码一区二区| 日韩美女视频一区二区 | 热久久这里只有精品| 日本孕妇大胆孕交无码| 深夜成人在线观看| 国产特级黄色片| 欧美视频完全免费看| 亚洲视频 欧美视频| 夜夜嗨av一区二区三区中文字幕| 国产黄a三级三级| 国产人伦精品一区二区| 国产又黄又粗又猛又爽的视频 | 欧美激情论坛| 777久久精品| 国产一区视频在线播放| 国产亚洲一区二区手机在线观看 | 另类视频一区二区三区| 国产日韩在线看片| 欧美成人三级| 国产美女久久精品| 97精品国产综合久久久动漫日韩| 日韩av免费在线观看| 中文在线免费视频| 日本精品性网站在线观看| 黄在线观看免费网站ktv| 久久久久久高潮国产精品视| 国产原厂视频在线观看| 色黄久久久久久| 国产最新视频在线观看| 亚洲国产成人精品久久| 国产后入清纯学生妹| 日韩亚洲欧美在线观看| 亚洲高清视频在线播放| 91精品国产综合久久香蕉麻豆 | 亚洲精品在线不卡| 青青草视频免费在线观看| 日韩av在线网站| 欧美在线观看在线观看| 亚洲欧洲日韩国产| 成人免费在线视频网| 亚洲欧洲在线视频| porn视频在线观看| 久久精品最新地址| 视频在线观看入口黄最新永久免费国产| 久久不射电影网| 成人黄色网址| 久久久久久久久久av| 无码小电影在线观看网站免费| 国产ts人妖一区二区三区 | 欧美午夜丰满在线18影院| 天堂网视频在线| 色婷婷国产精品综合在线观看| 波多野结衣在线观看一区| 欧美日韩免费一区二区三区| 国产精品一品二区三区的使用体验| 日韩亚洲国产中文字幕欧美| 色呦呦免费观看| 精品一区二区电影| 在线国产91| 欧美激情成人在线视频| 樱花草涩涩www在线播放| 国产精品偷伦免费视频观看的| 日本在线一区二区三区| 高清国产在线一区| 亚洲精品456| 中文字幕欧美日韩一区二区| 欧美日韩一区自拍 | 国产在线播放一区三区四| 色姑娘综合天天| 成人不卡免费av| 国产视频不卡在线| 中文字幕亚洲一区二区va在线| 国产精品 欧美激情| 色综合咪咪久久| aaa一区二区三区| 亚洲精品国产suv| av在线第一页| 午夜精品一区二区三区视频免费看| 国产免费不卡| 国产精品久久久久久久久久久久| 成人在线视频区| 欧美精品免费观看二区| 免费视频亚洲| 欧美在线观看视频免费| 亚洲伦理一区| 伦伦影院午夜理论片| 久久精品人人做人人爽97 | 日本韩国一区二区三区| 99视频免费看| 中国china体内裑精亚洲片| 亚洲国产精品精华素| 国产精品xxx视频| 国产精品自在| 国产91视频一区| 六月丁香综合在线视频| 中文在线观看免费视频| 亚洲视频免费在线观看| 日韩精品一区二区亚洲av观看| 亚洲成人黄色网| caoporn免费在线| 国产成人在线视频| 日韩激情网站| 男人c女人视频| 国产伦精品一区二区三区免费迷| 在线不卡av电影| 激情成人中文字幕| 亚洲专区在线播放| 国产亚洲精品一区二区| 狠狠操一区二区三区| 福利视频一区二区三区| 一区二区中文| 国产永久免费网站| 久久久久9999亚洲精品| 久久久国产高清| 日韩精品一区二区三区老鸭窝 | 欧美日韩成人网| 成人在线视频国产| 欧美一级黄色录像片| 精品一区二区影视| 亚洲一二三在线观看| 欧美午夜影院一区| 亚洲图片88| 国产福利视频一区| 韩日一区二区三区| 成人一级片网站| 亚洲国产精品av| 国产精品视频一区在线观看| 亚洲精品有码在线| 欧美电影网站| 视频一区亚洲 | 色综合久久久无码中文字幕波多| 亚洲女爱视频在线| 性猛交xxxx乱大交孕妇印度| 欧美人在线视频| 视频国产精品| 日韩成人午夜影院| 九九九久久久精品| 福利所第一导航| 欧美精品自拍偷拍| 高清av在线| 亚洲一区二区三区777| 狠狠88综合久久久久综合网| 久久久久成人精品无码中文字幕| 亚洲国产视频直播| 污污网站免费在线观看| 欧美专区日韩视频| 色喇叭免费久久综合网| wwwxxx色| 一本久久综合亚洲鲁鲁五月天| 黄色美女网站在线观看| 国产中文日韩欧美| 国语精品一区| b站大片免费直播| 欧美精品三级在线观看| 精品精品导航| 欧美污视频久久久| 国产一区二区在线免费观看| 久久久无码精品亚洲国产| 亚洲精品自在久久| 伊人久久大香线蕉综合影院首页| 欧美h视频在线观看| 福利一区二区在线| 亚洲成人av网址| 丝袜情趣国产精品| 日韩成人综合网| www.日本在线播放| 国产清纯美女被跳蛋高潮一区二区久久w | 91美女主播在线视频| 欧美综合77777色婷婷| 激情欧美一区二区| 免费日韩在线视频| 亚洲系列中文字幕| 亚洲精品v亚洲精品v日韩精品| 精品免费久久久久久久| 91麻豆精东视频| 国产suv一区二区| 午夜精品国产精品大乳美女| 国产欧美高清视频在线| 国产xxx在线观看| 欧美日韩综合在线| 日本乱码一区二区三区不卡| 视频一区二区精品| 成人av网站大全|