redis と spring の統合は、一般に、spring-data-redis 統合と jedis 統合に分けられます。まず、この 2 つの違いを見てみましょう。参照される依存関係は異なります:
spring-data-redis で使用される依存関係は次のとおりです:
<dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-redis</artifactId> <version>1.8.9.RELEASE</version> </dependency>
jedis で使用される依存関係は次のとおりです:
<dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>2.9.0</version> <type>jar</type> <scope>compile</scope> </dependency>
2。 jedis インスタンスの管理方法と redis サービスの操作方法の違い:
spring-data-redis:
org.springframework.data.redis.connection.jedis.JedisConnectionFactory を通じて管理されます。 、ファクトリ クラス管理を通じて、設定されたテンプレート Bean を通じて Redis サービスを操作します。コード セグメントは、ビジネスに関係のない多数のテンプレート フラグメント コードで埋められ、コードは冗長で保守が困難です。たとえば、次のコード:
protected RedisTemplate<Serializable, Serializable> redisTemplate; public void saveUser(User user) { redisTemplate.execute(new RedisCallback<Object>() { @Override public Object doInRedis(RedisConnection connection) throws DataAccessException { connection.set(redisTemplate.getStringSerializer().serialize("user.uid." + user.getId()), redisTemplate.getStringSerializer().serialize(user.getName())); return null; } }); } public User getUser(long id) { return redisTemplate.execute(new RedisCallback<User>() { @Override public User doInRedis(RedisConnection connection) throws DataAccessException { byte[] key = redisTemplate.getStringSerializer().serialize("user.uid." + id); if (connection.exists(key)) { byte[] value = connection.get(key); String name = redisTemplate.getStringSerializer().deserialize(value); User user = new User(); user.setName(name); user.setId(id); return user; } return null; } }); }
RedisTemplate の概要
spring は、比較のために RedisTemplate オブジェクトをカプセル化します。 Redis のさまざまな操作、すべての Redis ネイティブ API をサポートします。 RedisTemplate は、一般的に使用されるいくつかのインターフェイス メソッドの使用を提供します:
private ValueOperations
RedisTemplate では 5 つのデータ構造操作が定義されています
redisTemplate.opsForValue();//操作字符串 redisTemplate.opsForHash();//操作hash redisTemplate.opsForList();//操作list redisTemplate.opsForSet();//操作set redisTemplate.opsForZSet();//操作有序set StringRedisTemplate与RedisTemplate
両者の関係は、StringRedisTemplate が RedisTemplate を継承することです。
この 2 つの間のデータは共通ではありません。つまり、StringRedisTemplate は StringRedisTemplate のデータのみを管理でき、RedisTemplate は RedisTemplate のデータのみを管理できます。SDR によってデフォルトで採用されるシリアル化戦略は 2 つあります。1 つは String のシリアル化戦略で、もう 1 つは JDK のシリアル化戦略です。
StringRedisTemplate はデフォルトで String シリアル化戦略を使用し、保存されたキーと値はこの戦略を使用してシリアル化されて保存されます。
RedisTemplate はデフォルトで JDK シリアル化戦略を使用し、保存されたキーと値はこの戦略を使用してシリアル化され、保存されます。
jedis メソッド:
redis.clients.jedis.JedisPool を通じて管理されます。つまり、プールを通じて管理され、プール オブジェクトを通じて jedis インスタンスを取得し、その後、redis サービスを直接操作します。 jedis インスタンスを削除し、次のコード スニペットのようなビジネスに関係のない冗長コードを削除します。
private JedisPool jedisPool; public String save(String key,String val) { Jedis jedis = jedisPool.getResource(); return jedis.set(key, val); }
ファクトリ クラスからプールへの変更は、mybatis が mysql に接続する方法の変更と同等です。コードがシンプルになり、保守が容易になります。 Jedis は、Apache commons-pool2 を使用して Jedis リソース プールを管理するため、JedisPool を定義する際の非常に重要なパラメーターは、リソース プール GenericObjectPoolConfig です。使用方法は次のとおりで、リソースの管理と使用のための多くのパラメーターが含まれています。
パラメータの説明
JedisPool は、リソースが制御可能な範囲内にあることを保証し、スレッド セーフを提供しますが、合理的な GenericObjectPoolConfig 構成により、Redis を使用するアプリケーションを保護できます。その詳細の一部を次に示します。重要なパラメータについて説明し、提案:
現在の環境では、Jedis 接続がリソースであり、JedisPool が Jedis 接続を管理します。
1. リソースの設定と使用法
maxTotal: リソース プール内の接続の最大数、デフォルト値: 8 設定の提案については次のセクションを参照してください
maxIdle: リソース プールの最大接続数リソース プールで許可されるアイドル接続; デフォルト値: 8; 使用上の推奨事項: 推奨事項の設定については、次のセクションを参照してください。minIdle: リソース プールは、アイドル接続の最小数を保証します。 デフォルト値: 0; 使用上の推奨事項: 次のセクションを参照してください。推奨事項を設定するためのセクション
blockWhenExhausted: リソース プールが使い果たされたとき その後、呼び出し元が待機するかどうか。 true の場合のみ、次の maxWaitMillis が有効になります。デフォルト値: true; 使用上の推奨事項: デフォルト値を使用することをお勧めします。
maxWaitMillis: リソース プール接続が枯渇したときの、呼び出し元の最大待機時間 (ミリ秒単位) - 1: タイムアウトしないことを示します; 使用上の推奨事項: デフォルト値の使用は推奨されません
testOnBorrow: リソース プールから接続を借用するときに接続有効性検出 (ping) を実行するかどうか、無効な接続は削除されます; デフォルト値: false; 使用上の推奨事項 : 業務量が多い場合は false (ping 1 回分のコスト) に設定することをお勧めします。
testOnReturn: 接続をリソースプールに戻すときに接続有効性検出 (ping) を実行するかどうか、無効な接続は削除されます; デフォルト値: false; 使用上の推奨事項: 業務量が大きい場合は設定することをお勧めしますfalse に設定します (ping のオーバーヘッドが 1 つ増えます)。
jmxEnabled: 監視に使用できる jmx 監視を有効にするかどうか; デフォルト値: true; 使用上の推奨事項: 有効にすることをお勧めしますが、アプリケーション自体も有効にする必要があります
2. アイドルリソース監視
Idle Jedis オブジェクトの検出は、次の 4 つのパラメーターの組み合わせによって完了します。testwhileIdle はこの関数のスイッチです。
testwhileIdle: アイドル状態のリソース監視を有効にするかどうか; デフォルト値: false; 使用方法の提案: true
timeBetweenEvictionRunsMillis: アイドル状態のリソースの検出期間 (単位: ミリ秒); デフォルト値: -1: 検出しない; 使用方法の提案: 推奨settings 、期間を自分で選択します。デフォルトを使用するか、以下の JedisPoolConfig の構成を使用することもできます。
minEvictableIdleTimeMillis: リソース プール内のリソースの最小アイドル時間 (単位: ミリ秒)、この値に達すると、アイドル状態のリソースは削除される; デフォルト値: 1000 60 30 = 30 分; 使用上の提案: 自分のビジネスに応じて決定できます。ほとんどのデフォルト値で十分です。また、
numTestsPerEvictionRun の下の JeidsPoolConfig の構成を使用することも検討できます。アイドル状態のリソースを検出する際の 1 回あたりのサンプル数。デフォルト値: 3。使用上の提案: 独自のアプリケーション接続の数に応じて微調整できます。-1 に設定すると、すべての接続のアイドル状態が監視されます。
Redis の使い方チュートリアル コラムをご覧ください。
以上がredisとjedisの違いは何ですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。