public async Task <TValue> GetAsync <TKey, TValue>(RedisStoreKey <TKey> key)
            where TValue : IRedisStorable, new()
        {
            if (IsConnected)
            {
                var valueFromRedis = await RedisDb.StringGetAsync(key);

                if (!valueFromRedis.IsNull)
                {
                    var ret = new TValue();
                    ret.LoadFrom(valueFromRedis);
                    return(ret);
                }
            }

            var valueFromDb = await DbGetAsync <TKey, TValue>(key);

            if (valueFromDb == null)
            {
                return(default(TValue));
            }

            if (!IsConnected)
            {
                return(valueFromDb);
            }

            var valueForRedis = valueFromDb.ToRedisValue();

#pragma warning disable CS4014
            RedisDb.StringSetAsync(key, valueForRedis);
#pragma warning restore CS4014
            return(valueFromDb);
        }
 protected override async Task <TValue> DbGetAsync <TKey, TValue>(RedisStoreKey <TKey> key)
 {
     using (var dynamoCtx = new DynamoDBContext(DynamoDBClient.Instance))
     {
         return(await dynamoCtx.LoadAsync <TValue>(key.Data));
     }
 }
        public TValue Get <TKey, TValue>(RedisStoreKey <TKey> key)
            where TValue : IRedisStorable, new()
        {
            if (IsConnected)
            {
                var valueFromRedis = RedisDb.StringGet(key);
                if (!valueFromRedis.IsNull)
                {
                    var ret = new TValue();
                    ret.LoadFrom(valueFromRedis);
                    return(ret);
                }
            }

            var valueFromDb = DbGet <TKey, TValue>(key);

            if (valueFromDb == null)
            {
                return(default(TValue));
            }

            if (!IsConnected)
            {
                return(valueFromDb);
            }

            var valueForRedis = valueFromDb.ToRedisValue();

            RedisDb.StringSet(key, valueForRedis);
            return(valueFromDb);
        }
 protected override TValue DbGet <TKey, TValue>(RedisStoreKey <TKey> key)
 {
     using (var dynamoCtx = new DynamoDBContext(DynamoDBClient.Instance))
     {
         return(dynamoCtx.Load <TValue>(key.Data));
     }
 }
 public void Set <TKey, TValue>(RedisStoreKey <TKey> key, TValue value)
     where TValue : IRedisStorable, new()
 {
     if (DbSet(value) && IsConnected)
     {
         RedisDb.StringSet(key, value.ToRedisValue());
     }
 }
        public async Task <bool> SetAsync <TKey, TValue>(RedisStoreKey <TKey> key, TValue value)
            where TValue : IRedisStorable, new()
        {
            if (await DbSetAsync(value))
            {
                return(!IsConnected || await RedisDb.StringSetAsync(key, value.ToRedisValue()));
            }

            return(false);
        }
 protected abstract Task <TValue> DbGetAsync <TKey, TValue>(RedisStoreKey <TKey> key);
 protected abstract TValue DbGet <TKey, TValue>(RedisStoreKey <TKey> key);