forum icon indicating copy to clipboard operation
forum copied to clipboard

【Zig 日报】2024-04-19 Redis, but in Zig

Open jiacai2050 opened this issue 1 year ago • 0 comments

KVcache 是社区的一个新项目,用 Zig 来重新实现一个 Redis 协议兼容的 KV 数据库,目前看这个项目还刚开始起步,但基本架子已经搭好了,感兴趣的朋友可以参与进去一起共建。

这是已经支持的命令

switch (packet) {
    .simple_string => {
        if (std.mem.startsWith(u8, packet.simple_string, "PING")) {
            try stream.writeAll("+PONG\r\n");
        }
    },

    .array => {
        const command = packet.array.items[0].str;

        // TODO: safety checks
        if (std.mem.eql(u8, command, "PING")) {
            try stream.writeAll("+PONG\r\n");
        } else if (std.mem.eql(u8, command, "CLIENT")) {
            try handleClient(client, alloc, packet, &stream);
        } else if (std.mem.eql(u8, command, "SET")) {
            const value = try alloc.dupe(u8, packet.array.items[2].str);
            try store.put(packet.array.items[1].str, value);

            try stream.writeAll("+OK\r\n");
        } else if (std.mem.eql(u8, command, "GET")) {
            if (store.get(packet.array.items[1].str)) |val| {
                const out = Packet{ .bulk_string = val };

                try stream.writeAll(try out.serialize(alloc));
            } else {
                try stream.writeAll("$-1\r\n");
            }
        } else {
            // just pretend like we know what we are doing...
            try stream.writeAll("+OK\r\n");
        }
    },

jiacai2050 avatar Apr 19 '24 01:04 jiacai2050