ホームページ  >  記事  >  データベース  >  redisとjedisの違いは何ですか

redisとjedisの違いは何ですか

尚
オリジナル
2019-06-29 17:10:4816827ブラウズ

redisとjedisの違いは何ですか

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 ValueOperationsb56561a2c0bc639cf0044c0859afb88f valueOps; private ListOperationsb56561a2c0bc639cf0044c0859afb88f listOps;private SetOperationsb56561a2c0bc639cf0044c0859afb88f setOps; private ZSetOperationsbfbf51059cfb0a0d14f2e5a287507931 zSetOps;

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 の使い方チュートリアル コラムをご覧ください。

以上がredisとjedisの違いは何ですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。