11

私はRedisを初めて使用し(ホステッドサービスで使用)、リストのデモンストレーション/サンドボックスデータストレージとして使用したいと考えています。

次のコードを使用します。わたしにはできる。しかし、複数(最大100)の同時ユーザー(少量のデータ-最大1000のリストアイテム)を持つ小さなWebサイトの有効な(そして完全に悪い習慣ではない)使用法ですか?

私は静的接続と静的redisclientタイプリストを次のように使用しています:

public class MyApp
{   
    private static ServiceStack.Redis.RedisClient redisClient;

    public static IList<Person> Persons;
    public static IRedisTypedClient<Person> PersonClient;

    static MyApp()
    {
        redisClient = new RedisClient("nnn.redistogo.com", nnn) { Password = "nnn" };
        PersonClient = redisClient.GetTypedClient<Person>();
        Persons = PersonClient.Lists["urn:names:current"];
    }
}

これを行うと、非常に使いやすい永続データのリストが得られます。これは、アプリケーションの基本ブロックを構築/デモンストレーションするときにまさに必要なものです。

foreach (var person in MyApp.Persons) ...

新しい人を追加する:

MyApp.Persons.Add(new Person { Id = MyApp.PersonClient.GetNextSequence(), Name = "My Name" });

私の懸念は(現在)appstartで完全なリストをメモリにロードしているという事実ではなく、redisホストへの接続が適切な基準に準拠していない可能性、または私がそうではない他の問題がある可能性ですに気づいています。

ありがとう

4

2 に答える 2

16

実際に使用するときPersonClient.Lists["urn:names:current"]は、スレッドセーフではないRedisClient接続への参照を実際に保存しています。GUIまたはコンソールアプリであれば問題ありませんが、マルチスレッドWebアプリでは理想的ではありません。ほとんどのシナリオでは、スレッドセーフな接続ファクトリを使用する必要があります。

var redisManager = new PooledRedisClientManager("localhost:6379");

これは、データベース接続プールのように機能します。したがって、RedisClientにアクセスするときはいつでも、次のように機能します。

using (var redis = redisManager.GetClient())
{
    var allItems = redis.As<Person>().Lists["urn:names:current"].GetAll();
}

注:は 、redisManagerから型付きクライアントを実行するためのもう1つの便利なショートカット.As<T>の短いエイリアスです。.GetTypedClient<T>

var allItems = redisManager.ExecAs<Person>(r => r.Lists["urn:names:current"].GetAll());

私は通常IRedisClientsManager、RedisClient接続を保持しないようにコードを渡すことを好みますが、必要なときにいつでもアクセスできます。

于 2011-11-11T15:54:40.553 に答える
0

ここにサンプルプロジェクトがあります

于 2014-03-19T18:15:04.843 に答える