當前位置:首頁 » 文件管理 » 緩存對象

緩存對象

發布時間: 2023-02-27 18:53:50

java幾種緩存技術介紹說明

1、TreeCache / JBossCache

JBossCache是一個復制的事務處理緩存,它允許你緩存企業級應用數據來更好的改善性能。緩存數據被自動復制,讓你輕松進行JBoss伺服器之間 的集群工作。JBossCache能夠通過JBoss應用服務或其他J2EE容器來運行一個MBean服務,當然,它也能獨立運行。

2、WhirlyCache

Whirlycache是一個快速的、可配置的、存在於內存中的對象的緩存。它能夠通過緩存對象來加快網站或應用程序的速度,否則就必須通過查詢資料庫或其他代價較高的處理程序來建立。

3、SwarmCache

SwarmCache是一個簡單且有效的分布式緩存,它使用IP multicast與同一個區域網的其他主機進行通訊,是特別為集群和數據驅動web應用程序而設計的。SwarmCache能夠讓典型的讀操作大大超過寫操作的這類應用提供更好的性能支持。

4、JCache

JCache是個開源程序,正在努力成為JSR-107開源規范,JSR-107規范已經很多年沒改變了。這個版本仍然是構建在最初的功能定義上。

5、ShiftOne

ShiftOne Java Object Cache是一個執行一系列嚴格的對象緩存策略的Java lib,就像一個輕量級的配置緩存工作狀態的框架。

② android 中怎麼緩存一個對象

寫入文件上也可以,你在sd卡上創建一個文件,寫入其中也是可以的,這樣還可以保存好數據。如果寫入緩存中也不是不行但是如果忽然關機啥的程序退出,或者有其他程序調用緩存的就可能出錯,所以如果不是必須的話不要直接存入緩存中。還有就是如果數據十分小就幾個字元串或數字啥的我想你也知道應該放到sharedpreferences中。

③ Spring如何配置資料庫查詢緩存/對象緩存EHCache

  1. 在ehcache.xml文件中配置查詢緩存參數,ehcache.xml文件配置如下:

<ehcache>

<!--diskStore元素,配置一個目錄,這個目錄用來存放數據,
也就是說,如果EhCache需要把數據寫入磁碟,將會寫到這個目錄下-->
<diskStorepath="java.io.tmpdir"/>

<defaultCache
maxElementsInMemory="10000"
eternal="false"
overflowToDisk="true"
timeToIdleSeconds="120"
timeToLiveSeconds="120"
diskPersistent="false"
="120"/>

<cachename="ehcacheName"
maxElementsInMemory="3000"
eternal="false"
timeToIdleSeconds="3600"
timeToLiveSeconds="36000"
overflowToDisk="true"
/>
</ehcache>

2. spring的配置

第一步:給指定方法配置緩存/src/main/resources/applicationContext-resources.xml

<ehcache:proxyid="userGroupServiceProxy"refId="userGroupService">
<ehcache:cachingcacheName="cash15Min"methodName=""/>
<ehcache:cachingcacheName="cash15Min"methodName=""/>
<ehcache:cachingcacheName="cash15Min"methodName="selectuserGroupById"/>
</ehcache:proxy>

配置參數的含義如下:
id:唯一標識符
refId:需要配置緩存的service或者controller
cacheName:緩存名稱
methodName:需要緩存的方法,這個方法必須是shoppingHomeService中的方法
第二步:在控制器中注入依賴的緩存userGroupServiceProxy /src/main/webapp/WEB-INF/dispatcher-servlet.xml

<beanid="PFController"class="com.java.mall.controller.PFController">
<propertyname="userService"ref="userService"></property>
<propertyname="userGroupService"ref="userGroupServiceProxy"></property>
</bean>

同時需要在實體類中注入依賴,提供setter方法,

;
publicvoidsetuserGroupService(){
this.userGroupService=userGroupService;

④ 談談RecyclerView中的緩存

Android深入理解RecyclerView的緩存機制

RecyclerView在項目中的使用已經很普遍了,可以說是項目中最高頻使用的一個控制項了。除了布局靈活性、豐富的動畫,RecyclerView還有優秀的緩存機制,本文嘗試通過源碼深入了解一下RecyclerView中的緩存機制。

RecyclerView做性能優化要說復雜也復雜,比如說布局優化,緩存,預載入等等。其優化的點很多,在這些看似獨立的點之間,其實存在一個樞紐:Adapter。因為所有的ViewHolder的創建和內容的綁定都需要經過Adaper的兩個函數onCreateViewHolder和onBindViewHolder。

因此我們性能優化的本質就是要減少這兩個函數的調用時間和調用的次數。如果我們想對RecyclerView做性能優化,必須清楚的了解到我們的每一步操作背後,onCreateViewHolder和onBindViewHolder調用了多少次。因此,了解RecyclerView的緩存機制是RecyclerView性能優化的基礎。

為了理解緩存的應用場景,本文首先會簡單介紹一下RecyclerView的繪制原理,然後再分析其緩存實現原理。

RecyclerView滑動時會觸發onTouchEvent#onMove,回收及復用ViewHolder在這里就會開始。我們知道設置RecyclerView時需要設置LayoutManager,LayoutManager負責RecyclerView的布局,包含對ItemView的獲取與復用。以LinearLayoutManager為例,當RecyclerView重新布局時會依次執行下面幾個方法:

上述的整個調用鏈:onLayoutChildren()->fill()->layoutChunk()->next()->getViewForPosition(),getViewForPosition()即是是從RecyclerView的回收機制實現類Recycler中獲取合適的View,下面主要就來從看這個Recycler#getViewForPosition()的實現。

上述邏輯用流程圖表示:

RecyclerView在Recyler裡面實現ViewHolder的緩存,Recycler裡面的實現緩存的主要包含以下5個對象:

public final class Recycler {

final ArrayList mAttachedScrap = new ArrayList<>();

ArrayList mChangedScrap = null;

RecyclerView在設計的時候講上述5個緩存對象分為了3級。每次創建ViewHolder的時候,會按照優先順序依次查詢緩存創建ViewHolder。每次講ViewHolder緩存到Recycler緩存的時候,也會按照優先順序依次緩存進去。三級緩存分別是:

使用自定義ViewCacheExtension後,view離屏後再回來不會走onBindViewHolder()方法。

holder.setIsRecyclable(false),這樣的話每次都會走onCreateViewHolder()和onBindViewHolder()方法

1.提前初始化viewHolder,放到緩存池中

viewPool.putRecycledView(adapter.onCreateViewHolder(recyclerView, 1))

2.提前初始化view,在onCreateViewHolder的時候去取view

3.自定義ViewCacheExtension

4.適當的增加cacheSize

4.公用緩存池,比如多個viewPager+fragment場景使用,或者全局單利緩存池,感覺用戶不大。

有2中做法有值

第一種

第二種

不會,因為prefetch(GapWorker中的一個方法)之後mViewCacheMax會變成mRequestedCacheMax + extraCache

有2種方式可以讓緩存失效

第一種

recyclerView.setItemViewCacheSize(-1)

第二種

recyclerView.setItemViewCacheSize(0)

layoutManager.isItemPrefetchEnabled = false

設置不緩存後,來回滑動讓view進入屏幕離開屏幕,viewHolder的item時會多次走onBindViewHolder()方法。

⑤ MySQL表對象緩存

表對象緩存: 是將某個表對象的字典信息(定義內容)緩存到內存中,用來提高對表的訪問效率。某個表被訪問過一次後,只要伺服器沒有關閉且表定義沒有被修改的條件下,訪問該表,只需要從內存中找到這個已經緩存起來的對象做相應操作即可。

用戶訪問表時,表對象在緩存時: 通過HASH演算法找到TABLE_SHARE,然後每個線程構造各自的實例化TABLE即可。

用戶訪問表時,當表沒有被緩存的情況下: 第一需要打開表,首先需要從系統表中將這個表的所有信息都讀入內存中,這些信息包括表名、庫名、所有列信息、列的默認值、表的字元集、對應的frm文件路徑、所屬存儲引擎、主鍵等,將這些信息構造一個TABLE_SHARE結構體,這個結構體是表對象緩存的第一層,所有用戶共享訪問且為靜態不允許修改,它是緩存在table_def_cache(由參數table_definition_cache控制)中的。

而真正與用戶打交道的是TABLE_SHARE的衍生品,它對應結構體為TABLE,在被使用前需要將TABLE_SHARE結構體實例化TABLE才能被使用,由每個線程構造各自的實例化TABLE即可。(實例化的TABLE由table_open_cache及table_open_cache_instance控制)

注意1: DDL操作時會將所有instance鎖住,而DML操作時instance之間互不幹擾。

(DDL statements still require a lock on the entire cache, but such statements are much less frequent than DML statements.)

注意2: 一個線程中如果打開表過多,超過一個instance限制的大小時,是不能跨instance緩存的

(instance大小:table_open_cache / table_open_cache_instances)

表緩存涉及其他參數: 通過下面參數判斷table_open_cache參數設置是否合理

table_open_cache_hit:能夠從table open cache的free list中找到table則為命中,+1

table_open_cache_misses:與table_open_cache_hit相反,如果找不到則需要重新實例化則+1,通常發生在初始化第一次載入表或超過table_open_cache的設置被淘汰後需要重新實例化。

table_open_cache_overflow:table cache淘汰的數量,每次淘汰+1

opened_tables:已經打開的表數。如果Opened_tables很大,那麼table_open_cache的值可能太小了。

open_tables:總的instance (table cache)的總數

熱點內容
硬碟緩存什麼用 發布:2025-05-19 22:09:41 瀏覽:11
蘋果筆記本配置好的有哪些 發布:2025-05-19 22:08:57 瀏覽:14
oracle存儲過程中批量修改表結構 發布:2025-05-19 22:02:22 瀏覽:520
php支付寶sdk 發布:2025-05-19 22:01:06 瀏覽:602
雲掃墓源碼 發布:2025-05-19 22:00:32 瀏覽:593
executeupdatesql 發布:2025-05-19 21:58:36 瀏覽:217
中國電信如何轉人工密碼是多少 發布:2025-05-19 21:44:54 瀏覽:209
求階乘的c語言 發布:2025-05-19 21:15:20 瀏覽:965
話嘮安卓哪裡下載 發布:2025-05-19 20:27:04 瀏覽:166
瘋狂android講義光碟 發布:2025-05-19 20:12:31 瀏覽:153