131 lines
4.3 KiB
C#
131 lines
4.3 KiB
C#
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);
|
||
}
|
||
}
|
||
}
|