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() |
hash | redisTemplate.opsForHash() |
list | redisTemplate.opsForList() |
set | redisTemplate.opsForSet() |
sorted set | redisTemplate.opsForZSet() |
Redisバッチ操作のSpringカプセル化
同様に、springでは特定のキーに対するバッチ操作がサポートされています:
バッチ操作のための redisTemplate サポート:
列 | redisTemplate.boundValueOps("key") |
hash | redisTemplate.boundHashOps("key") |
list | redisTemplate.boundListOps("key") |
set | redisTemplate.boundSetOps("key") |
sorted set | redisTemplate.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;
});
}