首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python 学习手册
Python Cookbook
Python 基础教程
Python Sites
PyPI - Python Package Index
http://www.simple-is-better.com/
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
V2EX  ›  Python

定时给达到条件的用户发送短信问题

  •  
  •   334862132 · 41 天前 · 1266 次点击
    这是一个创建于 41 天前的主题,其中的信息可能已经有所发展或是发生改变。
    以前接到一个需求,定时给注册一半的用户发送短信,我设计的实现方法是先把用户在 redis 中缓存,之后设置一个过期时间,然后每半小时检索一次对达成条件的用户进行短信发送,然后最近随手点开一个 app,人家的短信推送竟然能精确到分钟,我如果也把 redis 缓存做成分钟缓存,每一分钟执行一次感觉对服务器压力很大,如果不是用定时任务一分钟检索一次去发送短信的话还有哪种方法能达到优化的效果?
    求大神指点~!
    16 回复  |  直到 2019-01-14 12:37:37 +08:00
        1
    jiangnanyanyu   41 天前 via Android   ♥ 1
    要搞成那种 reactive 模式的
        2
    qile1   41 天前 via Android   ♥ 1
    用数据库的触发器可以做到实时发送
        3
    334862132   41 天前
    @qile1
    @jiangnanyanyu
    谢谢,等我研究一下这俩种方法
        4
    tomczhen   41 天前   ♥ 1
    触发一个延迟任务,任务检查用户操作进度,根据条件执行业务逻辑。
        5
    ankle306   41 天前   ♥ 1
    mq,延迟消息
        6
    KasuganoSoras   41 天前   ♥ 1
    用 php 写一个小脚本就可以
    写了一个简单的例子给你: https://github.com/kasuganosoras/SomeCodes/blob/master/v2ex_526598.php
    具体的你自己改一下就可以了
        7
    xiangyuecn   41 天前   ♥ 1
    对服务器压力很大 亮了
    也许 99.9% 的定时任务回调对服务器一点影响没有也说不一定呢

    如果你的每天注册的用户是海量的。。会发现这是矛盾的。。因为那时候,可能并不会用一个任务通过一次来处理所有的数据

    先让任务使劲搞,后面如果服务器确实因为这个任务产生了影响,那就再想办法呗,干嘛提前优化?
        8
    richzhu   41 天前 via iPhone   ♥ 1
    有要求一分钟之内全发完吗? 弄个队列,让它慢慢发去不就好了,除非你的用户真的是很多…… 那样的话就不要想着用一个计划任务,或者一次处理就弄好呢
        9
    jimrok   41 天前   ♥ 1
    1 分钟对 redis 不会有太大的影响,一分钟做个一个 set。正经的途径是做个时间轮。
        10
    334862132   40 天前
    @KasuganoSoras 我是写 python 的,我自己的脚本把 1 小时改成 1 分钟就可以了,不过仍然谢谢
        11
    334862132   40 天前
    @xiangyuecn @richzhu 嗯 可能是我杞人忧天吧, 我很不要脸的表示 除了定时任务脚本我写的 发短信都不是我写的, 那短信接口用 TM 同步,都神逻辑,因此我怕对服务器压力大,我不过顺口提了一嘴,人家不改我也没办法,另外说一下 我们用的是 django,要是用 tornado 用同步我就忍了......
        12
    334862132   40 天前
    @tomczhen 延时任务总是查单个用户,感觉还不如一分钟查一下把符合条件的都拽出来呢,查询的次数更少,性价比更高呢
        13
    334862132   40 天前
    @jimrok 谢了 时间轮是个不错的想法
        14
    ShangAliyun   40 天前   ♥ 1
    这种一般是定时执行的,比如每天早上 10 点
        15
    Raymon111111   40 天前   ♥ 1
    让 key 的维度是分钟粒度的, 然后每分钟去轮询.

    压力不会大的, 相信我.
        16
    tomczhen   40 天前   ♥ 1
    @334862132 数据库锁的粒度不同。
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   940 人在线   最高记录 4385   ·  
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 20ms · UTC 18:41 · PVG 02:41 · LAX 10:41 · JFK 13:41
    ♥ Do have faith in what you're doing.
    沪ICP备16043287号-1