forum
forum copied to clipboard
【Zig 日报】2024-04-19 Redis, but in Zig
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");
}
},