用SpringAOP結合MemCached做快取的設想
阿新 • • 發佈:2018-11-21
方案一:
a:表tbl_memcache(key,exp_date)儲存所有memcache的key
儲存規則:儲存到memcache和tbl_memcache中
更新規則:只更新上面的主鍵的search result,並更新key為class_select*的資料
3:對
查詢條件不是主鍵或唯一鍵
的資料不進行快取
防止tbl_memcache過於龐大,可以進行分表,規則如下: 1:幾個表放入一個tbl_memcache_n 2:根據演算法可以任意累加
- 給DAO的方法上加SpringAOP的Around通知,決定資料從資料庫獲得還是從快取獲得。
- 自定義一個@MemEntity,對此Dao所有按主鍵和唯一鍵查詢進行快取。
- 規則:查詢的方法名getByField 更新updateByField 刪除deleteByField
- 其他的方法查詢不作快取,其他的方法更新和刪除操作會重新整理所有以該類開頭的keys
- 記錄快取時用“類名_方法名_引數值”作為Key,刪除快取時,刪除所有的“類名_*_引數值”的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:根據演算法可以任意累加