using StackExchange.Redis; using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using WX.CRM.Model.Redis; namespace WX.CRM.DAL.Redis { public sealed class RedisSet : RedisStore { public RedisSet(RedisConfig redisConfig = RedisConfig.Redis0) : base(redisConfig) { } public RedisSet(RedisKey key, RedisConfig redisConfig = RedisConfig.Redis0) : base(key, redisConfig) { } /// /// http://redis.io/commands/sadd /// /// /// public bool Add(RedisKey key, T data) { var value = Settings.ValueConverter.Serialize(data); return Database.SetAdd(key, value); } /// /// http://redis.io/commands/sadd /// /// /// public bool Add(T data) { var value = Settings.ValueConverter.Serialize(data); return Database.SetAdd(Key, value); } /// /// http://redis.io/commands/sadd /// /// /// public async Task AddAsync(T data) { var value = Settings.ValueConverter.Serialize(data); return await Database.SetAddAsync(Key, value); } public async Task AddAsync(RedisKey key, T data) { Key = key; var value = Settings.ValueConverter.Serialize(data); return await Database.SetAddAsync(Key, value); } /// /// http://redis.io/commands/sadd /// /// /// public long Add(T[] data) { var redisValues = data.Select(x => Settings.ValueConverter.Serialize(x)).ToArray(); return Database.SetAdd(Key, redisValues); } /// /// http://redis.io/commands/sadd /// /// /// public async Task AddAsync(T[] data) { var redisValues = data.Select(x => Settings.ValueConverter.Serialize(x)).ToArray(); return await Database.SetAddAsync(Key, redisValues); } public IEnumerable Members() { var result = Database.SetMembers(Key); return result.Select(x => Settings.ValueConverter.Deserialize(x)); } public IEnumerable Members(RedisKey key) { var result = Database.SetMembers(key); return result.Select(x => Settings.ValueConverter.Deserialize(x)); } public async Task> MembersAsync() { var result = await Database.SetMembersAsync(Key); return result.Select(x => Settings.ValueConverter.Deserialize(x)); } public bool Remove(RedisKey key, T member) { if (string.IsNullOrEmpty(key)) throw new Exception("key不能为空!"); var v = Settings.ValueConverter.Serialize(member); return Database.SetRemove(key, v); } /// /// SREM http://redis.io/commands/srem /// public async Task RemoveAsync(RedisKey key, T member) { if (string.IsNullOrEmpty(key)) throw new Exception("key不能为空!"); var v = Settings.ValueConverter.Serialize(member); return await Database.SetRemoveAsync(key, v); } /// /// SISMEMBER http://redis.io/commands/sismember /// public async Task Contains(RedisKey key, T value) { var v = Settings.ValueConverter.Serialize(value); return await Database.SetContainsAsync(key, v); } /// /// SISMEMBER http://redis.io/commands/sismember /// public bool ContainsTB(RedisKey key, T value) { var v = Settings.ValueConverter.Serialize(value); return Database.SetContains(key, v); } } }