// poller.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) } } // Poll checks Redis to determine whether scheduled tasks need to be run or not. func Poll(interval time.Duration, done <-chan os.Signal) { ticker := time.NewTicker(interval) for { select { case <-ticker.C: fmt.Print("> Checking for scheduled tasks... ") nowUnix := time.Now().Unix() response := redisConn.Cmd("ZRANGEBYSCORE", "jobs:scheduled", "-inf", float64(nowUnix)) tasks, _ := response.List() if len(tasks) == 0 { fmt.Println("No tasks found.") } for _, task := range tasks { fmt.Printf("Queue task: %s\n", task) redisConn.Cmd("ZREM", "jobs:scheduled", task) } case <-done: fmt.Println("Shutting down poller") return } } } func main() { c := make(chan os.Signal) signal.Notify(c, os.Interrupt) fmt.Println("Polling Redis every 15 seconds for scheduled tasks...") Poll(15 * time.Second, c) }