13 使用快取

2021-08-01 06:54:30 字數 1967 閱讀 8526

13.使用cache

為了建立高效的系統,有里會需要快取資料。play有乙個cache庫,在分布式環境中使用memcached

。如果沒有配置memcached,play將使用標準的快取來儲存資料到jvm heap堆中。在jvm應用程式裡快取資料打破了play創造的「什麼都不共享」的原則:你不能在多個伺服器上執行同一應用程式,否則不能保證應用行為的一致性。每個應用例項將擁有不同的資料備份。

清晰理解快取約定非常重要:當把資料放入快取時,就不能保證資料永久存在。事實上不能這樣做,快取非常快,只在記憶體裡存在(並沒有進行持久化)。

因此使用快取最好的用途就是資料不需要進行修改的情況

public static void allproducts()

render(products);

}the cache api

快取api由play.cache.cache類提供,這個類包含了許多用於從快取設定、替換、獲取資料的方法。參考memcached文件以了解每個方法的用法。

示例:public static void showproduct(string id)

render(product);

}public static void addproduct(string name, int price)

public static void editproduct(string id, string name,int price)

public static void deleteproduct(string id)

有一些方法是以safe字首開頭的方法,比如safedelete, safeset。而標準方法是非阻塞式的,比如:

cache.delete("product_" + id);

在繼續之前如果需要確定是否真的把物件刪除了,就可以使用safedelete方法:

cache.safedelete("product_" + id);

這個方法是阻塞式的,並且會返回乙個boolean值來確定是否真的把物件刪除了。因此,從快取中刪除物件的完整模式應該是這樣的:

if(!cache.safedelete("product_" + id))

...注意:這些方法會導致呼叫中斷,安全方法會慢慢的順著執行下去,一般情況下,只要確實需要的時候才使用這些方法。

同時要注意,當expiration == "0s" (0秒)時, 真正的中止時間可能與快取執行的時間不同。

不要把session當成快取!

如果使用框架帶來的記憶體式的session來作快取, 你就會發現play只允許很小的字串資料可以存入http session,這裡不應該是快取應用程式資料的地方!

如果你已經習慣了這樣做:

...// 之後進行請求

在play裡可以用其他方式實現相同效果:

cache.set(session.getid(), products);

...//接下來的請求為:

listproducts = cache.get(session.getid(),list.class)

在這裡,我們使用唯一的uuid來為每個使用者在快取裡儲存唯一資訊。請記住,這和session物件不同,快取並不繫結任何特定的使用者!

配置mcached

如果需要允許真正的memcached實現,就需在 memcached configuration

定義守護位址 memcached.host configuration

Mybatis學習(13)查詢快取之一級快取

設定快取的目的就是為了提高查詢訪問速度。mybatis根據緩衝區的作用域劃分為兩種 一級查詢快取和二級查詢快取 基於perpetualcache 的 hashmap本地快取,其儲存作用域為session,當session flush或close之後,該session中的所有 cache 就將清空。也...

JCS1 3開源的快取架構

jcs是jakarta的專案turbine的子專案。它是乙個複合式的緩衝工具。可以將物件緩衝到記憶體 硬碟。具有緩衝物件時間過期設定。還可以通過jcs構建具有緩衝的分布式構架,以實現高效能的應用。對於一些需要頻繁訪問而每訪問一次都非常消耗資源的物件,可以臨時存放在緩衝區中,這樣可以提高服務的效能。而...

mybatis 13一級快取

mybatis的快取,包括一級快取和二級快取,一級快取是預設使用的。二級快取需要手動開啟。一級快取指的就是sqlsession,在sqlsession中有乙個資料區域,是map結構,這個區域就是一級快取區域。一級快取中的key是由sql語句 條件 statement等資訊組成乙個唯一值。一級快取中的...