Redis実戦ノート-文章投票システム

1515 ワード

  • 投稿記事incr articleId新たに増分された記事idを取得hmset article:id記事の詳細をhashに設定sadd voted:id posterId投稿記事のユーザIdを投票済みの集合に入れるzadd time: now article:id記事のIdを時間順の整列集合に加える、スコアは【現在タイムスタンプ】zadd score: now+BASE_VOTE_SCORE article:idスコア順の整然とした集合に文章を入れて【現在タイムスタンプ+投票数*1票当たりの点数】とすることで、過去の文章よりも最新の文章の基礎点数が高く、上位にランクインすることができます.
  • 記事グループsadd group:groupName articleIdgroupNameグループに記事を追加srem group:groupName articleIdgroupNameグループから記事を削除smove group:groupName1 groupName2 articleIdgroupName 1からgroupName 2へ記事を移動
  • 文章投票sadd voted:articleId userId投票されたユーザidを投票された集合に加え、0を返すと、そのユーザがすでにその文章に投票したことを示し、下の操作は継続しないzscore time: article:articleId被投票された文章の発表時間を取得し、発表時間が所定時間より早ければ投票を許さない、下段操作は継続しないhincr article:articleId votes文章詳細のvotesを加算zincrby score: articleId BASE_VOTE_SCOREランキングの文章に基礎投票分を加算
  • フロントエンド表示zrevrange time: 0 10時系列で、1ページ目(上位10件)の記事Idを取得zrevrange score: 0 10投票数系列で、1ページ目(上位10件)の記事Idを取得zinterstore time:groupName 2 group:groupName time: aggregate maxグループグループグループグループgroupNameの記事を時系列でtime:groupName秩序集合に格納zinterstore score:groupName 2 group:groupName score: aggregate maxグループgroupNameの記事を採点系列で並べ替え、score:groupName秩序集合に格納中zrevrange time:groupName 0 10時間順に、1ページ目(前10条)記事Idを取得zrevrange score:groupName 0 10分数順に、1ページ目(前10)記事Idを取得hgetall article:articleId上から取得した記事詳細をループ取得