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等資訊組成乙個唯一值。一級快取中的...