Redis使用ServiceStack.Redis驱动问题

IS-NULL 2017-12-11 11:31:34
现在有这么一个业务场景,也就是商品抢购问题,我已经先把存存数量放在redis里面,用户抢购成功一个存库-1,然后加入消息队列中去。

并发测试的时候如何用redis的怎么方法来控制这个并发?
...全文
207 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
引用 3 楼 chen276675678 的回复:
一个线程来运行,没有问题,我开启了多个线程来执行这个方法就会提示什么43ok错误
“线程、Queue”,这些其实都是设计问题。考虑一下重新设计把。
  • 打赏
  • 举报
回复
技术上的加锁看似高大上,其实是性能杀手。能用业务设计模式来解决的,就不要用简单的数据库或者线程技术来解决。一定要首先考虑从高层次业务逻辑设计,技术永远是低层次的东西。 秒杀商品核心就是避免“事务、排队”等概念,所以才会脱离开传统的数据库系统而用一个内存数据库来暂存中间数据。那么这个时候这个系统的数据结构要体现强离散化、纯内存处理的基本特征。
IS-NULL 2017-12-12
  • 打赏
  • 举报
回复
一个线程来运行,没有问题,我开启了多个线程来执行这个方法就会提示什么43ok错误
  • 打赏
  • 举报
回复
不要搞什么“库存”。比如说1000个手机,那么你应该把1000个手机的单品id分别保存,然后抢购一个就移除一个id,根本不是什么“库存-1”算法逻辑。单品管理,避免加锁,绝不排队。
IS-NULL 2017-12-12
  • 打赏
  • 举报
回复
引用 1 楼 peng2739956 的回复:
你都说了 队列了。 你不明白队列是啥还是怎么着,另外 你REDIS 要做缓存呢还是做队列。 A,B->下单-》队列。 查询队列。取队列-》逻辑处理 。
普通的我懂,我问的是么控制并发的问题

        public static void RunTest()
        {
            for (int i = 1; i < 500; i++)
            {
                using (RedisCach.Acquire("testlock"))
                {
                    var num = RedisCach.Get<int>("mykeys");
                    if (num < 20)
                    {
                        RedisCach.Incr("mykeys");
                        Thread.Sleep(100);
                        RedisCach.AddQueue("myqueue", "123");
                    }
                }
            }
            Console.WriteLine("线程结束:" + RedisCach.Get<int>("mykeys"));
        }
peng2739956 2017-12-11
  • 打赏
  • 举报
回复
你都说了 队列了。 你不明白队列是啥还是怎么着,另外 你REDIS 要做缓存呢还是做队列。 A,B->下单-》队列。 查询队列。取队列-》逻辑处理 。

62,067

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧