redisでkeyが期限切れになったイベント

5319 ワード

新会社に着いたばかりの1ヶ月ほどで、ユーザーの登録時間の3日後にユーザーにメッセージをプッシュするなど、タイミングタスクをしたいという新しいニーズがあります.
最初から頭の中に浮かんだデータベースポーリングは、すぐに否定(リソースの浪費)し、linuxシステムのタイミングタスクまでですが、ユーザー量が多すぎると、絶対にだめです.
 
最後にredisがkeyが期限切れになった場合、トリガされたイベントをリスニングできるかどうかを考えます.これにより、メッセージを送信する時間になったかどうかを常にクエリしなくても、リソースを節約できます.
最終的にredisのkey期限切れイベントが見つかりました.redisの有効期限を傍受することで、有効期限が切れたときにイベントをトリガーし、このイベントを通じて他のことをします.
 
操作手順(liunxシステム):
1.redisを見つけます.confプロファイルは、コマンドfind/|grep redis.conf
2.プロファイルを変更し、notify-keyspace-eventsを見つけ、デフォルトはコメントされ、notify-keyspace-events Exに変更
# K         , __keyspace@__   
# E         , __keysevent@__   
# g    del , expipre , rename              , ...
# $    String  
# l    List  
# s    Set  
# h    Hash  
# z          
# x        (  key     )
# e        ( key           )
# A    g$lshzxe   ,  ”AKE”        

3.redisを再起動する.入力コマンド:service redis-server restart
4.pythonコードの作成:
redis_fabu.py
import redis
import time
r = redis.Redis(host='127.0.0.1', port=6379, db=0)
# r.publish('fm87.7', 'send msg') #
r.setex(name='test-name',value='val',time=1)

redis_dingyue.py
import redis

r = redis.Redis(host='127.0.0.1', port=6379, db=0)
# sub.subscribe('fm87.7') #
sub_expire = r.pubsub()
# Redis (pub/sub) , __keyevent@0__:expired, 0 dbindex
sub_expire.subscribe('__keyevent@0__:expired')

while True:
    ex_pire=sub_expire.parse_response()
    print(ex_pire[0],ex_pire[1],ex_pire[2])

出力結果:
b'subscribe' b'__keyevent@0__:expired' 1
b'message' b'__keyevent@0__:expired' b'test-name'

 
Notice:
1.redisのkey期限切れイベントは、返された結果が得られたときにkeyの値であるため、関連タスクを行うときにkey名を実行する必要がある関数名などに書くことができる.
2.redisのkey期限切れイベントは、サブスクリプションをパブリッシュするメカニズムによって、key期限切れパブリケーションによってイベントがトリガーされたときにサブスクリプションサービスがなければ、この期限切れイベントは破棄されます.つまり、期限切れイベントがパブリッシュされますが、サブスクリプションされたかどうかは判断できません.また、今回の期限切れイベントは保存されません.購読メカニズムが完全であることを常に確保しなければならない.
3.  sub_expire.subscribe('__keyevent@0__:expired')中_keyevent@0__:expiredの0はデータベースindexを表し、本データベースの期限切れイベントのみがトリガーされることを示します.
4.redisはメモリに格納されているため、ハードディスクへのバックアップをしっかりと行い、データ損失を最小限に抑える.
 
 
関連接続:
https://www.jianshu.com/p/eb27967739cd
https://www.jianshu.com/p/eb27967739cd
http://www.cnblogs.com/wujf/p/8080109.html
https://www.cnblogs.com/chen-lhx/p/6626371.html
https://blog.csdn.net/qq744746842/article/details/70195945
転載先:https://www.cnblogs.com/rgcLOVEyaya/p/RGC_LOVE_YAYA_692days.html