1

SS.Redis でページングを行う方法を見つけようとしています。

var todos = RedisManager.ExecAs<Todo>(r => r.GetLatestFromRecentsList(skip,take));

r.GetAll()0 を返しますが、もののリストを返すため、データベースが空ではないと確信しています。これを行う正しい方法は何ですか?


編集: コードは次のとおりです。

public class ToDoRepository : IToDoRepository
{

    public IRedisClientsManager RedisManager { get; set; }  //Injected by IOC

    public Todo GetById(long id) {
        return RedisManager.ExecAs<Todo>(r => r.GetById(id));
    }
    public IList<Todo> GetAll() {
        return RedisManager.ExecAs<Todo>(r => r.GetAll());
    }
    public IList<Todo> GetAll(int from, int to) {
        var todos = RedisManager.ExecAs<Todo>(r => r.GetLatestFromRecentsList(from,to));
        return todos;
    }
    public Todo NewOrUpdate(Todo todo) {
        RedisManager.ExecAs<Todo>(r =>
        {
            if (todo.Id == default(long)) todo.Id = r.GetNextSequence(); //Get next id for new todos 
            r.Store(todo); //save new or update
        });
        return todo;
    }
    public void DeleteById(long id) {
        RedisManager.ExecAs<Todo>(r => r.DeleteById(id));
    }
    public void DeleteAll() {
        RedisManager.ExecAs<Todo>(r => r.DeleteAll());
    }
}
4

1 に答える 1

2

コードが表示されないので、エンティティを追加するときに [Recents] リストを維持していないと思います。GetLatestFromRecentsListのテスト ケースは次のとおりです。

var redisAnswers = Redis.As<Answer>();

redisAnswers.StoreAll(q1Answers);
q1Answers.ForEach(redisAnswers.AddToRecentsList); //Adds to the Recents List

var latest3Answers = redisAnswers.GetLatestFromRecentsList(0, 3);

var i = q1Answers.Count;
var expectedAnswers = new List<Answer>
{
    q1Answers[--i], q1Answers[--i], q1Answers[--i],
};

Assert.That(expectedAnswers.EquivalentTo(latest3Answers));

Redis StackOverflowは、Recents リスト機能を使用して、追加された最新の質問を表示する別の例です。新しい質問が作成されるたびにAddToRecentsListを呼び出して、最近の質問のリストを維持します。

于 2012-10-07T16:02:52.123 に答える