首頁  >  文章  >  資料庫  >  redis資料一致性介紹

redis資料一致性介紹

尚
轉載
2020-04-05 09:06:292607瀏覽

所謂的redis資料一致性即當進行修改或儲存、刪除之後,redis中的資料也應該進行相應變化,不然使用者再次查詢的時候很可能會查詢出已經刪除過的髒資料。

redis資料一致性介紹

一、快取一致的必要性

還是接上篇來說,我們已經解決了redis快取穿透的問題(簡單解決方案,可以再次優化),但是使用redis的時候緩存一致性的問題我們也需要著重考慮,例如:保存了一個新用戶之後,就應該同時在redis緩存中也插入該條數據,更新了某條數據在緩存中也應該同步更新,而redis預設的做法是:當你不去設定的時候redis中存放的一值是你之前存放的數據,只有在重啟伺服器的時候數據才會同步,顯然這是非常不可取的,如果是這樣的話豈不是每時每刻都要重啟伺服器,那將是多麼大的災難!

二、業務場景

這裡我只說一個場景吧,其他場景都是一樣的處理辦法,場景為:假設我們將使用者資料放入到redis中,此時有新用戶註冊,在資料庫中會插入一條新數據,同時要在redis中也插入該條數據,以便於下次查詢的時候顯示最新數據。

我們先來看一下預設不使用任何處理的情況下redis是否會為我們做一致性操作,現在我的測試資料庫中有18條用戶數據,此時我們啟動系統後註冊插入第19條數據後看下redis中是否有19條。

redis資料一致性介紹

經過註冊之後我現在給資料庫中插入了第19條資料

redis資料一致性介紹

接著我們還是使用上篇提到的查詢快取的方法來獲取下所有信息,我們直接來看第最後一條,可以看到最後是潤青而不是十九,所以redis默認是沒有替我們做緩存一致操作的。

redis資料一致性介紹

三、快取一致性實作(方案1)

其實,要實現一致性很簡單,當我們在進行插入操作之後,我們把該條數據取出來同時保存到redis緩存中去,這樣再次查詢緩存的時候我們也可以看到新的數據,代碼如下:

redis資料一致性介紹

##需要注意的是:我這裡直接是呼叫JPA的findAll(),其實更好的做法是根據id去更新剛插入的那一條,這樣效率才高,這裡只是演示如何實現,接著再來註冊一條新數據,看看是否可以在快取中同時看到:新插入的資料id為29,我們來看下快取是否存在該條新資料

redis資料一致性介紹

redis資料一致性介紹

四、redis快取一致性實作(方案2)

定期清除redis中的數據,例如設定一個定時任務,每當一個小時的時候就會清除redis中的數據,也就是讓redis中的資料失效,然後再次儲存、刪除的時候之前的redis中的資料已經不存在,所以相當於將資料重新設定到redis中去,所以可以確保資料的一致性。

更多redis知識請關注

redis入門教學欄位。

以上是redis資料一致性介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:csdn.net。如有侵權,請聯絡admin@php.cn刪除