Queue, Stack and Priority Queue built on Redis
Project description
Fastrq - Queue, Stack and Priority Queue built on Redis
Features
- Abstract Queue, Deque, Capped Queue/Deque, and Overflow-able Capped Queue/Deque
- Abstract Stack, Capped Stack
- Abstract Priority Queue, Capped Priority Queue and Overflow-able Capped Priority Queue
- Push and Pop support batch operation
- Using Lua scripts to save RTT (Round Trip Time)
- Support getting indexes of members
- Support pushing only if a member not already inside the queue
- Support pushing only if the queue already exists/not already exist
- All operations are
atomic
Requirements
- Redis >=3.0.2
- Python 2.7 or >=3.4
Installation
via pip
pip install fastrq
or from source
python setup.py install
Usage
from fastrq.queue import Queue, CappedQueue
from fastrq.deque import Deque
from fastrq.stack import Stack
from fastrq.priorityqueue import PriorityQueue
# queue
q = Queue("fastrq_queue")
q.push(1)
q.push([2, 3])
q.push_ni(1) # got [3, False]. `ni` stands `not inside`
q.push_ae(1) # got 4. `ae` stands `already exists`
q.push_ne(1) # got False. `ne` stands `not already exist`
q.ttl(10) # set the lifetime in seconds
q.range(0, -1) # got ['1', '2', '3']
q.range(0, 1) # got ['1', '2']
q.indexof_one(1); # got 0
q.indexof_one(2); # got 1
q.indexof_one(4); # got None
q.indexof_many([1, 2, 4]); # got {1: 0, 2: 1, 4: None}
# push only if the member not inside the queue
q.push_ni(4) # got [4, True]
q.pop()
q.pop(2)
q.destruct() # destruct the queue
cq = CappedQueue("fastrq_capped_queue", 3)
cq.push(1)
cq.push(2)
cq.push([3, 4]) # got "err_qof"
cq.push(3)
cq.push(4) # got "err_qf"
of_cq = OfCappedQueue("fastrq_of_capped_queue", 3)
of_cq.push(1)
of_cq.push([2, 3, 4]) # "1" would be forced out
# deque
dq = Deque("fastrq_deque")
dq.push_front([1, 2])
dq.push_back([3, 4])
dq.pop_front()
dq.pop_back()
dq.push_front_ni(3)
dq.push_back_ni(5)
# priority queue
pq = PriorityQueue("fastrq_priority_queue")
pq.push({'alibaba': 1})
pq.push({'google': 0, 'microsoft': 2})
pq.indexof_one('google'); # got 0
pq.indexof_one('alibaba'); # got 1
pq.indexof_one('baidu'); # got None
pq.pop()
pq.pop(2)
pq.push_ni('ibm', 4)
pq.push_ni('amazon', 5)
# stack
s = Stack("fastrq_stack")
s.push([1,2,3])
s.indexof_one(1); # got 2
s.indexof_one(2); # got 1
s.indexof_one(3); # got 0
s.pop()
s.push_ni(4)
Data types
Queue
- first in and first out
- unlimited capacity
- support batch push and batch pop
Deque
Derive from queue with more features
- support push front and push back
- support pop front and pop back
Capped Queue/Deque
Derive from queue/deque with more features
- Have fixed capacity
- Push to a full one would fail
- Push to one whose positions are not enough would fail
Overflow-able Capped Queue/Deque
Derive from capped queue/deque with more features
- The queue length would never exceed its capacity
- Push to an end would force out from the other end if one is full
Stack
- Last in and First out
- Unlimited capacity
- Support batch push and batch pop
Capped Stack
Derive from Stack with more features
- Have fixed capacity
- Push to a full capped stack would fail
- Push to a capped stack whose positions are not enough would fail
Priority Queue
- The lower the score, the higher the priority
- Unlimited capacity
- Support batch push and batch pop
Capped Priority Queue
Derive from Priority Queue with more features
- Have fixed capacity
- Push to a full one would fail
- Push to a capped one whose positions are not enough would fail
Overflow-able Capped Priority Queue
Derive from Capped Priority Queue with more features
- The queue length would never exceed its capacity
- Push to would force out the lowest priority if queue is full
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
fastrq-0.2.0.tar.gz
(10.3 kB
view details)
Built Distribution
File details
Details for the file fastrq-0.2.0.tar.gz
.
File metadata
- Download URL: fastrq-0.2.0.tar.gz
- Upload date:
- Size: 10.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/1.12.1 pkginfo/1.4.2 requests/2.21.0 setuptools/40.6.3 requests-toolbelt/0.8.0 tqdm/4.28.1 CPython/3.4.3
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 007ea721b0c189a66942a506c9c05666d0bdf4e7452123cc404149e99981b5a2 |
|
MD5 | 3de52b9215895f9bd9dc234dd9bd535b |
|
BLAKE2b-256 | 5a01c791bd98f03f7d5dff086bc6f397e619afde2cc979aaf7f7f1d2ebe12abb |
File details
Details for the file fastrq-0.2.0-py2.py3-none-any.whl
.
File metadata
- Download URL: fastrq-0.2.0-py2.py3-none-any.whl
- Upload date:
- Size: 12.8 kB
- Tags: Python 2, Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/1.12.1 pkginfo/1.4.2 requests/2.21.0 setuptools/40.6.3 requests-toolbelt/0.8.0 tqdm/4.28.1 CPython/3.4.3
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 909ba63b3630057e8319ed9818c935cf47ad44973cf9186c4cdc09c22152746b |
|
MD5 | dce48d0e3bd48bdbfea84f2fc4fa51e4 |
|
BLAKE2b-256 | 45c66249ca26565817b66874b645dec8af80185d6c0f1d59d662b23adf9b97c8 |