欧美一区二区三区,国内熟女精品熟女A片视频小说,日本av网,小鲜肉男男GAY做受XXX网站

如何去學好java中的緩存?

錢琪琛2年前11瀏覽0評論

介紹

所謂緩存,就是將程序或系統經常要調用的對象存在內存中,一遍其使用時可以快速調用,不必再去創建新的重復的實例。這樣做可以減少系統開銷,提高系統效率。

緩存主要可分為二大類:

一、通過外部中間件緩存,如Redis,Memcached

二、通過系統內部的Map或者引入的第三方jar包來進行緩存,如GoogleGuavaCache

第一大類不會占用系統的內存,緩存的數據可以進行持久化,而第二類會占用系統的緩存,緩存的數據不能進行持久化,分享一下這兩大類的主要區別和應用場景

Redis

1.1數據庫

在Redis里,數據庫簡單的使用一個數字編號來進行辨認,默認數據庫的數字編號是0。如果你想切換到一個不同的數據庫,你可以使用select命令來實現。在命令行界面里鍵入select1,Redis應該會回復一條OK的信息,然后命令行界面里的提示符會變成類似redis127.0.0.1:6379[1]>這樣。如果你想切換回默認數據庫,只要在命令行界面鍵入即可

1.2命令、關鍵字和值

Redis不僅僅是一種簡單的關鍵字-值型存儲,從其核心概念來看,Redis的5種數據結構中的每一個都至少有一個關鍵字和一個值

關鍵字(Keys)是用來標識數據塊,值(Values)是關聯于關鍵字的實際值,可以是字符串、整數、序列化對象(使用JSON、XML或其他格式)

Redis命令的基本構成,如:setusers:leto"{name:leto,planet:dune,likes:[spice]}"

關鍵字和值的是Redis的基本概念,而get和set命令是對此最簡單的使用

1.3Redis查詢

對于Redis而言,關鍵字就是一切,而值是沒有任何意義。Redis不允許通過值來進行查詢

1.4存儲器和持久化

Redis是一種持久化的存儲器內存儲(in-memorypersistentstore)默認情況下,Redis會根據已變更的關鍵字數量來進行判斷,然后在磁盤里創建數據庫的快照(snapshot)。你可以對此進行設置,如果X個關鍵字已變更,那么每隔Y秒存儲數據庫一次。默認情況下,如果1000個或更多的關鍵字已變更,Redis會每隔60秒存儲數據庫;而如果9個或更少的關鍵字已變更,Redis會每隔15分鐘存儲數據庫

至于存儲器,Redis會將所有數據都保留在存儲器中。顯而易見,運行Redis具有不低的成本:因為RAM仍然是最昂貴的服務器硬件部件

1.5小結

關鍵字(Keys)是用于標識一段數據的一個字符串

值(Values)是一段任意的字節序列,Redis不會關注它們實質上是什么

Redis展示了(也實現了)5種專門的數據結構

上面的幾點使得Redis快速而且容易使用,但要知道Redis并不適用于所有的應用場景

GoogleGuavaCache

GuavaCache與ConcurrentMap很相似,但也不完全一樣。最基本的區別是ConcurrentMap會一直保存所有添加的元素,直到顯式地移除。相對地,GuavaCache為了限制內存占用,通常都設定為自動回收元素。在某些場景下,盡管LoadingCache不回收元素,它也是很有用的,因為它會自動加載緩存。

通常來說,GuavaCache適用于:

  • 你愿意消耗一些內存空間來提升速度。
  • 你預料到某些鍵會被查詢一次以上。
  • 緩存中存放的數據總量不會超出內存容量。(GuavaCache是單個應用運行時的本地緩存。它不把數據存放到文件或外部服務器。如果這不符合你的需求,請嘗試Memcached這類工具)

如果你的場景符合上述的每一條,GuavaCache就適合你。并且自定義你的緩存才是最有趣的部分。

注:如果你不需要Cache中的特性,使用ConcurrentHashMap有更好的內存效率——但Cache的大多數特性都很難基于舊有的ConcurrentMap復制,甚至根本不可能做到。