blog

SpringでRedisを使う

redis接続ドライバは、現在最も使用されているJedisでなければなりません。 springは、インターフェイスオブジェクトを生成することができますインターフェイスを提供し、インターフェイスオブジェ...

Jan 6, 2021 · 6 min. read
シェア

redis

redisは非常に強力なキャッシュツールです。

redis接続ドライバは、現在最も使用されているのはJedisでしょう。

中央 maven リポジトリでjedis検索します。

最新は3.3.0です。

スプリング-データ-レディス

以下はRedisConnection関連の構造図です。

シンプルに:

RedisConfig

まず、コンフィギュレーション・クラスを作成します:

@Configuration
public class RedisConfig {
 @Value("${spring.redis.host}")
 private String hostname;
 @Value("${spring.redis.port}")
 private int port;
 @Value("${spring.redis.password}")
 private String password;
 @Value("${spring.redis.timeout}")
 private int timeout;
 @Value("${spring.redis.database}")
 private int database;
 private RedisConnectionFactory factory = null;
 @Bean("redisConnectionFactory")
 public RedisConnectionFactory initConnectionFactory() {
 if (factory != null) {
 return factory;
 }
 JedisPoolConfig poolConfig = new JedisPoolConfig();
 // 空きセッションの最大数
 poolConfig.setMaxIdle(10);
 // 最大接続数
 poolConfig.setMaxTotal(25);
 // 待機する最大ミリ秒数
 poolConfig.setMaxWaitMillis(timeout);
 // 接続ファクトリーを作成する
 JedisConnectionFactory jedisConnectionFactory = new JedisConnectionFactory(poolConfig);
 // スタンドアロンマシンのRedis設定を取得する
 RedisStandaloneConfiguration rsConfig = jedisConnectionFactory.getStandaloneConfiguration();
 rsConfig.setHostName(hostname);
 rsConfig.setPort(port);
 rsConfig.setPassword(password);
 rsConfig.setDatabase(database);
 factory = jedisConnectionFactory;
 return factory;
 }
}

設定ファイル:

spring:
 redis:
 host: 8.117
 port: 6379
 password: ""
 timeout: 2000
 database: 0

RedisConnectionFactoryはコネクションプールを通して作成され、RedisConnectionオブジェクトはファクトリーを通して作成されます。再試行するときは、RedisConnectionFactory ファクトリーから取得して使用し、 使用し終わったら手動で閉じる必要があります。

試験方法で使ってみてください:

testFactoryメソッドの実行

その後、クライアント接続を使用して

RedisTemplate

RedisConnectionを単独で使用する場合、使用前にコネクションを取得し、使用後にコネクションを解放する必要があり、解放を忘れるとすぐにredisコネクションプールのコネクションが不足してしまいます。

そこで、spring はRedisTemplate提供します。

まずはRedisTemplateを作成します。

 @Bean("redisTemplate")
 public RedisTemplate initRedisTemplate() {
 RedisTemplate template = new RedisTemplate();
 template.setConnectionFactory(initConnectionFactory());
 return template;
 }

そしてテストで使ってみてください:

実施結果:

出力がないことを確認し、クライアントを使って

キーはtestですが、なぜ保存時にはxxxxtestになるのですか?

Redis

Redisは文字列ストレージNoSqlに与えられており、JavaはTeijoをベースとした言語であるため、オブジェクトをRedisに格納することはできませんが、JavaはクラスがSerializableインターフェイスを実装している限り、シリアライズする能力を表す、シリアライズのメカニズムを提供します。クラスオブジェクトをシリアライズすることで、バイナリ文字列を得ることができ、Redisはクラスオブジェクトを文字列として保存することができます。

これはシリアライザーの春の実装です。

RedisTemplateで設定可能なシリアライザ

RedisTemplateにはシリアライザーの設定がないため、デフォルトのJdkSerializationRedisSerializerがシリアライズとデシリアライズに使用されます。

文字列シリアライザ

RedisTemplate のシリアライザを stringSerializer に指定します。

次に

次にredisをチェックします:

valueSerializerの設定を忘れていました。

Redisデータ型操作のSpringカプセル化

Redisは7種類のデータ構造をサポートし、一般的に使用される5種類のデータ構造:文字列、ハッシュ、リスト、セット、ソートされたセット

redisTemplateはデータ型操作インタフェースを取得します:

redisTemplate.opsForValue()
hashredisTemplate.opsForHash()
listredisTemplate.opsForList()
setredisTemplate.opsForSet()
sorted setredisTemplate.opsForZSet()

Redisバッチ操作のSpringカプセル化

同様に、springでは特定のキーに対するバッチ操作がサポートされています:

バッチ操作のための redisTemplate サポート:

redisTemplate.boundValueOps("key")
hashredisTemplate.boundHashOps("key")
listredisTemplate.boundListOps("key")
setredisTemplate.boundSetOps("key")
sorted setredisTemplate.boundZSetOps("key")

SessionCallbackとRedisCallback

RedisTemplateコールバック

コールバックを使用すると、同じ接続で複数のRedisコマンドを実行できます。

SessionCallbackはRedisCallbackよりもカプセル化されており、より使いやすくなっています。

セッションコールバック

 @Test
 public void testRedisSessionCallback() {
 redisTemplate.execute((RedisConnection rc) -> {
 rc.set("session1".getBytes(), "session1".getBytes());
 rc.set("session2".getBytes(), "session2".getBytes());
 return null;
 });
 }

RedisCallback

 @Test
 public void testRedisCallback() {
 redisTemplate.execute((RedisConnection rc) -> {
 rc.set("redis1".getBytes(), "redis1".getBytes());
 rc.set("redis2".getBytes(), "redis2".getBytes());
 return null;
 });
 }

Read next

コンピュータネットワークの基礎(IX) - ネットワーク層 - 内部ゲートウェイルーティングプロトコル

"DVアルゴリズムでは、彼は実際にDの距離の最小値を計算しています。例えば、Dijの最小値は:minに等しいです。 このDVアルゴリズムを理解するための例 図に6つの頂点A、B、C、D、E、Fといくつかの辺があり、これらの6つのノードに対して、右側にDiとSiの距離ベクトルがあります。Diには6つの要素Dia,...

Jan 6, 2021 · 8 min read