Redis
 sql >> база данни >  >> NoSQL >> Redis

ServiceStack.Redis Не може да се чете транспорт - BasicRedisClientManager

Не трябва да държите никакви единични екземпляри на RedisClient или IRedisTypedClient<BarSet> който и двете капсулира небезопасна за нишки Redis TCP връзка. Вместо това можете да задържите единични екземпляри на IRedisClientsManager - което е целта му да осигури безопасен за нишки Redis Client Factory (като DB Connection Pool).

Ако използвате и ServiceStack Services, е по-лесно да регистрирате зависимости в IOC на ServiceStack, така че IRedisClientsManager може да се инжектира като всяка друга зависимост, например в AppHost.Configure() :

container.Register<IRedisClientsManager>(c =>
    new BasicRedisClientManager("[email protected]:6379"));

Това ще ви позволи да използвате base.Redis Свойството RedisClient във вашите ServiceStack Services, напр.:

public class JmaSetsService : Service
{
    public object Get(JmaSets request)
    {
        var redisBarSets = base.Redis.As<BarSet>();
        return redisBarSets.Lists[instument_key].GetAll();
    }
}

Ако използвате base.Redis не е нужно изрично да изхвърляте RedisClient, тъй като той вече е автоматично изхвърлен от Услугата, т.е.:

public class Service
{
    ...

    public virtual void Dispose()
    {
        if (redis != null)
            redis.Dispose();
        ...
    }
}

Можете също да инжектирате IRedisClientsManager във вашите собствени класове като всяка друга зависимост, използваща публично свойство или аргумент на конструктора, напр.:

public class RedisBarSetData
{
    public virtual IRedisClientsManager RedisManager { get; set; }

    private IRedisClient redis;
    public virtual IRedisClient Redis
    {
        get { return redis ?? (redis = RedisManager.GetClient()); }
    }

    public override void Dispose()
    {
        if (redis != null)
            redis.Dispose();
    }

    public List<BarSet> getData(BarSets data)
    {
        setKeys(data);  // instrument_key is set in here
        return Redis.As<BarSet>().Lists[instrument_key].GetAll();
    }
}

Което след това можете да регистрирате и автоматично да свържете в IOC на ServiceStack с:

container.RegisterAutoWired<RedisBarSetData>();

Което след това ще ви позволи да го използвате като зависимост във вашите Услуги:

public class JmaSetsService : Service
{
    public RedisBarSetData RedisBarSetData { get; set; }

    public object Get(JmaSets request)
    {
        return RedisBarSetData.getData(new BarSets(request));
    }
}

Алтернатива на създаването на свой собствен базов клас е да наследите от вече съществуващия базов клас LogicBase, който вече има IRedisClientsManager собственост и над шаблона.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Защо Травис не успява да се свърже, използва Redis cache_store при внедряване в Heroku?

  2. Защо 500MB Redis dump.rdb файл отнема около 5,0GB памет?

  3. Mac(os x):Има ли начин да инсталирате САМО redis-cli?

  4. Грешка jemalloc/jemalloc.h:Няма такъв файл или директория при създаване на Redis

  5. Запазване на потребителска сесия в Redis с ASP.NET Core в Azure