c#使用redis实现高并发抽奖

思路分析

一个完整的抽奖过程,首先应该由如何获取抽奖机会开始,获得抽奖机会后,即可参与抽奖。抽奖最常见的一种是限定每个用户只能中奖一次(不可重复中奖),另一种是不限制(可重复中奖)。至于抽奖主办方则更关注的是有关奖品的配置,如何能尽可能的保证奖品公平的发送到所有参与用户的手里。这里就涉及到中奖概率该如何实现,以及如果避免用户恶意刷奖,从而导致活动失去意义。

本文主要目标是实现一个通用的抽奖模块,任何抽奖模式只是业务模式形式不一样而已,到抽奖环节都一样,所以分装好的抽奖模块几乎适用于所有常见抽奖环境。

搭建项目

  1. 环境准备
    开发工具:VS2022
    项目框架:.NET 6.0
    Redis Version: 7.2.4
    MySql:5.7.30
  2. 创建MVC项目
    添加控制器,代码如下:
public class DemoController : Controller
{
   
    private readonly ConnectionMultiplexer redis;
    private readonly IDatabase db;
    private readonly DemoContext demoContext;
    private readonly int JoinCount = 100;
    public DemoController(DemoContext _demoContext)
    {
   
        redis = ConnectionMultiplexer.Connect("127.0.0.1:6379,password=1234567890");
        db = redis.GetDatabase();
        demoContext = _demoContext;
    }
    /// <summary>
    /// 列表页视图
    /// </summary>
    /// <returns></returns>
    public async Task<IActionResult> Index()
    {
   
        var dtos = await demoContext.Prize.OrderBy(h => h.Type).ThenBy(h => h.Id).ToListAsync();
        return View(dtos);
    }
    /// <summary>
    /// 添加奖品视图
    /// </summary>
    /// <returns></returns>
    public IActionResult Add()
    {
   
        return View();
    }
    /// <summary>
    /// 修改奖品库存视图
    /// </summary>
    /// <param name="id"></param>
    /// <returns></returns>
    public async Task<IActionResult> UpdateStock(int id)
    {
   
        
  • 7
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

隔壁程序员有话说

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值