58 lines
2.3 KiB
C#
58 lines
2.3 KiB
C#
using StackExchange.Redis;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Threading.Tasks;
|
|
using WX.CRM.Model.Redis;
|
|
|
|
namespace WX.CRM.DAL.Redis
|
|
{
|
|
public sealed class RedisSortedSet<T> : RedisStore
|
|
{
|
|
public RedisSortedSet(RedisKey key, RedisConfig redisConfig = RedisConfig.Redis0)
|
|
: base(key, redisConfig)
|
|
{
|
|
}
|
|
public RedisSortedSet(RedisConfig redisConfig = RedisConfig.Redis0)
|
|
: base(redisConfig)
|
|
{
|
|
}
|
|
public bool Add(T data, double score)
|
|
{
|
|
var value = Settings.ValueConverter.Serialize(data);
|
|
return Database.SortedSetAdd(Key, value, score);
|
|
}
|
|
public async Task<bool> AddAsync(T data, double score)
|
|
{
|
|
var value = Settings.ValueConverter.Serialize(data);
|
|
return await Database.SortedSetAddAsync(Key, value, score);
|
|
}
|
|
public async Task<bool> AddAsync(RedisKey key, T data, double score)
|
|
{
|
|
Key = key;
|
|
var value = Settings.ValueConverter.Serialize(data);
|
|
return await Database.SortedSetAddAsync(Key, value, score);
|
|
}
|
|
public async Task<long> AddAsync(IEnumerable<KeyValuePair<T, double>> data)
|
|
{
|
|
var redisValues = data.Select(x =>
|
|
{
|
|
var v = Settings.ValueConverter.Serialize(x);
|
|
return new SortedSetEntry(v, x.Value);
|
|
}).ToArray();
|
|
return await Database.SortedSetAddAsync(Key, redisValues);
|
|
}
|
|
|
|
public async Task<IEnumerable<T>> RangeByRankAsync(long start = 0, long stop = -1, Order order = Order.Ascending)
|
|
{
|
|
var result = await Database.SortedSetRangeByRankAsync(Key, start, stop, order);
|
|
return result.Select(x => Settings.ValueConverter.Deserialize<T>(x));
|
|
}
|
|
|
|
public async Task<IEnumerable<T>> RangeByScoreAsync(double start = double.NegativeInfinity, double stop = double.PositiveInfinity, Exclude exclude = Exclude.None, Order order = Order.Ascending, long skip = 0, long take = -1)
|
|
{
|
|
var result = await Database.SortedSetRangeByScoreAsync(Key, start, stop, exclude, order, skip, take);
|
|
return result.Select(x => Settings.ValueConverter.Deserialize<T>(x));
|
|
}
|
|
}
|
|
}
|