복붙노트

[REDIS] 이 ServiceStack 레디 스의 올바른 사용인가?

REDIS

이 ServiceStack 레디 스의 올바른 사용인가?

나는 (호스팅 서비스에서 그것을 사용) 레디 스에 새로운 오전 및 목록에 대한 시범 / 샌드 박스 데이터 스토리지로 사용하고 싶습니다.

나는 다음 코드 조각을 사용합니다. 그것은 작동 - 나를 위해. (- 1,000 목록 항목까지 적은 양의 데이터에 대한) 그러나 몇 가지 (최대 100)의 동시 사용자와 소규모 웹 사이트에 대한 유효한 (완전 불량이 아닌 연습) 사용입니까?

나는 정적 연결과 같은 정적의 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에서 메모리에 전체 목록을로드 오전 아니라 할 수 있는지의 여부는 레디 스 호스트에 내 연결을 준수하지 않는다고 좋은 기준을 사실 - 또는 내가 아니에요 다른 문제가 있음 인식.

감사

해결법

  1. ==============================

    1.[ "이름 : 현재의 항아리"] 당신이 실제로 스레드 안전하지 않은 RedisClient 연결에 대한 참조를 저장하고 실제로 당신은 PersonClient.Lists를 사용할 때. 그것의 확인은 멀티 스레드 웹 응용 프로그램의 GUI 또는 콘솔 응용 프로그램,하지만 이상적인에 있다면. 대부분의 경우 당신은 스레드 안전 연결 팩토리를 사용하고자하는 즉,

    [ "이름 : 현재의 항아리"] 당신이 실제로 스레드 안전하지 않은 RedisClient 연결에 대한 참조를 저장하고 실제로 당신은 PersonClient.Lists를 사용할 때. 그것의 확인은 멀티 스레드 웹 응용 프로그램의 GUI 또는 콘솔 응용 프로그램,하지만 이상적인에 있다면. 대부분의 경우 당신은 스레드 안전 연결 팩토리를 사용하고자하는 즉,

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

    어떤 매우 데이터베이스 연결 풀과 같은 역할을합니다. 그래서 당신이 좋아하는 RedisClient 작업에 액세스 할 때마다 :

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

    참고 :이 .as .GetTypedClient 에 대한 짧은 별칭입니다 redisManager에서 입력 한 클라이언트를 실행하는 또 다른 편리한 지름길입니다 :

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

    나는 보통이 RedisClient 연결을 유지하지 않도록 내 코드에 IRedisClientsManager 주위를 통과하는 것을 선호하지만 필요가있을 때마다 액세스 할 수 있습니다.

  2. ==============================

    2.여기 예제 프로젝트가있다

    여기 예제 프로젝트가있다

  3. from https://stackoverflow.com/questions/8094162/is-this-a-valid-usage-of-servicestack-redis by cc-by-sa and MIT license