Redis進行資料排序
阿新 • • 發佈:2019-01-31
大學時做過一個線上答題系統,考生在規定時間內作答100道不定項選擇題,考試結束後系統自動算分。
因為很多考生同時作答,答案都需要往同一個資料表裡面寫,會因為資料表被鎖而導致響應速度過慢。因此,採用Redis快取技術將考生的答題資訊記錄在伺服器記憶體中,在考試結束之後再寫入到MySQL資料庫中。
當時在設計系統時,計算考生分數並排名是在資料寫入到MySQL資料庫之後進行的。也就是說需要將考生的答題記錄取出,然後計算分數,再將考生的分數寫入到資料庫中。這樣設計有一個較大的問題就是,只能在考試結束之後,才能結算的到考生的分數,而不能在考試過程中,實時的顯示考生的成績和排名。
前一段時間在面試中,接觸到了Redis排序的知識,發現可以對原來的系統進行如下優化:
- 在Redis中為每一位考生維護考號和成績的鍵值對,每當考生修改答案時,也隨之修改考生的成績。
- 通過Redis的排序操作,獲得按照考生成績排序的考號結果,進行顯示。
lpush users 201101
lpush users 201102
lpush users 201103
set grades:201101 98
set grades:201102 79
set grades:201103 89
sort users by grades:*
sort users by grades:* get grades:*