要连接Redis,首先下载hiredis库,编译安装。然后用以下代码快速上手:#include <hiredis/hiredis.h> redisContext *c = redisConnect("127.0.0.1", 6379); if (c == NULL || c->err) { printf("连接失败 "); } redisReply *reply = redisCommand(c, "SET %s %s", "key", "value"); freeReplyObject(reply); reply = redisCommand(c, "GET %s", "key"); printf("%s ", reply->str); 这就是C语言连接Redis并存取数据的核心代码,运行后你就是Redis编程高手了!
基础连接与命令执行
hiredis是官方推荐的C客户端,轻量高效。安装后,redisConnect建立上下文,redisCommand发送命令,记得检查错误并释放reply对象。常见命令如SET、GET、DEL直接字符串格式化传入,就能高效存储数据。测试环境用Docker跑个redis服务器,端口6379默认就好。
处理List和Hash数据结构
用RPUSH添加列表元素:redisCommand(c, "RPUSH mylist %s %s", "item1", "item2"); 取出用LRANGE:redisCommand(c, "LRANGE mylist 0 -1"); Hash用HSET和HGET,比如用户数据:HSET user:100 name "Alice" age "25"; 读取HGETALL user:100。C语言就这样简单操作复杂数据。
发布订阅模式实现
订阅频道:redisCommand(c, "SUBSCRIBE news"); 发布:redisCommand(pubc, "PUBLISH news %s", "hello"); 需要两个上下文,一个订阅一个发布。循环redisGetReply处理消息,高效实现实时通信。
事务与Lua脚本
事务用MULTI EXEC:redisCommand(c, "MULTI"); redisCommand(c, "INCR counter"); redisCommand(c, "EXEC"); Lua脚本更强大,redisCommand(c, "EVAL %s 0", "return redis.call('SET', KEYS[1], ARGV[1])"); 原子性操作零风险。
连接池优化高并发
单连接不适合生产,自建池:用数组存多个redisContext,空闲时复用。线程安全加锁。配置timeout:redisContext *c = redisConnectWithTimeout("127.0.0.1", 6379, 2000); 避免阻塞,提升吞吐。
管道批量命令
redisAppendCommand(c, "SET key1 val1"); redisAppendCommand(c, "SET key2 val2"); redisGetReply(c, (void**)&reply); 减少RTT,速度翻倍。
FAQ
Q: hiredis怎么安装?
A: git clone https://github.com/redis/hiredis,cd hiredis && make && make install。
Q: 连接远程Redis需要密码吗?
A: 是,用redisConnectWithAuth(c, "password"); 先AUTH。
Q: 如何处理大key?
A: 用SCAN渐进迭代,避免阻塞:redisCommand(c, "SCAN 0 MATCH mykey*");
Q: C语言Redis集群支持?
A: hiredis-cluster库,自动分片路由。