Warmup
zero framework offers built-in support to handle any synchronous tasks that has to be completed before serving any requests.
It can be achieved using the onStatup method of the App.
zig
try app.onStatup(custom-handler);Example
- Refer following
zero-redisexample further to know more on getting started of this.
zig
pub fn main() !void {
var arena_instance = std.heap.ArenaAllocator.init(std.heap.page_allocator);
defer arena_instance.deinit();
const allocator = arena_instance.allocator();
const app = try App.new(allocator);
try app.onStatup(prepareCache);
try app.get("/redis", cacheResponse);
try app.run();
}
fn prepareCache(ctx: *Context) !void {
ctx.info("warming up the cache entries");
_ = ctx.Cache.send(void, .{ "SET", "msg", "zero redis message" }) catch |err| {
ctx.any(err);
};
// intentional delay to mimic cache preparation
std.Thread.sleep(std.time.ns_per_s);
ctx.info("cache prepared");
}
const Data = struct {
msg: []const u8,
};
fn cacheResponse(ctx: *Context) !void {
const reply = try ctx.Cache.sendAlloc([]u8, ctx.allocator, .{ "GET", "msg" });
defer ctx.allocator.free(reply);
try ctx.json(reply);
}Check out the zero-redis example code to understand the usage better
Recommendation
🚩 It is highly recommended to use the ctx allocator whenever possible, since it is tied up with request life-cycle, the de-allocation will be managed automatically and making sure the memory leak is not happening.

