一、简介

Redis中的Set(集合)相当于C#中的HashSet,它内部的键值对时无序的、唯一的。用过Dictionary的都知道,Dictionary都知道,里面的每个键值对肯定是唯一的,因为键不允许重复.而Redis中的Set相当于一个特殊的字典,字典中所有的Value值都是null.当集合中最后一个元素被移除,该集合的内存会被回收.

二、用法

Redis中的Set集合可以用来存储某秒杀活动中,商品ID和幸运儿的ID,因为一件商品只能被一个用户抢到,不可能被两个用户同时抢到.

三、代码实战

代码还是基于前面文章中的代码

C#控制台:

给RedisClient.cs扩展如下方法:

        /// <summary>
/// 异步向Set(集合)中添加键值对
/// </summary>
/// <param name="key"></param>
/// <param name="value"></param>
/// <returns></returns>
public static async Task<bool> SetAddAsync(RedisKey key, RedisValue value)
{
var db = GetDatabase();
return await db.SetAddAsync(key, value);
} /// <summary>
/// 异步获取对应键的所有成员,无序
/// </summary>
/// <param name="key"></param>
/// <returns></returns>
public static async Task<RedisValue[]> SetMembersAsync(RedisKey key)
{
var db = GetDatabase();
return await db.SetMembersAsync(key);
}

注:这里还有很多Api没有介绍,可以自行了解

program.cs代码如下:

    class Program
{
static Program()
{
//链式配置Redis
AppConfiguration.Current.ConfigureRedis<RedisConfig>();
} static void Main(string[] args)
{
StringSetGetAsync();
Console.ReadKey();
} static async void StringSetGetAsync()
{
var key = "测试商品Id";
var userId = Guid.NewGuid().ToString();
try
{
if (!await RedisClient.SetAddAsync(key, userId))
{
  //注:这里最好不要抛异常,会影响后续操作,写日志更合理
Console.WriteLine("向Redis Set集合插入元素失败,同一个商品出现了多个中奖用户!");
}
//模拟重复插入
if (!await RedisClient.SetAddAsync(key, userId))
{
Console.WriteLine("向Redis Set集合插入元素失败,同一个商品出现了多个中奖用户!");
} //模拟继续插入
if (!await RedisClient.SetAddAsync(key, Guid.NewGuid().ToString()))
{
Console.WriteLine("向Redis Set集合插入元素失败,同一个商品出现了多个中奖用户!");
} if (!await RedisClient.SetAddAsync(key, Guid.NewGuid().ToString()))
{
Console.WriteLine("向Redis Set集合插入元素失败,同一个商品出现了多个中奖用户!");
} //获取指定键的所有成员,并输出
var members = await RedisClient.SetMembersAsync(key);
foreach (var member in members)
{
Console.WriteLine(member);
}
}
catch (Exception ex)
{
//记录日志
Console.WriteLine(ex.Message);
} }
}

Redis学习系列五Set(集合)的更多相关文章

  1. Python操作redis学习系列之(集合)set,redis set详解 (六)

    # -*- coding: utf-8 -*- import redis r = redis.Redis(host=") 1. Sadd 命令将一个或多个成员元素加入到集合中,已经存在于集合 ...

  2. 分布式缓存技术redis学习系列(五)——redis实战(redis与spring整合,分布式锁实现)

    本文是redis学习系列的第五篇,点击下面链接可回看系列文章 <redis简介以及linux上的安装> <详细讲解redis数据结构(内存模型)以及常用命令> <redi ...

  3. 分布式缓存技术redis学习系列

    分布式缓存技术redis学习系列(一)--redis简介以及linux上的安装以及操作redis问题整理 分布式缓存技术redis学习系列(二)--详细讲解redis数据结构(内存模型)以及常用命令 ...

  4. redis学习教程五《管道、分区》

    redis学习教程五<管道.分区>  一:管道 Redis是一个TCP服务器,支持请求/响应协议. 在Redis中,请求通过以下步骤完成: 客户端向服务器发送查询,并从套接字读取,通常以阻 ...

  5. 分布式缓存技术redis学习系列(四)——redis高级应用(集群搭建、集群分区原理、集群操作)

    本文是redis学习系列的第四篇,前面我们学习了redis的数据结构和一些高级特性,点击下面链接可回看 <详细讲解redis数据结构(内存模型)以及常用命令> <redis高级应用( ...

  6. redis学习系列

    redis学习系列 基本看完 最近在看redis的代码,简单记录下自己认为重要的点,自己写比较费时间的,我会把查到的资料贴出来方便查看 淘宝的redis内存分析 http://www.searchtb ...

  7. C# Redis学习系列三:Redis配置主从

    Redis配置主从 主IP :端口      192.168.0.103 6666 从IP:端口       192.168.0.108 3333 配置从库 (1)安装服务: redis-server ...

  8. scrapy爬虫学习系列五:图片的抓取和下载

    系列文章列表: scrapy爬虫学习系列一:scrapy爬虫环境的准备:      http://www.cnblogs.com/zhaojiedi1992/p/zhaojiedi_python_00 ...

  9. redis 学习(7) -- 有序集合

    redis 学习(7) -- 有序集合 zset 结构 有序集合:有序.不能包含重复元素 每个节点包含:score和value两个属性,根据score进行排序 如图: zset 重要 API 含义 命 ...

随机推荐

  1. MySql Cast与Convert函数

    两者具体的语法如下: Cast(value as type): Convert(value ,type): type不是都可以滴,可以转换的type如下: 二进制,同带binary前缀的效果 : BI ...

  2. mysql重装之后 复制data

    (哇,编程小白的第一篇博客丫,激动) Q one:mysql需要重装,数据该怎么办. 方法一:数据表最好是导出成.sql文件,这样才比较安全. 方法二:直接copy了data文件:在mysql安装盘下 ...

  3. 用cglib包来为类产生动态代理类对象

    一:在JDK里也有动态代理的类和接口,是Proxy和InvocationHandler,但是Proxy只能为接口产生代理类,借助InvocationHandler的实现类来完成对类对象的代理: 但是在 ...

  4. java 冒泡排序 二分查找 选择排序 插入排序

    下面这个程序是先定义一个整型数组,然后将其中的元素反序赋值,再用冒泡排序进行排序以后用二分查找来查找其中是否有某个数,返回值为-1时表示这个数可能小于这个数组的最小值或大小这个数组的最大值,-2表示这 ...

  5. plsql Developer 登录oracle出现 initialization error

    plsql Developer 登录oracle出现 initialization error 原因:plsql没有64位的,32位的plsql连接64位的oracle才会报错 解决方案:到oracl ...

  6. Silverlight中图片显示

    silverlight中显示一个图片有很多的中方法,xaml中的image控件或者自定编写程序来生成image控件. silverlight中显示的图片只能是Bitmap, JPG, PNG(64位颜 ...

  7. day28(ajax之js原生代码实现)

    ajax ajax:异步页面无刷新技术 AJAX:异步的 JavaScript And XML. * 使用的是老的技术,用的是新的思想. AJAX的功能:完成页面的局部刷新,不中断用户的体验. XML ...

  8. linux-CentOS初学terminal命令(2)vi、gcc、g++、./、mv、cp、ifconfig

    1.vi filename(vi,visual editor,可视化编辑器)用vim文本编辑器打开filename文件. vim文本编辑器有三种模式:命令模式(Command mode),插入模式(I ...

  9. XA: 事务和两阶段提交

    本文原文连接:http://blog.csdn.net/bluishglc/article/details/7612811 ,转载请注明出处! 1.XA XA是由X/Open组织提出的两阶段提交协议, ...

  10. 使用命令行打包 nuget 包

    对于那些不打算涉及这么复杂而又想制作自己的 nuget 包的园友们,我是推荐使用 Nuget Package Explorer 来制作的.关于这个图形化的 nuget 包管理软件的使用,博客园内有相关 ...