StackExchange.Redisで閲覧履歴を実装


開発メモ

StackExchange.Redisの使い方は下記参照
https://github.com/StackExchange/StackExchange.Redis

登録

        //RedisのDBを選択
        IDatabase db = RedisRepository.SelectCache(0);

        //キーを生成
        var key = "hoge";

        // スコア算出の為、Unixtimeを取得
        var unixSeconds = DateTimeOffset.Now.ToUnixTimeSeconds();
        // 経過秒数をスコアとして保存
        var score = (double)unixSeconds;

        //閲覧履歴の情報をソート済みセット型で登録
        db.SortedSetAdd(key, "りんご", score);

        //保持期間を設定する場合は下記(例:30日)
        db.KeyExpire(key, new TimeSpan(30, 0, 0, 0));

        //最大件数を設定する場合は下記
        var current = db.SortedSetRangeByScore(key);
        var maxCnt = 10;
        if (current.Count() > maxCnt)
        {
            //最下位のデータを削除
            db.SortedSetRemoveRangeByRank(key,0,0);
        }

取得

        //最新の閲覧順(スコアが高い順)に取得
        var list = db.SortedSetRangeByScore(key, order: Order.Descending);