Redis Example
This example showcases how to interact with Redis using middlewares in Garden.
In the Gardener
class, you specify the middlewares you wish to utilize. In this instance, we are employing the RedisMiddleware
with configured connection details. Additionally, we establish two tasks: one for writing data to Redis (Test Task - SET
) and another for retrieving the data (Test Task - GET
).
When using RedisMiddleware
, an object named redis
will be mounted under each task's objects
property. The objects
are also accessible under the Gardener
itself.
The SET
task will execute repeatedly for five times. In each iteration, it sets a number to a list in Redis.
Subsequently, the GET
task will run only once, with a one-second delay before it is triggered. This implies that by the time it runs, the SET
task would have already completed writing data into Redis.
Code
# examples/use_redis.py
from garden import Gardener, Hedgehog
from garden.middlewares.redis import RedisMiddleware
from redis.asyncio import StrictRedis
class TestGardener(Gardener):
'''
TestGardener shows how to connect to Redis.
'''
middlewares = [
RedisMiddleware.config(host='redis.me'),
]
@Gardener.task('Test Task - SET', repeat=5)
async def test_task(self, task: Hedgehog):
r: StrictRedis = task.objects.redis
await r.rpush('test', task.run_count + 1)
task.log(f'test task executed: {task.run_count + 1}')
@Gardener.task('Test Task - GET', repeat=False, delay=1)
async def test_task(self, task: Hedgehog):
r: StrictRedis = task.objects.redis
result = await r.lrange('test', 0, -1)
task.log(f'test task executed: {result}')
if __name__ == '__main__':
TestGardener(name='TG').start()
NOTE: For any parameters in the form of key-value pairs that you wish to pass to the initiation of the Redis client, you can pass them as keyword arguments to the config
method of RedisMiddleware
.
Output
> python examples/use_redis.py
2025-03-31 03:59:46 INFO::Hedgehog [Test Task - SET] created
2025-03-31 03:59:46 INFO::Hedgehog [Test Task - GET] created
2025-03-31 03:59:46 INFO::TestGardener [TG] initiated
2025-03-31 03:59:46 INFO::TestGardener [TG] preparing
2025-03-31 03:59:46 INFO::MiddlewareManager registering middlewares[RedisMiddleware]
2025-03-31 03:59:46 INFO::Middleware [redis] Redis initialized: 7.4.1
2025-03-31 03:59:46 INFO::TestGardener [TG] ready
2025-03-31 03:59:46 INFO::TestGardener [TG] running
2025-03-31 03:59:46 INFO::Hedgehog [Test Task - SET] running
2025-03-31 03:59:46 INFO::Hedgehog [Test Task - GET] running
2025-03-31 03:59:46 INFO::Hedgehog [Test Task - GET] paused
2025-03-31 03:59:46 INFO::Hedgehog [Test Task - GET] starting to run in 1.00 seconds
2025-03-31 03:59:46 INFO::Hedgehog [Test Task - SET] test task executed: 1
2025-03-31 03:59:46 INFO::Hedgehog [Test Task - SET] test task executed: 2
2025-03-31 03:59:46 INFO::Hedgehog [Test Task - SET] test task executed: 3
2025-03-31 03:59:46 INFO::Hedgehog [Test Task - SET] test task executed: 4
2025-03-31 03:59:46 INFO::Hedgehog [Test Task - SET] test task executed: 5
2025-03-31 03:59:46 INFO::Hedgehog [Test Task - SET] terminated
2025-03-31 03:59:47 INFO::Hedgehog [Test Task - GET] running
2025-03-31 03:59:47 INFO::Hedgehog [Test Task - GET] test task executed: [b'1', b'2', b'3', b'4', b'5']
2025-03-31 03:59:47 INFO::Hedgehog [Test Task - GET] terminated
2025-03-31 03:59:47 INFO::TestGardener [TG] stopped
2025-03-31 03:59:47 INFO::MiddlewareManager deregistering middlewares[RedisMiddleware]
2025-03-31 03:59:47 INFO::Middleware [redis] Redis connection closed
2025-03-31 03:59:47 INFO::TestGardener [TG] terminated
2025-03-31 03:59:47 INFO::TestGardener [TG] exited