问题标签 [hiredis]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
227 浏览

c - 将整数的“无序集”存储为redis中的值的有效方法?

我需要存储大约 1.5 亿个键值对,其中键是整数,值是一组整数(无序)。我在我的个人桌面上使用 redis 作为单个实例,具有 32 GB RAM 和一个具有 8 个内核的 CPU。

我为此使用“SADD”命令。我使用的客户端是hiredis,以及流水线。因此,命令将如下所示:

执行时间: 使用 linux 中的“time”命令,我得到以下结果:

实际:8m 30s
用户:5m 18s
系统:0m 7s

内存使用:
在redis中,数据库占用大约18GB,redis的内存占用增长到28GB。
一个键看起来像这样“94190049249988”。
“keys.bytes-per-key”:(整数)1830。

以下是我尝试过的优化,以提高速度并减少内存占用:-

1)流水线以提高速度。
2)存储整数集以减少内存占用。这使用 int-set 编码。

是否有一种内存和速度有效的方式来存储这 1.5 亿个键值?
我应该以某种方式使用其他数据类型,如 HSET 吗?那会有帮助吗?
我可以尝试其他优化吗?

我的用例推荐任何其他数据存储也将不胜感激。

0 投票
0 回答
73 浏览

c++ - hiredis 消息未到达订阅的处理程序

我一直hiredis作为客户工作setpublishsubscribe. 当我尝试发布到我订阅的频道时,我可以订阅但无法收到任何消息。这是我正在使用的代码:

和消息功能:

还有什么我应该做的吗?

0 投票
2 回答
370 浏览

c - 为什么hiredis函数使用void*而不是redisReply*?

我是hiredis的新手并使用v0.13。我注意到hiredis.h处理redisReply*对象的 API 函数都使用void*. 例如,

返回一个redisReply*对象(或NULL);

通过;输出一个redisReply*对象reply

是,根据代码注释,“释放回复对象的函数hiredis默认返回。”</p>

我在这里遗漏了什么——为什么这些函数使用void*而不是redisReply*

0 投票
0 回答
85 浏览

redis - 有没有办法模拟 memcpy 将值存储到 redis 键?

我有一个数据缓冲区,我想将其设置/存储到 redis 数据库中,以供下游模块重用/获取。我有一个指向数据缓冲区的指针,我想直接从缓冲区指针模拟某种 memcpy 到 redis 键值,并且我知道要复制的数据的确切长度。

我可以分两个阶段做到这一点

1) Fwrite 缓冲区到一个文件说 buffer.bin 的大小数据长度 2) 模拟'redis-cli -x set buffer1

我确认我可以使用 redis-cli -x get buffer1 > /home/buffer-copy.bin 取回文件内容

但是,如果我可以将内存指针直接保存到 redis 键值中,我想避免额外的文件操作,我认为这是完全冗余/昂贵的操作。您能否分享您对我如何做到这一点的想法?

编辑:尝试使用“C”hiredis接口访问redis

0 投票
2 回答
741 浏览

c - 在 Mac OS X 上用 C 编译hiredis

我正在尝试使用hiredisin编译客户CMac OS X

我已经安装hiredis了:

但仍然得到错误:

然而,我hiredis.h在:

我如何告诉编译器这个?

我正在编译:

0 投票
1 回答
210 浏览

c - hiredis 在主机名中使用用户名和密码失败

我正在尝试运行hiredisCCentOS

以下代码似乎运行良好:

但是,当我尝试在 url 中针对 which require 运行它时,例如Compose.comusernamepassword

然后它会失败而没有特定错误。简单的:

0 投票
1 回答
524 浏览

c - hiredis 使用 TLS 失败

我有以下代码用于RedisC. 基地在hiredis.

但是,它不断失败:

错误为空白,我无法控制Redis服务器。

如何调试?

redisSecureConnection(c, ca, cert, key, "sni")似乎回来了-1

Wireshark输出以下内容:

这表明没有SSL/TLS曾经尝试过,没有Client Hello等。

如果我与NodeJS客户一起尝试,我会得到这个,并且一切正常:

0 投票
0 回答
216 浏览

c - 在 CentOS 上编译 C 到静态库

我可以使用以下参数编译和运行我的应用C程序:CentOS

但是我需要在无法编译或下载 ex 的机器上运行该应用程序。hiredis.

所以我需要自己编译所有东西CentOS——这在设置中是匹配的。

我已经阅读了有关该static标志的信息,但是这样做时出现以下错误:

我究竟做错了什么?

0 投票
1 回答
806 浏览

c - 无法获取 HiRedis TLS example-ssl 进行连接

我正在尝试使用 HiRedis API 执行与 Redis 服务器的 TLS 连接,该服务器位于可以执行 TLS 终止的设备的前面。我的项目需要通过 Internet 将客户数据发送到托管在云中的 Redis 服务器。我需要使用 TLS 保护数据。

我看到 HiRedis 对 TLS 连接提供了一些有限的支持。我创建了一个原型来试用 TLS 代码。

  1. 我有一台位于 AWS eu-west-1 的服务器机器。我已经通过各种方式确认我可以使用 HiRedis 0.14.0 在端口 6379 上插入记录。

  2. 我在 eu-west-1 有一个 AWS 网络负载均衡器。我有一个带有私有证书的端口 443,该证书将目标组连接到 Redis 服务器的端口 6379。我还打开了端口 6379,将端口 6379 连接到 Redis 服务器。我已经确认后一个连接确实使用hiredis“示例”编译程序工作。

  3. 我在 us-east-1 中有一个 AWS 云实例,用作我的客户端机器。我已经安装了hiredis 0.14.0 并使用OpenSSL 库编译了示例。我已将私有证书和私有密钥安装/复制到这台机器上。如上所述,我可以在端口 6379 上使用“示例”程序并在 Redis 服务器上创建示例数据。

但是,在尝试 TLS 连接时,我得到以下信息:

示例 SSL 文件可以在这里找到: https ://github.com/redis/hiredis/blob/master/examples/example-ssl.c

我的 HiRedis 版本有 sslio.c,但它似乎在 master 分支中重命名为 ssl.c: https ://github.com/redis/hiredis/blob/master/ssl.c

我如何得到这份工作?

当我打字时,我想到我应该使用客户端证书和私钥(不要使用服务器证书和密钥)。我尝试了https://gist.github.com/mtigas/952344中的说明来生成客户端证书和密钥,但我仍然无法让 example-ssl 工作。

0 投票
1 回答
429 浏览

c++ - hiredis SET 遇到分段错误

我正在尝试SET使用hiredis将结构构建到Redis中:

然而,这在hiredis内部的某个地方遇到了分段错误。

this->redis, path, 并stat具有适当的值。GET命令工作并提供 NIL 回复类型(因为 Redis 为空)。

我究竟做错了什么?