您好,登錄后才能下訂單哦!
活動中用到了Redis來存放用戶的獎勵票信息,原則上是一天一清,現在設置的是
expireAt(零點)
但是最近運營反饋有部分用戶有異常票,經過加log排查后發現指定在零點過期的key并沒有準時過期,從庫中在0點23秒的時候還能讀到數據,程序中用了簡單的exists(key) 判斷key是否存在,存在就取值。
這么想可能是主庫在零點過期了,但是沒有及時同步到從庫。在網上一看,有用戶遇到同樣的情況,Redis版本3。2之前的會存在這種情況,然后查看了一下我們的redis版本,發現是3.0 這也就難怪了,應該是遇到一樣的情況了;
所以解決方案是在exists(key) 判斷的同時加上對key 生存時間ttl的判斷,如果ttl是0就不取 了。
實驗:
然后我們實測了一下,現在主庫設置一個key的過期時間,然后在過期時間前后去讀從庫,發現直接從從庫讀取過期key的時候確實會有延遲,5到7秒不等。但是我們讀主庫,基本無延遲,到點就讀不到了。
總結:對于3.2之前的版本Redis會存在主從過期key同步失效的延時
相關鏈接:https://www.cnblogs.com/bridger/archive/2012/11/07/2758734.html
https://blog.csdn.net/u012538947/article/details/52540313
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。