add redis as queue backend; refactor to client/server pattern