【StackExchange.Redis笔记】数据类型操作-Set、ZSet
Set数据类型
Api
(1).SetAdd:添加数据,可以单独1个key-1个value,也可以1个key-多个value添加
(2).SetLength:求key集合的数量
(3).SetContains:判断key集合中是否包含指定值
(4).SetRandomMember:随机获取指定key集合中的一个值或n个值
(5).SetMembers:获取key中的所有值,数据类型要一致,便于存储
(6).SetRemove:删除key集合中的指定value(1个或多个)
(7).SetPop:随机删除指定key集合中的一个值或n个值,并返回这些值。
(8).SetCombine:求多个元素的交并差
a.SetOperation.Intersect:交集
b.SetOperation.Union:并集
c.SetOperation.Difference:差集
(9).SetCombineAndStore:把多个元素的交并差,放到一个新的元素集合中
案例
//1.添加,value不重复
db.SetAdd("name", "fan1");
db.SetAdd("name", "fan2");
db.SetAdd("name", "fan3");
db.SetAdd("name", "fan1");//重复,不添加
//批量添加
string[] arryList = { "fan1", "fan2", "fan3", "fan4" };
RedisValue[] valueList = arryList.Select(u => (RedisValue)u).ToArray();
long length = db.SetAdd("name", valueList);//1
//2. 获取key集合值的数量
long d1 = db.SetLength("name");//4
//3. 判断key集合中是否包含指定值
bool d2 = db.SetContains("name", "fan1");//true
//4. 随机获取key集合中的一个值
var d3 = db.SetRandomMember("name");
//随机获取key集合中的3个值
var d33 = db.SetRandomMembers("name", 3).Select(u => (string)u).ToList();
//5. 获取key中的所有值,数据类型要一致
var rValue = db.SetMembers("name");
List<string> d4 = new List<string>();
foreach (var item in rValue)
{
d4.Add(item);
}
//6. 删除key集合中的指定value
//单个value
bool d5 = db.SetRemove("name", "fan4");
//多个value
string[] dDelList = { "fan2", "fan3", };
RedisValue[] DelList = dDelList.Select(u => (RedisValue)u).ToArray();
long d6 = db.SetRemove("name", DelList);
//7. 随机删除key集合中的一个值,并返回该值
var d7 = db.SetPop("name");
//随机删除key集合中的2个值,并返回这2个值
var d77 = db.SetPop("name", 2).Select(u => (string)u).ToList();
//8. 获取几个集合的交集、并集、差集(重点)
//准备数据
db.SetAdd("name1", "h1");
db.SetAdd("name1", "h2");
db.SetAdd("name1", "h3");
db.SetAdd("name1", "h4");
db.SetAdd("name2", "h4");
db.SetAdd("name2", "h5");
db.SetAdd("name2", "h6");
//下面求两个元素的交并差,也可以求多个
string[] arry = { "name1", "name2" };
RedisKey[] keyList = arry.Select(u => (RedisKey)u).ToArray();
//交集(共同的部分 h4)
var d8 = db.SetCombine(SetOperation.Intersect, keyList).Select(u => (string)u).ToList();
//并集(加到一起,去重, h1-h6)
var d9 = db.SetCombine(SetOperation.Union, keyList).Select(u => (string)u).ToList();
//差集(差集有两个,上面的是h5 h6)
var d10 = db.SetCombine(SetOperation.Difference, keyList).Select(u => (string)u).ToList();
//获取交集并存到key=name3,返回集合元素的个数
long d11 = db.SetCombineAndStore(SetOperation.Intersect, "name3", keyList);
//获取并集并存到key=name4 ,返回集合元素的个数
long d12 = db.SetCombineAndStore(SetOperation.Union, "name4", keyList);
//获取差集并存到key=name5 ,返回集合元素的个数
long d13 = db.SetCombineAndStore(SetOperation.Union, "name5", keyList);
ZSet数据类型
Api
(1).SortedSetAdd:增加,可以一次增加一个member,也可以一次增加多个member
(2).SortedSetIncrement 和 SortedSetDecrement:Score值自增或自减,如果不存在这member值,则执行增加操作,并返回当前Score值。
(3).获取相关
SortedSetRangeByRank:根据索引获取member值,默认是升序,可以获取指定索引内的member值
SortedSetRangeByScore:根据score获取member值,默认是升序,可以获取指定score开始和结束的member值,后面的skip和take用于分页
SortedSetRangeByValue:根据member获取member值,默认是升序,可以获取指定member开始和结束的值,后面的skip和take用于分页
SortedSetRangeByRankWithScores:获取member和score值,可以只返回 start-stop 这个索引排序内的值(默认升序),后面的skip和take用于分页
SortedSetScore:获取指定key指定member的score值
SortedSetLength:获取集合的数量
(4).删除相关
SortedSetRemove:删除指定key和指定member,member可以是1个或多个
SortedSetRemoveRangeByRank:删除指定索引开始到结束
SortedSetRemoveRangeByScore:删除指定分开始到结束 (5分-8分)
SortedSetRemoveRangeByValue::删除指定起始值和结束值(这里指定是member)
案例
//1.增加,如果member之前存在,则会覆盖前面的score
for (int i = 1; i < 10; i++)
{
db.SortedSetAdd("一年级", "fan" + i, i);
}
db.SortedSetAdd("一年级", "fan1", 120); //会覆盖前面的score
//1.2 score自增(刚开始如果没有这个member,会默认添加进去)
var dd1 = db.SortedSetIncrement("一年级", "fan", 1);
//1.3 Score自减(刚开始如果没有这个member,会默认添加进去)
var dd2 = db.SortedSetDecrement("一年级", "fan", 3);
//2.获取
{
//2.1 SortedSetRangeByRank:获取的是member值,可以只返回 start-stop 这个排序内的值
//2.1.1 默认是升序获取所有member值
var d1 = db.SortedSetRangeByRank("一年级");
string[] d1Arry1 = d1.Select(u => (string)u).ToArray();
//2.1.2 降序获取所有member值
var d2 = db.SortedSetRangeByRank("一年级", 0, -1, Order.Descending);
string[] d1Arry2 = d2.Select(u => (string)u).ToArray();
//2.1.3 降序获取排名前4的member值
var d3 = db.SortedSetRangeByRank("一年级", 0, 3, Order.Descending);
string[] d1Arry3 = d3.Select(u => (string)u).ToArray();
}
{
//2.2 SortedSetRangeByScore:获取的是member值,可以只返回 start-stop 这个score内的值,后面的skip和take用于分页
//SortedSetRangeByScore(RedisKey key, double start = double.NegativeInfinity, double stop = double.PositiveInfinity, Exclude exclude = Exclude.None, Order order = Order.Ascending, long skip = 0, long take = -1, CommandFlags flags = CommandFlags.None);
//2.2.1 默认是升序获取所有member值
var d1 = db.SortedSetRangeByScore("一年级");
string[] d1Arry1 = d1.Select(u => (string)u).ToArray();
//2.2.2 降序获取所有member值
var d2 = db.SortedSetRangeByScore("一年级", double.NegativeInfinity, double.PositiveInfinity, Exclude.None, Order.Descending);
string[] d1Arry2 = d2.Select(u => (string)u).ToArray();
//2.2.3 降序获取score在【2,6】分内的值
var d3 = db.SortedSetRangeByScore("一年级", 2, 6, Exclude.None, Order.Descending);
string[] d1Arry3 = d3.Select(u => (string)u).ToArray();
}
{
//2.3 SortedSetRangeByValue:获取的是member值,可以只返回 member开始到结束的值,后面的skip和take用于分页
//2.3.1 默认是升序获取所有score值
var d1 = db.SortedSetRangeByValue("一年级");
string[] d1Arry1 = d1.Select(u => (string)u).ToArray();
//2.3.2 降序获取member在【fan2,fan6】分内的值
var d3 = db.SortedSetRangeByValue("一年级", "fan2", "fan6", Exclude.None, Order.Descending);
string[] d1Arry3 = d3.Select(u => (string)u).ToArray();
}
{
//2.4 SortedSetRangeByRankWithScores:获取member和score值,可以只返回 start-stop 这个索引排序内的值,后面的skip和take用于分页
//2.4.1 默认是升序
SortedSetEntry[] d1 = db.SortedSetRangeByRankWithScores("一年级");
Dictionary<string, double> dic = new Dictionary<string, double>();
foreach (var item in d1)
{
dic.Add(item.Element, item.Score);
}
//2.4.2 降序获取所有
SortedSetEntry[] d2 = db.SortedSetRangeByRankWithScores("一年级", 0, -1, Order.Descending);
Dictionary<string, double> dic2 = new Dictionary<string, double>();
foreach (var item in d2)
{
dic2.Add(item.Element, item.Score);
}
//2.4.3 降序获取排名前4的member和score值
SortedSetEntry[] d3 = db.SortedSetRangeByRankWithScores("一年级", 0, 3, Order.Descending);
Dictionary<string, double> dic3 = new Dictionary<string, double>();
foreach (var item in d3)
{
dic3.Add(item.Element, item.Score);
}
}
{
//2.5 获取指定key指定member的score值
var d1 = db.SortedSetScore("一年级", "fan2");
}
//3. 获取集合的数量
long l1 = db.SortedSetLength("一年级");
//4. 删除
{
//4.1.SortedSetRemove:删除指定key和指定member,member可以是1个或多个
bool num1 = db.SortedSetRemove("一年级", "fan1");
string[] arry1 = { "fan2", "fan3", "fan4" };
RedisValue[] newArry1 = arry1.Select(u => (RedisValue)u).ToArray();
long num2 = db.SortedSetRemove("一年级", newArry1);
}
{
//4.2.SortedSetRemoveRangeByRank:删除指定索引开始到结束
long num = db.SortedSetRemoveRangeByRank("一年级", 0, 2);
}
{
//4.3.SortedSetRemoveRangeByScore:删除指定分开始到结束 (5分-8分)
long num = db.SortedSetRemoveRangeByScore("一年级", 5, 8);
}
{
//4.4.SortedSetRemoveRangeByValue:删除指定起始值和结束值(这里指定是member)
long num = db.SortedSetRemoveRangeByValue("一年级", "fan3", "fan6");
}