web-dev-qa-db-ja.com

JavaオブジェクトのリストをRedisに保存するための最良の方法

JavaオブジェクトのリストをRedisに保存するための最良の方法について、誰かが私に提案してくれるといいですね。

現在、Javaオブジェクトをjson文字列に変換し、それらの文字列をRedisに保存しています。これらすべてを追跡するために、Redisにセットがあります。

たとえば:-

SET student:1 '{"name":"testOne","stream":computer science}'
SET student:2 '{"name":"testTwo","stream":electronics}'
SADD students 1
SADD students 2

したがって、学生のリストを取得するときはいつでも、最初にセットstudentsを取得し、次にそれを反復処理して、それらのキーでjson文字列を取得します。

JavaオブジェクトのリストをRedisに保存するシナリオを処理する他のより良い方法があるかどうか疑問に思っています。

(私はredisをキャッシュとして使用しています)

7
user_ab

Java redisに保存されているオブジェクト(インデックス作成、スコア...))をクエリする必要がない場合は、ライブラリ(Kryoなど)を使用してそれらをバイト配列にシリアル化して保存できます。 Javaオブジェクトのコレクション全体を1つのredis文字列でシリアル化できることに注意してください。必要な場合は、それがどのクラス(コレクションタイプ+オブジェクトのタイプ)であるかを覚えておいてください。デシリアライズすると、たとえばこの目的のために巧妙なキー名を定義できます。

JSONは、他のバイナリマーシャリング形式よりも多くのスペースを使用し、ネットワークを集中的に使用します。redisでクエリや人間が読み取れるデータが必要ない場合は、バイナリデータをredisに保存することで問題ありません(パフォーマンスが向上します)。

(タグ付けしたとおりに)jedisライブラリを使用している場合は、データをC文字列としてRedisに送信するためにJava文字列ではなくバイト配列をパラメータとして受け取るJedisのメソッドがあることに注意してください(いいえプロセスでのデータ損失)。

7
zenbeni

Redisは単なるKeyValueストアではありません。ハッシュを使用して、構造化データをredisに保存できます

HMSET学生:1名「testOne」ストリーム「コンピュータサイエンス」 http://redis.io/commands/hmset

ハッシュ呼び出しのすべての内容を取得するにはHGETALLstudent:1
HGETを使用してハッシュの単一値を取得することもできます
例HGET学生:1名

3
Lugg

Redisson で簡単にできます。これは、JavaのRedisベースのフレームワークであり、多くの一般的なコーデック(Jackson JSON、Avro、Smile、CBOR、MsgPack、Kryo、FST、LZ4、Snappy、JDKシリアル化)とClusterなどのRedis接続モードをサポートしています。 、Sentinel、AWSElasticache。

リストするオブジェクトJava

RList<SomeObject> list = redisson.getList("anyList");
list.add(new SomeObject(1));
list.add(new SomeObject(2));

RListインターフェースはJava.util.Listインターフェースも実装します。とても簡単ですよね?

2