背景
因爲ES的近實時性 所以insert和update es的數據 在短時間可能查詢不到(1s左右)
參考上一篇博客https://www.cnblogs.com/ssskkk/p/15417053.html#_label0
這在開發中這是一個很頭疼的問題.
解決方案
1.數據insert update到es只後 把數據放在Redis裏面TTL設置5s
2.查詢數據的時候 先從redis查詢,如果redis沒有在查詢es
解釋 爲什麼TTL設置5s:因爲es的延遲理論上最多5s,
這裏設置redis緩存的目的 不是爲了提高查詢速度(因爲es的查詢本來就很快)
而是爲了解決es延遲
對比Redis做MySQL緩存
Redis作爲MySQL的緩存時 因爲需要保證緩存和DB的一致性 需要延遲雙刪 TTL一般8h
延遲雙刪: 1.刪除redis緩存 2.update MySQL db, 3.sleep 1s 後在刪除redis緩存
Redis作爲ES緩存 是爲了解決ES查詢延遲的問題, 在併發情況下的緩存一致性問題並沒有解決
因爲ES延遲和沒有事務的原因 所以Redis作爲ES緩存的時候 緩存一致性方案 並不建議使用延遲雙刪
可以採用分佈式鎖 解決Redis作爲ES緩存的一致性問題。