Redis 并发控制

背景

开发活动报名业务,涉及到活动人数限制的问题,当并发量上来的时候,多人同时提交报名信息,将会导致活动已报名人数的不准确,对业务造成影响,如下图:

分析出现问题的原因是,设置操作发生的时候,并没有确保当前人数的准确性,即没有确保当前查询出来的已报名人数与数据库的一致性,导致客户端并发的两次操作有被覆盖的情况发生

传统数据库 VS NoSql

mysql

针对如上场景,若报名人数字段保存在mysql数据库中,可以使用一种常见的降低读写锁冲突,保证数据一致性的乐观锁机制(Compare and Set CAS),实现方案如下

将原来的操作sql代码

update act set num=#{numNew} where actId=#{actId}

改为

update act set num=#{numNew} where actId=#{actId} and num=#{numOld}

即只有当查询出来的数据与当前数据库的数据一致时,才可以进行赋值操作,否则失败

redis

若使用redis,则活动报名人数以键值对的形式存在内存中,业务代码将会对内存中的人数进行操作,相比mysql,redis的效率更高,不会造成很大的延迟(若当并发量很大时,使用mysql进行报名人数记录,CAS的方案将会导致很多客户端操作失败,用户体验不好),但使用redis,其没有很好的事务支持,以上mysql的解决方案不能很好的运用在redis上,因此如何设计redis锁,进行共享资源(已报名活动人数)的操作,是需要解决的问题

继续阅读全文 “Redis 并发控制”

Python 有没有站到风口上?

前言

熟悉我的同学都知道4-5月份在知乎上我开了三炮:

  1. Python技术分享的乱象
  2. 《如何选择Python版本2还是3》涉嫌大量的「抄袭」
  3. 我不认识Pythoner这种开发者

另外也回答了对于知乎Python话题下大量的入门爬虫教程的成因,详见《python分享中初级爬虫教程泛滥是否有其语法特征和生态环境的锅?》

当时看起来,没人出来说话,我再不说话,知乎就要成为营销号收智商税最好的去处了,本着治病救人的原则,我隐晦的警告那些以为关注了Python话题的知友智商都不够用的人们。

开炮之后,知乎的Python话题的风气好了很多,动机不纯的人基本都开始夹起尾巴,而那些营销号也大多被封号或者退出知乎了。自认为这是一次有意义的胜利。

今天我又要小开一「炮」,前方高能,非战斗人员速速撤离。

我为什么要在公众号里说这个话题?

基于个人兴趣和工作需要,我关注了架构、前端、产品、运维、Linux以及Python的一些公众号,可以趁着上下班的分散时间充电。不过我最近发现了一个新现象,智商税已经开始往讲Python的公众号上来了,我每周都能看到某些公众号会发各种培训、收费课程的软广,以及一些低质量的技术大会。

当知乎粉丝、知乎专栏、微信公众号订阅人数到一定量的话,就会有人联系你,通过转发或者自编辑软广文章、文章尾部加二维码导流等方式变现。通过这多半年的积累,我的专栏和公众号也被盯上了,基本上市面上你们能看到的软广也会找到我,不过我都是拒绝或者置之不理的。

我和钱有仇么?显然不是,我还挺喜欢钱的,有了它可以过更好的生活。如果按照每周接一个软广的频率,这个月的生活费就出来了。不过,作为一个还在写代码的开发者,我还是得对自己的读者负责,所以无论是现在还是未来,你们都不会从我这里获得有被收税风险的内容。这里打个广告,外面坏人太多,欢迎关注本公众号和同名知乎专栏。

插个题,可能有一些内心阴暗的人会觉得我给《流畅的Python》背书这事儿背后是挣了钱的,我也先解释下,首先是英子送我一本(嗯,确实有收益),之后的推荐和赠书活动都是我主动和英子提的。一切我认为好的、对读者有益有用、但是大家不怎么知道它的好的东西我都愿意出来背书。

另外就是给大家普及一点常识:如果没有一个团队或者公司的支持,个人开发者是不可能做成每日都完成高质量的原创文章的。一周写2篇,坚持2个月我就认为灰常灰常厉害了,相信运营过知乎专栏或者公众号的应该都深有体会。既然持续高质量输出这么难,怎么留下并让公众号订阅者高度增长呢?这是一个挺有意思的话题,其中最常见的当然是每天花时间在网上找已经发过的文章,有点道德的人会联系原作者获得授权,有些嘛,直接拿走不谢。还有就是跟踪国外的一些相关技术网站,翻译人家的文章。总体来说,让读者觉得领域不重复,内容不腻就能保持住增长,而且还很容易出现引发热议的爆款文章,这种文章通常能带到3-4倍的阅读和关注量,成本却很低。

继续阅读全文 “Python 有没有站到风口上?”