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 articleId
groupNameグループに記事を追加srem group:groupName articleId
groupNameグループから記事を削除smove group:groupName1 groupName2 articleId
groupName 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
上から取得した記事詳細をループ取得