成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

神奇的閃電緩存,帶系統飛

存儲 存儲軟件
緩存,在高并發的應用中,用的那是相當多。為什么?就因為I/O實在是慢!為了解決不同組件之間的速度差,大家都寄希望于加入一個中間層,期待產生一些魔幻的事。

[[348563]]

本文轉載自微信公眾號「小姐姐味道」,作者小姐姐味道 。轉載本文請聯系小姐姐味道公眾號。

 緩存,在高并發的應用中,用的那是相當多。為什么?就因為I/O實在是慢!為了解決不同組件之間的速度差,大家都寄希望于加入一個中間層,期待產生一些魔幻的事。

就拿Redis來說,火的就一塌糊涂,但中間會產生很多數據同步和數據一致性問題。有的牛x公司嫌煩,同時有錢,干脆干掉緩存后面的DB,直接把所有的數據放在了緩存上。哦不,這時候緩存已經不叫做緩存,應該叫做快存,因為它最終是要通過rdb落地的。

看到這里,先不要懷疑事實的正確性。有些公司的業務,確實不需要什么關系型數據庫,一個redis就能玩得轉。

閃電緩存場景

那閃電緩存又是何方神圣?實在不好意思, 這個名詞,是xjjdog自創的。

它用在下面的場景之中。

  • 一份數據,通過耗時的請求獲取之后,會在極短的時間內,再次被用到。
  • 業務對數據的一致性要求不是特別強烈,但也不是無底線忍受。
  • 內存的空間有限,不適合把大量數據放在內存中。
  • 數據的使用跨方法、跨代碼塊、甚至跨線程,只在時間概念上有關聯

這個時候,我們就可以將數據緩存一小段時間,盡量在下次的使用的時候,從這個時間極短的緩存中獲取。

srping-data-jpa背后的Hibernate一級緩存,在同一session下的數據被自動緩存,可以變相的看作是閃電緩存的一種實現。不過人家叫一級緩存,顯得更高大上一些,應用也更局限一些。

Java有多種緩存數據的方法,也有不同的生命周期。你可以想一下Session中的數據該如何存取,也可以想一下Java框架中各種各樣的Context,都是為了共享數據。

實現方式

閃電緩存,在Java中其實是有多種方式的,也有各種各樣的優缺點。

ThreadLocal

第一種方式,就是ThreadLocal。拿最常用的Spring來說,它事務管理的傳播機制,就是使用ThreadLocal實現的。

我可以在數據第一次被獲取的時候,使用set方法給它設置一個值。然后在最后一個操作用的使用,把它remove掉,變相的實現請求級別的閃電緩存。(為什么要remove?因為在線程池中可能會有復用的問題)

但由于ThreadLocal是線程私有的,所以它不能夠跨線程。上面Spring的事務傳播機制是不能夠跨線程的,我們的閃電緩存也是不能夠跨線程的。

這就決定了ThreadLocal的應用場景有限。但它還有其他兩個硬傷:

ThreadLocal的生命周期不好管理,何時生成,何時銷毀,都是問題

ThreadLocal使用自定義的ThreadLocalMap。它雖然叫Map,但卻沒有實現Map的接口,它使用開放尋址(遇到沖突,依次查找,直到空閑位置)的方法,這種方式是非常低效的

綜上三點,ThreadLocal這個方案其實并不太好。

普通Cache加過期時間

 

我們可以變換一下思路,使用普通的Cache,然后給它一個超短的緩存時間,那么就可以變相的實現閃電緩存的功能。

實現也是非常簡單的。比如,下面幾行代碼,就是一個對對象緩存了3秒的例子。

  1. LoadingCache<String, String> lc = CacheBuilder 
  2.       .newBuilder() 
  3.       .expireAfterWrite(3,TimeUnit.SECONDS) 
  4.       .build(new CacheLoader<String, String>() { 
  5.       @Override 
  6.       public String load(String key) throws Exception { 
  7.             return slowMethod(key); 
  8.       }}); 

在這3秒之間,系統中所有用到這個數據的請求,都可以達到復用的效果。這對于并發量非常高的應用來說,減少的請求量可能是數量級的。

我曾經就做過一個對用戶基本信息的優化,把對用戶服務的請求量從8w/s,降低到1000/s,一度讓負責服務的同學以為上游業務當機了。

End

技術通常都是工具,只有真正用到業務場景中,才有它的價值。閃電緩存這個概念本身沒有什么神奇的,它的最優實現方式,竟然是普通的Cache加極短的過期時間。

技術本身是件非常簡單的事情,但想到它應用的場景,卻是比較難的。事實上,我已經把這個概念做到了我的ppt上,展現的時候大家比較迷惑,以為是什么高大上的東西,我自熱也不好意思戳破這層窗戶紙,就讓它繼續神秘下去吧。

如今xjjdog告訴你了,要保密哦。

作者簡介:小姐姐味道 (xjjdog),一個不允許程序員走彎路的公眾號。聚焦基礎架構和Linux。十年架構,日百億流量,與你探討高并發世界,給你不一樣的味道。我的個人微信xjjdog0,歡迎添加好友,進一步交流。

責任編輯:武曉燕 來源: 小姐姐味道
相關推薦

2013-11-05 09:26:19

Mavericks系統OS X

2023-02-16 13:31:14

技術發展

2013-06-18 10:30:45

Disruptor框架

2010-07-29 11:59:18

InfraStruXu

2010-03-04 14:44:18

2021-07-08 15:30:21

AI 計算人工智能

2017-02-09 16:15:33

Erlang并發運算符

2011-07-25 09:03:09

Mac OS X Li

2023-01-01 13:31:47

模型訓練

2013-03-11 13:35:26

腕帶

2019-05-24 16:30:08

飛聊頭條字節跳動

2022-10-08 00:04:00

緩存架構限流

2023-10-07 09:59:16

gRPC通信

2023-06-05 07:31:43

2019-08-19 08:38:48

AI推薦系統

2014-02-10 17:10:38

Windows 8.1操作系統

2009-08-27 17:47:21

c#皮膚

2020-06-08 07:52:31

Python開發工具

2020-08-29 19:29:09

Pythonturtle

2018-11-15 12:12:31

Memcache緩存系統
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日韩欧美电影在线 | 性色网站 | 成人在线视频观看 | 日韩欧美在线一区 | 欧美freesex黑人又粗又大 | 欧美黄色片 | 久久国产精品久久久久久 | 中文字幕在线一区 | 97超在线视频 | 精品视频在线观看 | 久久久久久久97 | 亚洲欧美一区二区三区1000 | 欧美综合一区二区 | 国产精品一区二区三区四区 | 精品乱子伦一区二区三区 | 国产a区 | 国产一区免费 | 欧美激情综合色综合啪啪五月 | 午夜精品久久久久久久久久久久 | 天天干夜夜操 | 91精品国产综合久久久久久丝袜 | 日韩精品在线网站 | 国产精品久久久久久婷婷天堂 | 免费视频成人国产精品网站 | 亚洲a毛片 | 黑人精品欧美一区二区蜜桃 | 成人性视频在线 | 日韩欧美一区二区三区免费观看 | 91麻豆精品国产91久久久更新资源速度超快 | 亚洲欧美激情精品一区二区 | 久久精品二区亚洲w码 | 九色.com| 欧美高清一区 | 成人精品一区二区户外勾搭野战 | 日本高清不卡视频 | 理伦毛片 | 免费成人高清在线视频 | 一区二区三区精品视频 | 国产欧美在线观看 | 91精品国产综合久久久动漫日韩 | av免费网址 |