精品欧美一区二区三区在线观看 _久久久久国色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)

日韩在线播放一区| 欧美在线|欧美| 精品国产乱码久久久久久丨区2区| 国产一级在线视频| 国产一区二区电影在线观看| 欧美色欧美亚洲另类二区| 美女黄色片网站| 搡老岳熟女国产熟妇| 日韩高清不卡一区| 欧美多人乱p欧美4p久久| 少妇光屁股影院| 成人51免费| 欧美色道久久88综合亚洲精品| 日韩精品不卡| 免费av一级片| 麻豆国产精品一区二区三区| 97精品国产aⅴ7777| 免费黄色国产视频| 夜色77av精品影院| 日韩精品一区二区三区三区免费 | 欧美成人综合| 亚洲欧美在线一区| 黄色激情在线观看| 四虎影视成人精品国库在线观看| 午夜精品成人在线| 国产一二三四五| 国产在线观看黄| va亚洲va日韩不卡在线观看| 成人免费在线视频网址| 337p粉嫩色噜噜噜大肥臀| 激情久久五月| 操日韩av在线电影| 国产调教在线观看| 综合国产视频| 亚洲国产中文字幕久久网| 亚洲黄色片免费| 国产成人亚洲一区二区三区| 精品欧美激情精品一区| 国产黄色激情视频| h网站久久久| 国产精品久久久久9999吃药| 欧美一区二区三区四区夜夜大片 | 中文字幕亚洲情99在线| 亚洲AV无码片久久精品| 欧美巨大xxxx| 亚洲国产天堂久久国产91| 下面一进一出好爽视频| 日韩三级成人| 欧美美女网站色| www.色偷偷.com| www.成人在线视频| 在线免费不卡视频| 免费男同深夜夜行网站| a日韩av网址| 色美美综合视频| 可以免费观看av毛片| 欧美成人性网| 色先锋久久av资源部| 999香蕉视频| 成人软件在线观看| 欧美性色黄大片| 久久婷婷国产91天堂综合精品| 日韩和的一区二在线| 日韩欧美精品网址| 男人插女人下面免费视频| 国产一区一一区高清不卡| 欧美主播一区二区三区美女| 亚洲一级片免费| 偷拍自拍亚洲| 日韩欧美高清dvd碟片| 乱码一区二区三区| 免费成人三级| 亚洲视频在线观看| 乱老熟女一区二区三区| 91精品99| 97不卡在线视频| 波多野结衣视频网址| 久久机这里只有精品| 亚洲影院高清在线| 天天躁日日躁狠狠躁伊人| 久久蜜臀中文字幕| 一区二区三区四区五区视频| h片在线免费观看| 亚洲va天堂va国产va久| 成年人黄色片视频| 性欧美video另类hd尤物| 日韩亚洲欧美在线观看| 熟妇人妻久久中文字幕| 九一国产精品| 欧美成人精品在线播放| 成人午夜视频精品一区| 日本在线不卡一区| av日韩免费电影| 日韩黄色影片| 亚洲精品视频观看| 国产a级一级片| 91精品福利观看| 亚洲精品国产精品自产a区红杏吧| 特级西西www444人体聚色 | 久久久久国产免费免费| 男女啪啪的视频| 日韩脚交footjobhd| 欧美日韩的一区二区| 日韩aaaaa| 99久久综合| 日本精品久久久久影院| 国产精品久久免费| 久久综合av免费| 国产成人三级视频| 欧美一区 二区 三区| 日韩一区二区三区在线视频| 国产精品毛片一区二区| 一区二区三区在线| 国产成人精品久久二区二区91| www.五月婷婷| 中文字幕一区在线观看| 337p粉嫩大胆噜噜噜鲁| 一本色道69色精品综合久久| 一区二区三区国产视频| 久热这里只有精品6| 国产一区91精品张津瑜| 视频一区视频二区视频| 久草免费在线视频| 日韩精品一区在线观看| 网爆门在线观看| 久久资源在线| 精品国产aⅴ麻豆| 天堂av在线电影| 欧美精品在欧美一区二区少妇| 在哪里可以看毛片| 樱桃成人精品视频在线播放| 5g影院天天爽成人免费下载| 亚洲免费视频一区二区三区| 色综合av在线| 丰满少妇在线观看资源站| 亚洲精品三级| 国产色综合一区二区三区| 99热国产在线| 51久久夜色精品国产麻豆| 免费看的黄色录像| 日本在线观看不卡视频| 日韩精品资源| 欧美成a人片在线观看久| 亚洲欧美日韩一区在线| 女人十八岁毛片| 91香蕉视频污| 久久精品午夜福利| 国产一区毛片| 国产精品久在线观看| 大地资源中文在线观看免费版| 欧美日韩在线看| 大黑人交xxx极品hd| 久久国产欧美| 色吧亚洲视频| 国产精品伦一区二区| 最近2019中文字幕mv免费看 | 亚洲黄色在线观看| 中日韩黄色大片| 久久综合久久综合亚洲| 国产一级片黄色| 狠狠做六月爱婷婷综合aⅴ| 国产成人精品久久亚洲高清不卡| 精品乱码一区二区三四区视频| 色猫猫国产区一区二在线视频| 欧美图片第一页| 秋霞国产午夜精品免费视频| 亚洲国产精品www| 日韩城人网站| 欧美极品欧美精品欧美视频 | 国产清纯在线一区二区www| 日韩精品无码一区二区三区免费 | 久久综合中文字幕| 成年人视频在线免费| 波多野结衣在线播放一区| 国产综合视频在线观看| 污污的网站在线看| 亚洲国产另类 国产精品国产免费| 在线观看日韩中文字幕| 亚洲国产成人自拍| 18深夜在线观看免费视频| 亚洲精品1区| 亚洲成人a**址| 午夜免费欧美电影| 欧美综合一区第一页| 日本在线观看网站| 精品国产区一区| 久久精品偷拍视频| 夜夜嗨av一区二区三区中文字幕 | 亚洲成人福利在线| 欧美精品一卡| 欧美一区激情视频在线观看| 国产精品3区| 91精品国产91久久久久久久久| 福利片在线看| 精品国产乱码久久久久久牛牛| www.久久精品视频| 亚洲卡通欧美制服中文| 30一40一50老女人毛片| 韩国一区二区视频| 久久久999视频| 亚洲精品久久久| 日本一区二区三不卡| 日韩欧美另类中文字幕| 国产不卡视频在线| 女人天堂av在线播放| 中文字幕亚洲专区| 性感美女福利视频| 欧美一二三在线| 艳妇乳肉豪妇荡乳av无码福利| 亚洲午夜久久久久中文字幕久| 国产7777777| 不卡一区二区三区四区| 天堂av2020| 水蜜桃久久夜色精品一区的特点 | 污污的网站在线看| 中文字幕日韩av电影| 午夜福利视频一区二区| 欧美二区乱c少妇| 国产91国语对白在线| 亚洲国产精品久久艾草纯爱| 中文字幕乱码av| 国产午夜一区二区三区| 捆绑裸体绳奴bdsm亚洲| 国产精品888| 亚洲无在线观看| 日韩av电影天堂| 欧美日韩在线不卡视频| 在线视频观看日韩| 今天免费高清在线观看国语| 日韩免费在线| 亚欧精品在线| 国产九一精品| 欧洲一区二区日韩在线视频观看免费 | 在线一区二区三区四区| 91精品国产乱码在线观看| 亚洲成av人片在www色猫咪| 国产va在线播放| 综合久久给合久久狠狠狠97色| 亚洲自拍偷拍图| 久久久亚洲午夜电影| 欧美做受喷浆在线观看| av欧美精品.com| 给我免费观看片在线电影的| 东方欧美亚洲色图在线| 国产精久久久久| 高清免费成人av| 免费黄色在线播放| 国产99久久久久| 亚洲av人人澡人人爽人人夜夜| 国产成人亚洲综合a∨婷婷| 91香蕉视频在线观看视频| 久久国产人妖系列| 午夜不卡福利视频| 国内精品久久久久影院薰衣草| 涩涩网站在线看| 韩国欧美国产1区| 男人操女人下面视频| 国产一区二区三区黄视频| 久久综合在线观看| 国产福利一区二区三区视频| 深夜做爰性大片蜜桃| 成人一道本在线| 亚洲图片综合网| 久久免费午夜影院| www.涩涩爱| 亚洲人成精品久久久久久| 丰满少妇高潮久久三区| 五月婷婷综合网| 免费看日批视频| 欧美日韩一级视频| 国产精品久久久久久久久久久久久久久久| 在线不卡中文字幕| 亚洲国产精彩视频| 国产视频久久久| 香蕉视频网站在线观看| 久久久国产精品亚洲一区| 在线观看小视频| 欧美诱惑福利视频| www.久久草.com| 精品欧美国产| 久久国产电影| 成年人午夜免费视频| 爽好多水快深点欧美视频| 成人在线短视频| 久久先锋影音av| 动漫性做爰视频| 欧美性猛xxx| 国产美女裸体无遮挡免费视频| 精品第一国产综合精品aⅴ| 国产三级视频在线| 久久99精品久久久久久青青91| 美女日韩欧美| 亚洲最大av网站| 欧美精美视频| 日韩精品一区二区在线视频| 视频在线观看一区| 亚洲麻豆一区二区三区| 国产精品久久毛片| 久久久黄色大片| 日韩一本二本av| 幼a在线观看| 97视频在线看| 4438全国亚洲精品观看视频| 日韩精品欧美专区| 亚洲欧美久久久| av在线免费观看不卡| 欧美国产一区视频在线观看| 久热这里只有精品在线| 欧美肥胖老妇做爰| 国产福利在线视频| 91精品国产91久久久久久| 精品一区视频| 欧美亚洲另类久久综合| 牛牛国产精品| 国产精品一区二区羞羞答答| jiyouzz国产精品久久| 搡老熟女老女人一区二区| 亚洲欧美日韩国产综合| 麻豆成人免费视频| 亚洲精品国产福利| 亚洲淫性视频| 性欧美办公室18xxxxhd| 一本色道69色精品综合久久| 亚洲国产婷婷香蕉久久久久久99| 中文国产一区| 日本少妇xxx| 国产日韩精品久久久| 亚洲天堂av片| 亚洲国产成人爱av在线播放| 亚洲91av| 国产在线久久久| 蜜桃a∨噜噜一区二区三区| 成人午夜免费在线| 国产精品一区二区x88av| 天天鲁一鲁摸一摸爽一爽| 色琪琪一区二区三区亚洲区| 国产视频一区二区三| 久久久999国产精品| 影视一区二区三区| 日韩高清在线播放| 亚洲狼人精品一区二区三区| 国产一级二级视频| 亚洲成人福利片| 成人av一区二区三区在线观看| 欧美成人一区二区三区电影| 国产精品4hu.www| 亚洲综合欧美日韩| 青草av.久久免费一区| 三上悠亚影音先锋| 欧美三级中文字| 福利片在线观看| 国产综合香蕉五月婷在线| 不卡一区综合视频| 99久久国产宗和精品1上映| 久久久一区二区| 中文字幕免费高清网站| 原创国产精品91| 日本一区二区电影| 欧美日韩视频在线一区二区观看视频| 香蕉久久国产| 亚洲第一成人网站| 欧美日精品一区视频| fc2在线中文字幕| 91视频国产精品| 一区二区三区网站| 国产九九九视频| 午夜天堂影视香蕉久久| 男人天堂综合网| 欧美亚洲国产另类| 国产成人黄色| 亚洲精品mv在线观看| 亚洲精品亚洲人成人网在线播放| 国产欧美第一页| 国精产品一区一区三区有限在线| 麻豆视频一区| 黄色片在线免费| 日韩一区欧美一区| 色综合久久久久久| 国产999在线观看| 精品大片一区二区| 日本中文字幕在线不卡| 亚洲国产aⅴ天堂久久| 国产成人天天5g影院在线观看| 国产精品视频久久久| 国产精品chinese| 91玉足脚交白嫩脚丫| 欧美日韩一区二区三区四区| 国产在线一区二区视频| 国产九色91| 免费精品99久久国产综合精品| 国产喷水在线观看| 国产视频精品xxxx| 91成人精品观看| 粗暴91大变态调教| 玉足女爽爽91| jizz在线观看| 国产精品99久久久久久久| 在线综合亚洲| 成人自拍小视频| 亚洲精品中文字幕女同|