[feat] RedisSet增加差集、交集和并集运算

This commit is contained in:
智能大石头 2025-05-05 08:11:07 +08:00
parent aa66a0c731
commit ad622567bd
2 changed files with 45 additions and 0 deletions

View File

@ -721,6 +721,23 @@ public class RedisClient : DisposeBase
return Execute<TResult>(cmd, arr);
}
/// <summary>执行命令</summary>
/// <typeparam name="TArg"></typeparam>
/// <typeparam name="TResult"></typeparam>
/// <param name="cmd"></param>
/// <param name="key"></param>
/// <param name="key2"></param>
/// <param name="args"></param>
/// <returns></returns>
public TResult? ExecuteByKey2<TArg, TResult>(String cmd, String key, String key2, TArg?[] args)
{
var arr = new Object?[args.Length + 2];
arr[0] = key;
arr[1] = key2;
Array.Copy(args, 0, arr, 2, args.Length);
return Execute<TResult>(cmd, arr);
}
/// <summary>尝试执行命令。返回基本类型、对象、对象数组</summary>
/// <param name="cmd"></param>
/// <param name="args"></param>

View File

@ -128,5 +128,33 @@ public class RedisSet<T> : RedisBase, ICollection<T>
/// <returns></returns>
public T[] Diff(params String[] keys) => Execute((r, k) => r.ExecuteByKey<String, T[]>("SDIFF", Key, keys)) ?? [];
/// <summary>返回第一个集合与其他集合之间的差异</summary>
/// <remarks>将结果保存到 destination 集合</remarks>
/// <param name="destination">目的集合。如果 destination 集合已经存在,则将其覆盖。</param>
/// <param name="keys"></param>
/// <returns></returns>
public Int32 DiffStore(String destination, params String[] keys) => Execute((r, k) => r.ExecuteByKey2<String, Int32>("SDIFFSTORE", destination, Key, keys));
/// <summary>返回所有给定集合的成员交集</summary>
/// <param name="keys"></param>
/// <returns></returns>
public T[] Inter(params String[] keys) => Execute((r, k) => r.ExecuteByKey<String, T[]>("SINTER", Key, keys)) ?? [];
/// <summary>返回所有给定集合的成员交集</summary>
/// <param name="destination">目的集合。如果 destination 集合已经存在,则将其覆盖。</param>
/// <param name="keys"></param>
/// <returns></returns>
public Int32 InterStore(String destination, params String[] keys) => Execute((r, k) => r.ExecuteByKey2<String, Int32>("SINTERSTORE", destination, Key, keys));
/// <summary>返回所有给定集合的并集</summary>
/// <param name="keys"></param>
/// <returns></returns>
public T[] Union(params String[] keys) => Execute((r, k) => r.ExecuteByKey<String, T[]>("SUNION", Key, keys)) ?? [];
/// <summary>返回所有给定集合的并集</summary>
/// <param name="destination">目的集合。如果 destination 集合已经存在,则将其覆盖。</param>
/// <param name="keys"></param>
/// <returns></returns>
public Int32 UnionStore(String destination, params String[] keys) => Execute((r, k) => r.ExecuteByKey2<String, Int32>("SUNIONSTORE", destination, Key, keys));
#endregion
}