// scheduler.go package main import ( "fmt" "os" "os/signal" "time" "github.com/fzzy/radix/redis" ) var redisConn *redis.Client func init() { var err error if redisConn, err = redis.Dial("tcp", "127.0.0.1:6379"); err != nil { panic(err) } } // PerformIn schedules a given task to be executed in the given duration. func PerformIn(in time.Duration, task string) { at := time.Now().Add(in) PerformAt(at, task) } // PerformAt schedules a task to be executed at a given time. func PerformAt(at time.Time, task string) { fmt.Printf("> Scheduling %s with score %d\n", task, at.Unix()) redisConn.Cmd("zadd", "jobs:scheduled", float64(at.Unix()), task) } func main() { at, _ := time.Parse("2006-Jan-02", "2016-Jan-01") PerformAt(at, "Happy New Year!") PerformIn(2 * time.Minute, "Snooze wakeup alarm!") }