Redis
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> Redis

ServiceStack.Redis Không thể đọc truyền tải - BasicRedisClientManager

Bạn không nên giữ bất kỳ phiên bản nào của RedisClient hoặc IRedisTypedClient<BarSet> mà cả hai đều đóng gói Kết nối Redis TCP không an toàn theo luồng. Thay vào đó, bạn có thể giữ các bản sao đơn lẻ của IRedisClientsManager - mục đích của nó là cung cấp một Nhà máy khách hàng Redis an toàn theo luồng (như Nhóm kết nối DB).

Nếu bạn cũng đang sử dụng Dịch vụ ServiceStack, thì việc đăng ký các phần phụ thuộc trong IOC của ServiceStack sẽ dễ dàng hơn vì vậy IRedisClientsManager có thể được đưa vào giống như bất kỳ phần phụ thuộc nào khác, ví dụ:trong AppHost.Configure() :

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

Điều này sẽ cho phép bạn sử dụng base.Redis Thuộc tính RedisClient trong Dịch vụ ServiceStack của bạn, ví dụ:

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

Nếu bạn sử dụng base.Redis bạn không cần phải hủy bỏ RedisClient một cách rõ ràng vì nó đã được Dịch vụ xử lý tự động, tức là:

public class Service
{
    ...

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

Bạn cũng có thể đưa vào IRedisClientsManager vào các lớp của riêng bạn giống như bất kỳ phụ thuộc nào khác bằng cách sử dụng thuộc tính công khai hoặc đối số Khối mã lệnh, ví dụ:

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();
    }
}

Sau đó, bạn có thể đăng ký và tự động truy cập vào IOC của ServiceStack với:

container.RegisterAutoWired<RedisBarSetData>();

Sau đó, điều này sẽ cho phép bạn sử dụng nó như một phần phụ thuộc vào Dịch vụ của bạn:

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

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

Một giải pháp thay thế cho việc tạo lớp cơ sở của riêng bạn là kế thừa từ lớp cơ sở LogicBase đã có từ trước, lớp này đã có IRedisClientsManager thuộc tính và bảng định vị bên trên.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Memcache vs Bộ nhớ Java

  2. Sử dụng bộ Redis

  3. Lưu trữ ScaleGrid cho Redis ™ trên tài khoản AWS của riêng bạn

  4. redis vs hazelcast

  5. Cách tìm kiếm giá trị nội dung trong redis của BookSleeve