Beispiel #1
0
        public IObservable <IDataKey> GetKeys(IDatabaseAsync database, IIndexKey indexes, long start = 0, long stop = -1)
        {
            log.LogTrace("GetKeys");
            var keys = GetIds(database, indexes, start, stop);

            return(keys.Select(item => GetKey(item, indexes)));
        }
Beispiel #2
0
        public virtual void AddIndex(IIndexKey key)
        {
            if (key == null)
            {
                throw new ArgumentNullException(nameof(key));
            }

            indexes[key.Key] = key;
        }
Beispiel #3
0
        public Task RemoveIndex(IDatabaseAsync database, IDataKey key, IIndexKey indexes)
        {
            if (key?.RecordId == null)
            {
                throw new ArgumentNullException(nameof(key));
            }

            return(RemoveRawIndex(database, indexes, key.RecordId));
        }
Beispiel #4
0
        public Task AddRawIndex(IDatabaseAsync database, string rawKey, IIndexKey indexes)
        {
            if (string.IsNullOrEmpty(rawKey))
            {
                throw new ArgumentException("Value cannot be null or empty.", nameof(rawKey));
            }

            return(AddRawIndex(database, indexes, rawKey));
        }
Beispiel #5
0
        public Task AddIndex(IDatabaseAsync database, IDataKey key, IIndexKey indexes)
        {
            if (key == null)
            {
                throw new ArgumentNullException(nameof(key));
            }

            return(AddRawIndex(database, key.RecordId, indexes));
        }
Beispiel #6
0
        public override void AddIndex(IIndexKey key)
        {
            if (key?.RepositoryKey == null)
            {
                throw new ArgumentNullException(nameof(key));
            }

            base.AddIndex(key);
        }
Beispiel #7
0
        private IDataKey GetKey(string key, IIndexKey indexes)
        {
            var repository = indexes.RepositoryKey;

            if (!string.IsNullOrEmpty(repository))
            {
                return(SimpleKey.GenerateKey(repository, key));
            }

            return(new ObjectKey(key));
        }
Beispiel #8
0
        public static RedisKey GetIndexKey(this IRedisLink link, IIndexKey index)
        {
            if (link == null)
            {
                throw new ArgumentNullException(nameof(link));
            }

            if (index == null)
            {
                throw new ArgumentNullException(nameof(index));
            }

            return(string.IsNullOrEmpty(index.RepositoryKey) ? link.GetKey(index.Key) : link.GetKey($"{index.RepositoryKey}:{index.Key}"));
        }
Beispiel #9
0
        public IObservable <T> GetRecords <T>(IIndexKey index, long start = 0, long end = -1)
        {
            logger.LogDebug($"GetRecords {start}-{end}");
            var indexManager = mainIndexManager.GetManager(index);
            int batch        = BatchSize;

            return(ObserverHelpers.Batch(
                       indexManager.Count(GetDatabase(), index),
                       (fromIndex, toIndex) => indexManager.GetKeys(GetDatabase(), index, fromIndex, toIndex),
                       GetRecords <T>,
                       batch,
                       start,
                       end));
        }
Beispiel #10
0
        public Task <long> Count(IIndexKey index)
        {
            if (index == null)
            {
                throw new ArgumentNullException(nameof(index));
            }

            var indexManager = mainIndexManager.GetManager(index);

            if (indexManager == null)
            {
                return(Task.FromResult(0L));
            }

            return(link.Resilience
                   .AsyncRetryPolicy
                   .ExecuteAsync(async() => await indexManager.Count(GetDatabase(), index).ConfigureAwait(false)));
        }
Beispiel #11
0
        public IIndexManager Create(IIndexKey index)
        {
            if (index == null)
            {
                throw new ArgumentNullException(nameof(index));
            }

            switch (index)
            {
            case IndexKey indexKey:
                return(indexKey.IsSet ? table[setName] : table[listName]);

            case HashIndexKey indexKey:
                return(table[hashName]);
            }

            throw new NotSupportedException("Indexing type is not supported: " + index);
        }
Beispiel #12
0
        protected override Task RemoveRawIndex(IDatabaseAsync database, IIndexKey index, string rawKey)
        {
            var hashIndex = (HashIndexKey)index;

            return(database.HashDeleteAsync(Link.GetIndexKey(index), hashIndex.HashKey));
        }
Beispiel #13
0
 public abstract Task <long> Count(IDatabaseAsync database, IIndexKey index);
Beispiel #14
0
 protected override Task AddRawIndex(IDatabaseAsync database, IIndexKey index, string rawKey)
 {
     return(database.SortedSetAddAsync(Link.GetIndexKey(index), rawKey, DateTime.UtcNow.ToUnixTime()));
 }
Beispiel #15
0
        protected override IObservable <RedisValue> GetIdsSingle(IDatabaseAsync database, IIndexKey index, long start = 0, long stop = -1)
        {
            return(Observable.Create <RedisValue>(
                       async observer =>
            {
                var keys = await Link.Resilience.AsyncRetryPolicy
                           .ExecuteAsync(async() => await database.SortedSetRangeByRankAsync(Link.GetIndexKey(index), start, stop, Order.Descending).ConfigureAwait(false))
                           .ConfigureAwait(false);

                foreach (var key in keys)
                {
                    observer.OnNext(key);
                }

                observer.OnCompleted();
            }));
        }
Beispiel #16
0
 public override Task <long> Count(IDatabaseAsync database, IIndexKey index)
 {
     return(database.SortedSetLengthAsync(Link.GetIndexKey(index)));
 }
Beispiel #17
0
 protected override Task RemoveRawIndex(IDatabaseAsync database, IIndexKey index, string rawKey)
 {
     return(database.SortedSetRemoveAsync(Link.GetIndexKey(index), rawKey));
 }
Beispiel #18
0
 protected override Task RemoveRawIndex(IDatabaseAsync database, IIndexKey index, string rawKey)
 {
     // not supported
     return(Task.CompletedTask);
 }
Beispiel #19
0
 protected override Task AddRawIndex(IDatabaseAsync database, IIndexKey index, string rawKey)
 {
     return(database.ListLeftPushAsync(Link.GetIndexKey(index), rawKey));
 }
Beispiel #20
0
        protected override IObservable <RedisValue> GetIdsSingle(IDatabaseAsync database, IIndexKey index, long start = 0, long stop = -1)
        {
            var hashKey = ((HashIndexKey)index).HashKey;

            return(Observable.Create <RedisValue>(
                       async observer =>
            {
                var result = await Link.Resilience.AsyncRetryPolicy
                             .ExecuteAsync(async() => await database.HashGetAsync(Link.GetIndexKey(index), hashKey).ConfigureAwait(false))
                             .ConfigureAwait(false);
                observer.OnNext(result);
                observer.OnCompleted();
            }));
        }
Beispiel #21
0
 public IIndexManager GetManager(IIndexKey index)
 {
     return(factory.Create(index));
 }
Beispiel #22
0
        protected override Task AddRawIndex(IDatabaseAsync database, IIndexKey index, string rawKey)
        {
            var hashIndex = (HashIndexKey)index;

            return(database.HashSetAsync(Link.GetIndexKey(index), new[] { new HashEntry(hashIndex.HashKey, rawKey) }));
        }
Beispiel #23
0
 public IObservable <RedisValue> GetIds(IDatabaseAsync database, IIndexKey indexes, long start = 0, long stop = -1)
 {
     return(GetIdsSingle(database, indexes, start, stop));
 }
Beispiel #24
0
 public Task Reset(IDatabaseAsync database, IIndexKey indexes)
 {
     log.LogDebug("Reset");
     return(database.KeyDeleteAsync(Link.GetIndexKey(indexes)));
 }
Beispiel #25
0
 protected abstract Task AddRawIndex(IDatabaseAsync database, IIndexKey index, string rawKey);
Beispiel #26
0
 protected abstract IObservable <RedisValue> GetIdsSingle(IDatabaseAsync database, IIndexKey key, long start = 0, long stop = -1);