TG.WXCRM.V4/DAL/Redis/RedisSet.cs

131 lines
4.3 KiB
C#
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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<T> : RedisStore
{
public RedisSet(RedisConfig redisConfig = RedisConfig.Redis0)
: base(redisConfig)
{
}
public RedisSet(RedisKey key, RedisConfig redisConfig = RedisConfig.Redis0)
: base(key, redisConfig)
{
}
/// <summary>
/// http://redis.io/commands/sadd
/// </summary>
/// <param name="data"></param>
/// <returns></returns>
public bool Add(RedisKey key, T data)
{
var value = Settings.ValueConverter.Serialize(data);
return Database.SetAdd(key, value);
}
/// <summary>
/// http://redis.io/commands/sadd
/// </summary>
/// <param name="data"></param>
/// <returns></returns>
public bool Add(T data)
{
var value = Settings.ValueConverter.Serialize(data);
return Database.SetAdd(Key, value);
}
/// <summary>
/// http://redis.io/commands/sadd
/// </summary>
/// <param name="data"></param>
/// <returns></returns>
public async Task<bool> AddAsync(T data)
{
var value = Settings.ValueConverter.Serialize(data);
return await Database.SetAddAsync(Key, value);
}
public async Task<bool> AddAsync(RedisKey key, T data)
{
Key = key;
var value = Settings.ValueConverter.Serialize(data);
return await Database.SetAddAsync(Key, value);
}
/// <summary>
/// http://redis.io/commands/sadd
/// </summary>
/// <param name="data"></param>
/// <returns></returns>
public long Add(T[] data)
{
var redisValues = data.Select(x => Settings.ValueConverter.Serialize(x)).ToArray();
return Database.SetAdd(Key, redisValues);
}
/// <summary>
/// http://redis.io/commands/sadd
/// </summary>
/// <param name="data"></param>
/// <returns></returns>
public async Task<long> AddAsync(T[] data)
{
var redisValues = data.Select(x => Settings.ValueConverter.Serialize(x)).ToArray();
return await Database.SetAddAsync(Key, redisValues);
}
public IEnumerable<T> Members()
{
var result = Database.SetMembers(Key);
return result.Select(x => Settings.ValueConverter.Deserialize<T>(x));
}
public IEnumerable<T> Members(RedisKey key)
{
var result = Database.SetMembers(key);
return result.Select(x => Settings.ValueConverter.Deserialize<T>(x));
}
public async Task<IEnumerable<T>> MembersAsync()
{
var result = await Database.SetMembersAsync(Key);
return result.Select(x => Settings.ValueConverter.Deserialize<T>(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);
}
/// <summary>
/// SREM http://redis.io/commands/srem
/// </summary>
public async Task<bool> 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);
}
/// <summary>
/// SISMEMBER http://redis.io/commands/sismember
/// </summary>
public async Task<bool> Contains(RedisKey key, T value)
{
var v = Settings.ValueConverter.Serialize(value);
return await Database.SetContainsAsync(key, v);
}
/// <summary>
/// SISMEMBER http://redis.io/commands/sismember
/// </summary>
public bool ContainsTB(RedisKey key, T value)
{
var v = Settings.ValueConverter.Serialize(value);
return Database.SetContains(key, v);
}
}
}