問題タブ [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.
c - 整数の「順序付けられていないセット」を値としてredisに保存する効率的な方法は?
約 1 億 5000 万のキーと値のペアを保存する必要があります。キーは整数で、値は整数のセット (順不同) です。32 GB の RAM と 8 コアの CPU を搭載した個人用デスクトップで、単一のインスタンスとして redis を使用しています。
これには「SADD」コマンドを使用します。私が使用するクライアントは、hiredis とパイプラインです。したがって、コマンドは次のようになります。
実行時間: Linux の「time」コマンドを使用すると、次の結果が得られます。
real: 8m 30s
user: 5m 18s
sys: 0m 7s
メモリ使用量:
redis では、データベースは約 18 GB を使用し、redis のメモリ フットプリントは 28 GB まで増加します。
キーは「94190049249988」のようになります。
"keys.bytes-per-key": (整数) 1830。
以下は、速度を向上させ、メモリフットプリントを削減するために私が試した最適化です:-
1) 速度を向上させるためのパイプライン処理。
2) メモリ フットプリントを削減するための整数のセットの格納。これは int-set エンコーディングを使用します。
これらの 1 億 5000 万個の Key-Value を保存するためのメモリ効率と速度効率の良い方法はありますか?
どうにかして HSET のような他のデータ型を使用する必要がありますか? それは役に立ちますか?
他に試すことができる最適化はありますか?
私のユースケースでの他のデータストアの推奨も高く評価されます。
c - なぜハイレディス関数は redisReply* の代わりに void* を使用するのですか?
私はhiredisが初めてで、v0.13を使用しています。オブジェクトhiredis.h
を扱うの API 関数はすべて を使用していることに気付きました。例えば、redisReply*
void*
redisReply*
オブジェクト (またはNULL
)を返します。
redisReply*
を通じてオブジェクトを出力しますreply
。
コードのコメントによると、「hiredis がデフォルトで返す返信オブジェクトを解放する関数」です。</p>
ここで何が欠けていますか? これらの関数がvoid*
代わりに を使用するのはなぜredisReply*
ですか?
c - Mac OS X で C 言語でhiredis をコンパイルする
hiredis
in C
onを使用してクライアントをコンパイルしようとしていますMac OS X
。
私はインストールhiredis
しました:
しかし、それでもエラーが発生します:
hiredis.h
しかし、私は次の場所にあります:
コンパイラにこれを伝えるにはどうすればよいですか?
私はコンパイルしています:
c - TLSでhiredisが失敗する
Redis
で使用するための次のコードがありますC
。の基地hiredis
。
ただし、次のように失敗し続けます。
エラーは空白で、Redis
サーバーを制御できません。
デバッグする方法は?
redisSecureConnection(c, ca, cert, key, "sni")
戻るよう-1
です。
Wireshark
以下を出力します。
これは、SSL
/TLS
が試行されたことがないことを示しますClient Hello
。
NodeJS
クライアントで試してみると、これが得られ、うまくいきます:
c - CentOS 上の C をスタティック ライブラリにコンパイルする
次のパラメーターを使用C
して、アプリケーションをコンパイルして実行できます。CentOS
しかし、コンパイルもダウンロードもできないマシンでアプリケーションを実行する必要があります。hiredis
.
したがって、すべてを自分でコンパイルする必要がありますCentOS
-これはセットアップで一致します。
フラグについて読みましたstatic
が、そうすると次のエラーが発生します。
私は何を間違っていますか?