首页 > 其他 > 详细

Redis定时任务

时间:2015-11-07 09:07:29      阅读:384      评论:0      收藏:0      [点我收藏+]

定时任务基础:

MQ:Message Queue
消息队列服务器:MSMQ、ActiveMQ、Redis等
项目任务:确定邮件的发送,重置密码的发送(发送可能会很慢,而且有可能还需要重试),用消息队列把注册过程和邮件发送过程分开

示例:

  //testMessageQueue.csProj

技术分享
namespace testMessageQueue
{
    class Program
    {
        static void Main(string[] args)
        {
            /*
            while(true)
            {
                string email=Console.ReadLine();
                using(IRedisClient client=RedisManager.ClientManager.GetClient())
                {
                    client.EnqueueItemOnList("TestEmail", email);
                }
            }
             */

            using(IRedisClient client=RedisManager.ClientManager.GetClient())
            {
                while(true)
                {
                    string email = client.DequeueItemFromList("TestEmail");
                    if(email==null)
                    {
                        Console.WriteLine("等待输入");
                        Thread.Sleep(100);
                        continue;
                    }
                    Console.WriteLine("发送邮箱:eamil=" + email);
                }
            }

            Console.ReadKey();
        }
    }


    public class RedisManager
    {
        public static PooledRedisClientManager ClientManager { get; private set; } //内部可写,外部只能读
        static RedisManager()
        {
            RedisClientManagerConfig redisConfig = new RedisClientManagerConfig();
            redisConfig.MaxWritePoolSize = 128;
            redisConfig.MaxReadPoolSize = 128;
            ClientManager = new PooledRedisClientManager(new string[] { "127.0.0.1" }, new string[] { "127.0.0.1" }, redisConfig); //在哪几个ip上进行集群的读写分离操作

        }
    }
}
testMessageQueue.csProj

 

定时任务框架:

   //testQuartz.csProj

namespace testQuartz
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        /// <summary>
        /// 定时任务
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnQuartz_Click(object sender, EventArgs e)
        {
            //每隔一段时间执行一个任务
            ISchedulerFactory sf = new StdSchedulerFactory();
            IScheduler sched = sf.GetScheduler(); //获得一个计划任务
            JobDetail job = new JobDetail("job1", "group1", typeof(MyJog)); ////MyJog为实现了IJob接口的类
            DateTime dt = TriggerUtils.GetNextGivenSecondDate(null, 2); //5秒后开始第一次运行
            TimeSpan interval = TimeSpan.FromSeconds(5); //时间段--每隔5s执行一次
            //每若干小时运行一次,小时间隔由appsettings中的IndexIntervalHour参数指定
            Trigger trigger = new SimpleTrigger("trigger1", "group1", "job1", "group1", dt, null, SimpleTrigger.RepeatIndefinitely, interval);
            sched.AddJob(job, true);
            sched.ScheduleJob(trigger);
            sched.Start();
        }

    }
    class MyJog : IJob
    {
        public void Execute(JobExecutionContext context)
        {
            MessageBox.Show("我执行了l");
        }
    }
}

实例:

 

Redis定时任务

原文:http://www.cnblogs.com/adolphyang/p/4944273.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!