redis是一個開源的使用ansi c語言編寫、支持網(wǎng)絡(luò)、可基于內(nèi)存亦可持久化的日志型、key-value數(shù)據(jù)庫,并提供多種語言的api。redis提供五種數(shù)據(jù)類型:string,hash,list,set及zset(sorted set)。
利用redis可以很方便的實現(xiàn)一個任務(wù)隊列。
隊列的基本功能:
1、立即執(zhí)行;yes
2、延遲執(zhí)行;yes
3、保證至少執(zhí)行一次;yes
4、必須執(zhí)行且最多執(zhí)行一次;no
用到的數(shù)據(jù)結(jié)構(gòu):
list、sorted sets
延遲執(zhí)行的機(jī)制:
1、先把數(shù)據(jù)放入sortedsets類型的queues:queue_000:delayed中
2、在執(zhí)行pop的時候,執(zhí)行l(wèi)ua腳本,把sortedsets類型的queues:queue_000:delayed 中可以執(zhí)行的數(shù)據(jù)rpush到list類型的queues:queue_000中
保證執(zhí)行成功的機(jī)制:
1、把要執(zhí)行的數(shù)據(jù)先放入sortedsets類型的queues:queue_000:reserved中
2、在執(zhí)行pop的時候,執(zhí)行l(wèi)ua腳本,把sortedsets類型的queues:queue_000:reserved 中可以執(zhí)行的數(shù)據(jù)rpush到list類型的queues:queue_000中
3、任務(wù)執(zhí)行成功,從sortedsets類型的queues:queue_000:reserved中執(zhí)行刪除預(yù)存的數(shù)據(jù)