1. 程式人生 > >用SpringAOP結合MemCached做快取的設想

用SpringAOP結合MemCached做快取的設想

方案一:
  • 給DAO的方法上加SpringAOP的Around通知,決定資料從資料庫獲得還是從快取獲得。
  • 自定義一個@MemEntity,對此Dao所有按主鍵和唯一鍵查詢進行快取。
  • 規則:查詢的方法名getByField 更新updateByField 刪除deleteByField
  • 其他的方法查詢不作快取,其他的方法更新和刪除操作會重新整理所有以該類開頭的keys
  • 記錄快取時用“類名_方法名_引數值”作為Key,刪除快取時,刪除所有的“類名_*_引數值”的key對應的快取
方案二: 1,給DAO的方法上加SpringAOP的Around通知,決定資料從資料庫獲得還是從快取獲得。 2,自定義兩個Annotation,@Cache和@Flush,分別加在DAO的查詢和修改的方法上。 3,Around通知函式內用反射獲取上述的@cache和@Flush,代表是記錄快取,還是刪除快取。 4,記錄快取時用“類名+方法名+引數的hashcode”作為Key,刪除快取時,刪除所有的同類名開頭的key對應的快取。 5,Memcached不支援遍歷key,所以採用資料庫表記錄key,假設:tbl_memcached(key,exp_date)。 6,定義一個時鐘,定期刪除tbl_memcached的過期記錄(刪除資料庫記錄前,刪除快取)。 7,記錄快取時,同時存入一條記錄到tbl_memcached表。 8,刪除快取是依據tbl_memcache表的key來進行,並且要刪除tbl_memcached表的相關記錄。   備註:
a:表tbl_memcache(key,exp_date)儲存所有memcache的key

 

1:對單個記錄進行快取(查詢條件是主鍵或唯一鍵):
 儲存規則 key  value 
 主鍵  class_method_id_value  search result
 唯一鍵  class_method_unique_value class_method_id_value 

儲存規則:儲存到memcache和tbl_memcache中
更新規則:只更新上面的主鍵的search result,並更新key為class_select*的資料  

2:只對常用並且基本不會修改的列表查詢進行快取(經常更新不建議快取)

儲存規則:key為class_method_hashcode,儲存到memcache和tbl_memcache中 更新規則:從tbl_memcahce表中查詢所有滿足“class_”字首keys,在memcache和tbl_memcache中刪除
  3:對
查詢條件不是主鍵或唯一鍵 的資料不進行快取

4:更新條件不是主鍵和唯一鍵的操作(避免這樣的操作)

更新規則:從tbl_memcahce表中查詢所有滿足“class_”字首keys,在memcache和tbl_memcache中刪除   5:可以對某一個查詢結果進行快取,key為自定義,任何其他的更新都不會影響它,只有你明確刪除此快取   關於tbl_memcahce:

定義一個時鐘,定期刪除tbl_memcached的過期記錄(刪除資料庫記錄前,刪除快取)

預設快取時間為1個小時,對錶的掃描根據時間段進行分配
防止tbl_memcache過於龐大,可以進行分表,規則如下: 1:幾個表放入一個tbl_memcache_n 2:根據演算法可以任意累加