当前位置:网站首页>.NET操作Redis Set无序集合
.NET操作Redis Set无序集合
2022-07-26 10:29:00 【矿工学编程】
一、Set无序集合概述
Redis 的 Set 是 String 类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据。
Redis 中集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)。
集合中最大的成员数为 232 - 1 (4294967295, 每个集合可存储40多亿个成员)。
二、使用场景
1、可以使用Redis的Set数据类型跟踪一些唯一性数据,比如访问某一博客的唯一IP地址信息。对于此场景,我们仅需在每次访问该博客时将访问者的IP存入Redis中,Set数据类型会自动保证IP地址的唯一性。
2、充分利用Set类型的服务端聚合操作方便、高效的特性,可以用于维护数据对象之间的关联关系。比如所有购买某一电子设备的客户ID被存储在一个指定的Set中,而购买另外一种电子产品的客户ID被存储在另外一个Set中,如果此时我们想获取有哪些客户同时购买了这两种产品时,Set的intersections命令就可以充分发挥它的方便和效率优势了。
3、根据ip地址来投票,每一个ip只投一票,取交集和去并集。
三、.NET 操作
1、添加键值 //自动去重
string key = "kgxk_set";
var litaibai = new UserInfo() { Id = 1, Name = "李太白" };
client.AddItemToSet(key, JsonConvert.SerializeObject(litaibai));
client.AddItemToSet(key, JsonConvert.SerializeObject(litaibai));
client.AddItemToSet(key, JsonConvert.SerializeObject(litaibai));
client.AddItemToSet(key, JsonConvert.SerializeObject(litaibai));
Console.WriteLine("操作完成,请到管理工具查看效果");2、随机获取key集合中的一个值,获取当前setid中的所有值
string key = "kgxk_set";
//批量的去操作set 集合
Console.WriteLine("set 开始了");
client.AddRangeToSet(key, new List<string>() { "001", "001", "002", "003", "003", "004" });
//当前setid中的值数量
Console.WriteLine(client.GetSetCount(key));
//随机获取key集合中的一个值 如果有需要取随机数也可以用
Console.WriteLine(client.GetRandomItemFromSet(key));
//获取当前setid中的所有值
var lists = client.GetAllItemsFromSet(key);
Console.WriteLine("展示所有的值");
foreach (var item in lists)
{
Console.WriteLine(item);
}3、随机删除key集合中的一个值
client.AddRangeToSet(key, new List<string>() { "001", "001", "002" });
//随机删除key集合中的一个值 返回当前删掉的这个值
Console.WriteLine("随机删除的值" + client.PopItemFromSet(key));
var lists = client.GetAllItemsFromSet(key);
Console.WriteLine("展示删除之后所有的值");
foreach (var item in lists)
{
Console.WriteLine(item);
}4、精准删除
client.AddRangeToSet(key, new List<string>() { "001", "001", "002" });
client.RemoveItemFromSet(key, "001");
var lists = client.GetAllItemsFromSet(key);
Console.WriteLine("展示删除之后所有的值");
foreach (var item in lists)
{
Console.WriteLine(item);
}5、从一个集合剪贴值到另一个集合
client.AddRangeToSet("fromkey", new List<string>() { "003", "001", "002", "004" });
client.AddRangeToSet("tokey", new List<string>() { "001", "002" });
//从fromkey 中把元素004 剪切到tokey 集合中去
client.MoveBetweenSets("fromkey", "tokey", "004");
Console.WriteLine("fromkey data ~~~~~~");
foreach (var item in client.GetAllItemsFromSet("fromkey"))
{
Console.WriteLine(item);
}
Console.WriteLine("tokey data ~~~~~~");
foreach (var item in client.GetAllItemsFromSet("tokey"))
{
Console.WriteLine(item);
}6、并集 把两个集合合并起来,然后去重
client.AddRangeToSet("keyone", new List<string>() { "001", "002", "003", "004" });
client.AddRangeToSet("keytwo", new List<string>() { "001", "002", "005" });
var unionlist = client.GetUnionFromSets("keyone", "keytwo");
Console.WriteLine("返回并集结果");
foreach (var item in unionlist)
{
Console.WriteLine(item);
}
//把 keyone 和keytwo 并集结果存放到newkey 集合中
client.StoreUnionFromSets("newkey", "keyone", "keytwo");
Console.WriteLine("返回并集结果的新集合数据");
foreach (var item in client.GetAllItemsFromSet("newkey"))
{
Console.WriteLine(item);
}7、交集 获取两个集合中共同存在的元素
client.AddRangeToSet("keyone", new List<string>() { "001", "002", "003", "004" });
client.AddRangeToSet("keytwo", new List<string>() { "001", "002", "005" });
var Intersectlist = client.GetIntersectFromSets("keyone", "keytwo");
Console.WriteLine("交集的结果");
foreach (var item in Intersectlist)
{
Console.WriteLine(item);
}
//把 keyone 和keytwo 交集结果存放到newkey 集合中
client.StoreIntersectFromSets("newkey", "keyone", "keytwo");
Console.WriteLine("返回交集结果的新集合数据");
foreach (var item in client.GetAllItemsFromSet("newkey"))
{
Console.WriteLine(item);
}
边栏推荐
- Interview questions and answers for the second company (2)
- [Halcon vision] morphological corrosion
- 【Halcon视觉】图像灰度变化
- 【Halcon视觉】极坐标变换
- [Halcon vision] affine transformation
- 3.1 leetcode daily question 6
- 我们的Web3创业项目,黄了
- Inheritance method of simplified constructor (I) - combined inheritance
- js 获得当前时间,时间与时间戳的转换
- 分布式锁解决方案之Redis实现
猜你喜欢

Learning about tensorflow (II)

议程速递 | 7月27日分论坛议程一览

INSTALL_FAILED_SHARED_USER_INCOMPATIBLE错误解决方式

PLC概述

【Halcon视觉】数组

数据分析入门 | kaggle泰坦尼克任务

On the compilation of student management system of C language course (simple version)
![[Halcon vision] software programming ideas](/img/9b/a27338689ee4598dac88f6e5d92053.png)
[Halcon vision] software programming ideas

Learning about opencv (1)

The difference between equals and = =
随机推荐
Cause: couldn‘t make a guess for 解决方法
简单化构造函数的继承方法(二)- ES6中的class继承
【Halcon视觉】算子的结构
json_object_put: Assertion `jso->_ref_count > 0‘ failed.Aborted (core dumped)
The CLOB field cannot be converted when querying Damon database
Data communication foundation telnet remote management equipment
Okaleido ecological core equity Oka, all in fusion mining mode
Draco developed by Google and Pixar supports USD format to accelerate 3D object transmission & lt; Forward & gt;
【Halcon视觉】阈值分割
将json文件中数组转换为struct
Function templates and non template functions with the same name cannot be overloaded (definition of overloads)
Unit test, what is unit test and why is it so difficult to write a single test
Okaleido生态核心权益OKA,尽在聚变Mining模式
[Halcon vision] threshold segmentation
On the compilation of student management system of C language course (simple version)
PLC概述
链式方法调用的事务问题剖析
头歌 Phoenix 入门(第1关:Phoenix 安装、第2关:Phoenix 基础语法)
Learning about opencv (2)
利用原生js实现自定义滚动条(可点击到达,拖动到达)