一、简介

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. 整合Spring+Struts2+Mybatis加spring单元测试等

    前言 自己是在CentOS7的IntelliJ IDEA里开发的,里面中文输入法有问题经常用不了,所以这里用了很多chinglish,希望不要介意: 一:pom依赖 <?xml version= ...

  2. VGA的行场时序

    之前碰到接收VGA时有的电脑可以有的电脑会出现画面偏移. 先来了解下数字显示器时序(DMT) DMT视频时序有四种: (1)Positive H & Positive V Syncs 行同步为 ...

  3. 基于S2AFCM的子主题划分

    http://sztsg.czlib.net:8088/interlibSSO/goto/2/=jmr9bmjh9mds/KXReader/Detail?dbcode=CJFD&filenam ...

  4. 2.2.11同步synchronized方法无限等待与解决

    同步方法容易造成死循环. package com.cky.bean; /** * Created by edison on 2017/12/8. */ public class Service { s ...

  5. phpwind部署问题

    1. 提示"PDO_Mysql 未安装" wamp安装后,首选确保在wamp/php/ext/目录下存在"php_pdo.dll"和"php_pdo_ ...

  6. MapGIS计算瓦片数据集

    https://www.docin.com/p-2103834433.html

  7. OpenGL中的拾取模式( Picking)

    1. Opengl中的渲染模式有三种:(1)渲染模式,默认的模式:(2)选择模式, (3)反馈模式.如下 GLint glRenderMode(GLenum mode) mode可以选取以下三种模式之 ...

  8. JVM的參數

    博客:https://www.cnblogs.com/redcreen/archive/2011/05/04/2037057.html#CMSInitiatingOccupancyFraction_v ...

  9. Python基础的练习

    ---恢复内容开始--- 简单输入输出交互. >>> name='Jame' >>> print('Hi,%s.'%name) Hi,Jame. >>& ...

  10. hive sql 查询一张表的数据不在另一张表中

    有时,我们需要对比两张表的数据,找到在其中一张表,不在另一张表中的数据 hql 如下: SELECT * FROM (SELECT id FROM a WHERE dt = '2019-03-17' ...