about summary refs log tree commit diff
path: root/lib/presque/Role/Queue.pm
blob: 6ac0e8a03f576b65fc2c94f8267e3b0a0eacc909 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
package presque::Role::Queue;

use Moose::Role;

sub new_queue {
    my ($self, $queue_name, $lkey) = @_;
    $self->application->redis->sadd('QUEUESET', $lkey);
    my $ckey = $self->_queue_stat($queue_name);
    $self->application->redis->set($ckey, 1);
}

sub push_job {
    my ($self, $queue_name, $lkey, $key, $delayed) = @_;
    my ($method, @args) = ('rpush', $lkey, $key);

    if ($delayed) {
        $method = 'zadd';
        @args = ($queue_name . ':delayed', $delayed, $key);
        $self->application->redis->get(
            $self->_queue_delayed_next($queue_name),
            sub {
                my $val = shift;
                if (!$val || ($val && $val > $delayed)) {
                    $self->application->redis->set(
                        $self->_queue_delayed_next($queue_name), $delayed);
                }
            }
        );
    }
    $self->application->redis->$method(@args,);
}

1;