Spring redis実装
3669 ワード
redisは使う人が多く、ネット上では基本的にいくつかの入門構成です.spring redisの実装(Jedisクライアントへのアクセスを例に)を紹介したいと思います.
Spring redisで最も主要なクラスはRedisTemplateです.
RedisTemplate RedisTemplateはRedisOperations、すなわちそれ自体がOperationsであることを実現した.
RedisTemplateシーケンス化
Redisに格納されているキー値は、シーケンス化された転送が必要です.これは、clientとserver間のプロトコルがbyteを要求し、Jedisがstringとbyte[]タイプの関数インタフェースを提供しているためです.直列化されたツールは多く、RedisTemplateではデフォルトでJdkSerializationRedisSerializerが使用されます.
シーケンス化するオブジェクトがStringの場合.対応するStringRedisSerializerを使用する必要があります.そうしないと、xacxedx 00x 05 tx 00tbのような文字化け接頭辞が表示されます.したがって、適切なシーケンス化ツールを構成します.詳細は、Spring DataがRedisを操作すると、key値にxacxedx 00x 05 tx 00tbが表示されます
RedisTemplateの操作ビュー RedisTemplateではredisの操作を分類する(例えばValueタイプの操作をValueOperationsにカプセル化し、Listタイプの操作をListOperationsにカプセル化する).管理が便利で、人々の使用習慣にも合っています.RedisTemplateでは以下の方法で対応するOperationsを得る.
RedisTemplateは、Operationsに対応するBoundValue Operationsも提供しています.BoundOperationsはkey値をバインドし,エージェントによってOperationsの機能を実現する.RedisTemplateでは,対応するBoundOperationsを以下の方法で得た.
BoundValueOperationsは、ValueOperationsのエージェントとして外部呼び出しに使用されます.
したがって,ValueOperationsもBoundValueOperationsも本質的にValueOperationsによって操作される.
私はDefaultValueOperationsのコードを少し抜粋しました.他の方法は基本的にそうです.
このことから,すべての操作redisの操作はRedisTemplateを呼び出すexecuteメソッドで実行されることが分かる.executeメソッドには3種類あります. public T execute(RedisCallback action, boolean exposeConnection, boolean pipeline) public T execute(SessionCallback session) public List executePipelined(final SessionCallback> session, final RedisSerializer> resultSerializer)
このうち、execute(RedisCallback action,boolean exposeConnection,boolean pipeline)は、何もありません.アクセスするたびに接続プールに接続を取ります(プールに接続がなく新規作成できる場合は、接続を新規作成します).(ここには物事の配置をサポートしているかどうかenableTransactionSupportがありますが、サポートが悪いのは穴だそうです.何が起こっているのか検証されていません)
接続プールは、構成情報に基づいて、プール内の接続をタイミングスキャンして検出します.不要な接続または余分な接続をクリアするか、新しい接続を作成します.接続プールの清掃が有効であることを保証します.
execute(SessionCallback session)は、みんなが尊敬しているspring redisが物事を使う方法です.接続をRedisConnectionHolderにバインドし、終了を使用して、結合を解除し、接続を返します.ここでは,RedisConnectionのwatch,multi,exec命令を設定することでデータの整合性を保証することができる.
executePipelinedは、パイプを介して複数のredisコマンドを送信できます.これらのコマンドは一緒に実行され、互いに依存することはできません.
Spring redisで最も主要なクラスはRedisTemplateです.
RedisTemplate
RedisTemplateシーケンス化
Redisに格納されているキー値は、シーケンス化された転送が必要です.これは、clientとserver間のプロトコルがbyteを要求し、Jedisがstringとbyte[]タイプの関数インタフェースを提供しているためです.直列化されたツールは多く、RedisTemplateではデフォルトでJdkSerializationRedisSerializerが使用されます.
private boolean enableDefaultSerializer = true;
private RedisSerializer> defaultSerializer = new JdkSerializationRedisSerializer();
private RedisSerializer keySerializer = null;
private RedisSerializer valueSerializer = null;
private RedisSerializer hashKeySerializer = null;
private RedisSerializer hashValueSerializer = null;
private RedisSerializer stringSerializer = new StringRedisSerializer();
シーケンス化するオブジェクトがStringの場合.対応するStringRedisSerializerを使用する必要があります.そうしないと、xacxedx 00x 05 tx 00tbのような文字化け接頭辞が表示されます.したがって、適切なシーケンス化ツールを構成します.詳細は、Spring DataがRedisを操作すると、key値にxacxedx 00x 05 tx 00tbが表示されます
RedisTemplateの操作ビュー
public ValueOperations opsForValue() {
if (valueOps == null) {
valueOps = new DefaultValueOperations(this);
}
return valueOps;
}
RedisTemplateは、Operationsに対応するBoundValue Operationsも提供しています.BoundOperationsはkey値をバインドし,エージェントによってOperationsの機能を実現する.RedisTemplateでは,対応するBoundOperationsを以下の方法で得た.
public BoundValueOperations boundValueOps(K key) {
return new DefaultBoundValueOperations(key, this);// RedisTemplate DefaultBoundValueOperations
}
private final ValueOperations ops;
public DefaultBoundValueOperations(K key, RedisOperations operations){
super(key, operations);// RedisTemplate
ops = operations.opsForValue();
}
BoundValueOperationsは、ValueOperationsのエージェントとして外部呼び出しに使用されます.
public V get() {
return (V)ops.get(getKey());
}
したがって,ValueOperationsもBoundValueOperationsも本質的にValueOperationsによって操作される.
私はDefaultValueOperationsのコードを少し抜粋しました.他の方法は基本的にそうです.
public V get(Object key)
{
return execute(new AbstractOperations.ValueDeserializingRedisCallback(this, key)
{
protected byte[] inRedis(, RedisConnection connection) {
return connection.get(rawKey);
}
}
, true);
}
このことから,すべての操作redisの操作はRedisTemplateを呼び出すexecuteメソッドで実行されることが分かる.executeメソッドには3種類あります.
このうち、execute(RedisCallback action,boolean exposeConnection,boolean pipeline)は、何もありません.アクセスするたびに接続プールに接続を取ります(プールに接続がなく新規作成できる場合は、接続を新規作成します).(ここには物事の配置をサポートしているかどうかenableTransactionSupportがありますが、サポートが悪いのは穴だそうです.何が起こっているのか検証されていません)
接続プールは、構成情報に基づいて、プール内の接続をタイミングスキャンして検出します.不要な接続または余分な接続をクリアするか、新しい接続を作成します.接続プールの清掃が有効であることを保証します.
execute(SessionCallback session)は、みんなが尊敬しているspring redisが物事を使う方法です.接続をRedisConnectionHolderにバインドし、終了を使用して、結合を解除し、接続を返します.ここでは,RedisConnectionのwatch,multi,exec命令を設定することでデータの整合性を保証することができる.
executePipelinedは、パイプを介して複数のredisコマンドを送信できます.これらのコマンドは一緒に実行され、互いに依存することはできません.