利用Redis緩存解決ES查詢延遲的問題

背景

因爲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緩存的一致性問題。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章