Redisによるデータのソート

1487 ワード

大学の時にオンラインの解答システムをしたことがあって、受験生は規定の時間内に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:*

    参考記事:http://www.cnblogs.com/redcreen/archive/2011/02/15/1955226.html http://doc.redisfans.com/key/sort.html