数据库是 MySQL,Redis 主要用来读缓存,现需要检测数据和缓存之间的一致性,确保从缓存读取的数据是最新的。该怎么确保这一点呢?
走同样的路,发现不同的人生
1,實例化模型的時候,如查詢的時候,可以將表的記錄總數,最後修改時間等資訊保存到模型的一個方法中 2,查詢資料時,將查詢條件與表格的信息,合併計算一個快取key,並寫入快取 3,獲取快取時,將查詢條件與表的信息,合併計算一個緩存key,查詢緩存,如果表的數據有修改,則緩存無法命中,則獲取最新的結果並保存為新的key
在實際開發中,用的是MVC框架,在模型的CUD操作中,會自動刪除與該模型關聯的所有快取key,從而確保資料的一致性。 這對框架的使用規範要求比較高,需要依模型快取規範去註冊快取。
目前比較典型的應用,就是CRUD以後,列表的快取資料如何更新。
查緩存,沒有就將資料庫裡的資料dump到快取。 有資料更新的話,如果對資料一致性不是很高的,那麼給快取裡的資料一個ttl就行了;如果對資料一致性要求很高的話,更新資料的時候把快取清一下。
可以為每個key增加一個字段,表示版本資訊。更新資料的更新版本號,查詢redis的時候用key+版本號。
1,實例化模型的時候,如查詢的時候,可以將表的記錄總數,最後修改時間等資訊保存到模型的一個方法中
2,查詢資料時,將查詢條件與表格的信息,合併計算一個快取key,並寫入快取
3,獲取快取時,將查詢條件與表的信息,合併計算一個緩存key,查詢緩存,如果表的數據有修改,則緩存無法命中,則獲取最新的結果並保存為新的key
在實際開發中,用的是MVC框架,在模型的CUD操作中,會自動刪除與該模型關聯的所有快取key,從而確保資料的一致性。
這對框架的使用規範要求比較高,需要依模型快取規範去註冊快取。
目前比較典型的應用,就是CRUD以後,列表的快取資料如何更新。
查緩存,沒有就將資料庫裡的資料dump到快取。
有資料更新的話,如果對資料一致性不是很高的,那麼給快取裡的資料一個ttl就行了;如果對資料一致性要求很高的話,更新資料的時候把快取清一下。
可以為每個key增加一個字段,表示版本資訊。更新資料的更新版本號,查詢redis的時候用key+版本號。