ホームページ  >  記事  >  Java  >  アノテーションに基づいて Spring が Redis を統合する詳細な例

アノテーションに基づいて Spring が Redis を統合する詳細な例

零下一度
零下一度オリジナル
2017-07-19 13:45:531802ブラウズ

1. プロジェクトの依存関係を追加します

2. spring-redis-context 構成を追加します

4. カスタム Redis 構成クラスを追加します

注釈を好きな場所にキャッシュします

Redis はメモリベースの Key-Value データベースであり、キャッシュ サーバーとして使用すると非常にコスト効率が高くなります。

正式にリリースされた Java 用 Client Jedis は、Java 操作で Redis を使用できるようにするための多くのインターフェイスとメソッドを提供します。

Spring チームは Jedis を独立した spring-data-redis プロジェクトとしてカプセル化し、Spring の機能と一致させ、Jedis のいくつかのコマンドとメソッドを統合しました。

この記事では、spring-data-redis を通じて Redis を Spring プロジェクトに迅速に統合できる統合プロセスについて説明することに重点を置いています。

この記事では、spring-data-redis を通じて Redis を Spring プロジェクトに迅速に統合できるようにする統合プロセスについて説明します。

1. プロジェクトの依存関係を追加します

        <!--redis 缓存--><dependency><groupId>org.springframework.data</groupId><artifactId>spring-data-redis</artifactId><version>1.8.4.RELEASE</version></dependency><dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>2.9.0</version></dependency>

2. spring-redis-context 構成を追加します

<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   xmlns:context="http://www.springframework.org/schema/context"   xsi:schemaLocation="http://www.springframework.org/schema/beans
                        
                        
                        "><description>redis 相关类 Spring 托管</description><!--载入 redis 配置文件--><context:property-placeholder location="classpath:redis.properties" ignore-unresolvable="true"/><!-- 配置 JedisPoolConfig 实例 --><bean id="poolConfig" class="redis.clients.jedis.JedisPoolConfig"><property name="maxIdle" value="${redis.maxIdle}"/><property name="maxTotal" value="${redis.maxActive}"/><property name="maxWaitMillis" value="${redis.maxWait}"/><property name="testOnBorrow" value="${redis.testOnBorrow}"/></bean><!-- 配置JedisConnectionFactory --><bean id="jedisConnectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory"><property name="hostName" value="${redis.host}"/><property name="port" value="${redis.port}"/><property name="password" value="${redis.pass}"/><property name="database" value="${redis.dbIndex}"/><property name="poolConfig" ref="poolConfig"/></bean><!-- 配置RedisTemplate --><bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate"><property name="connectionFactory" ref="jedisConnectionFactory"/></bean><!-- 配置RedisCacheManager --><bean id="redisCacheManager" class="org.springframework.data.redis.cache.RedisCacheManager"><constructor-arg name="redisOperations" ref="redisTemplate"/><property name="defaultExpiration" value="${redis.expiration}"/></bean><!-- 配置RedisCacheConfig --><bean id="redisCacheConfig" class="com.rambo.sdh.common.util.RedisCacheConfig"><constructor-arg ref="jedisConnectionFactory"/><constructor-arg ref="redisTemplate"/><constructor-arg ref="redisCacheManager"/></bean></beans>

JedisConnectionFactory
は、Jedis によって提供されます。抽象的な JedisPoolConfig。

Spring の JdbcTemplate オブジェクトに精通している場合は、おそらく

RedisTemplate

RedisConnection をカプセル化する役割を推測できるでしょう。 接続管理、シリアル化、およびその他の機能を提供します。これにより、Redis の操作が大幅に容易化および簡素化される、より高いレベルの抽象化が実現されます。 RedisCacheManager は、Redis の統合スケジューラーおよびマネージャーです。興味がある場合は、ソース コードを逆コンパイルして確認してください。

org.springframework.cache.transaction.

AbstractTransactionSupportingCacheManager

を継承し、 org.springframework.cache.CacheManager を実装します。

3. redis.properties を追加します

#============================#
#==== Redis settings ====#
#============================#
#redis 服务器 IP
redis.host=127.0.0.1

#redis 服务器端口
redis.port=6379

#redis 密码
redis.pass=redis#2017

#redis 支持16个数据库(相当于不同用户)可以使不同的应用程序数据彼此分开同时又存储在相同的实例上
redis.dbIndex=0

#redis 缓存数据过期时间单位秒
redis.expiration=3000

#控制一个 pool 最多有多少个状态为 idle 的jedis实例
redis.maxIdle=300

#控制一个 pool 可分配多少个jedis实例
redis.maxActive=600

#当borrow一个jedis实例时,最大的等待时间,如果超过等待时间,则直接抛出JedisConnectionException;
redis.maxWait=1000

#在borrow一个jedis实例时,是否提前进行alidate操作;如果为true,则得到的jedis实例均是可用的;
redis.testOnBorrow=true

もちろん、設定ファイルをプログラムにハードコーディングすることもできますが、パラメータが変更されるとさらに面倒になります。

ほとんどの構成項目は jedisPool に関連しています。データベース接続プールに精通している場合は、2 つの構成項目が似ていることがわかるでしょう。

システム Redis に問題が発生して失敗した場合は、ここでのオプションを理解することをお勧めします。

その他の構成項目について詳しく説明します。

4. カスタム Redis 構成クラスを作成します

@Configuration
@EnableCachingpublic class RedisCacheConfig extends CachingConfigurerSupport {protected final static Logger log = LoggerFactory.getLogger(RedisCacheConfig.class);private volatile JedisConnectionFactory mJedisConnectionFactory;private volatile RedisTemplate<String, String> mRedisTemplate;private volatile RedisCacheManager mRedisCacheManager;public RedisCacheConfig() {super();
    }public RedisCacheConfig(JedisConnectionFactory mJedisConnectionFactory, RedisTemplate<String, String> mRedisTemplate, RedisCacheManager mRedisCacheManager) {super();this.mJedisConnectionFactory = mJedisConnectionFactory;this.mRedisTemplate = mRedisTemplate;this.mRedisCacheManager = mRedisCacheManager;
    }public JedisConnectionFactory redisConnectionFactory() {return mJedisConnectionFactory;
    }public RedisTemplate<String, String> redisTemplate(RedisConnectionFactory cf) {return mRedisTemplate;
    }public CacheManager cacheManager(RedisTemplate<?, ?> redisTemplate) {return mRedisCacheManager;
    }

    @Beanpublic KeyGenerator keyGenerator() {return new KeyGenerator() {
            @Overridepublic Object generate(Object o, Method method, Object... objects) {
                StringBuilder sb = new StringBuilder();
                sb.append(o.getClass().getName());
                sb.append(method.getName());for (Object obj : objects) {
                    sb.append(obj.toString());
                }return sb.toString();
            }
        };
    }
}

この設定クラスは org.springframework.cache.annotation.CachingConfigurerSupport を継承し、 org.springframework.cache.annotation.CachingConfigurer のメソッドを実装します。

平たく言えば、このクラスは Spring に現在使用されているキャッシュ サービスが Redis であることを伝え、キャッシュ キー生成のルールをカスタマイズします。

5. 好きな場所でアノテーションキャッシュを実行する

キャッシュしたいメソッドに対応するアノテーションを追加するだけです。注釈をマスターする必要があります。

@Cacheable Spring は、メソッドが呼び出された後に戻り値をキャッシュし、次回同じパラメーターでメソッドが実行されるときに、メソッドを再度実行することなく結果をキャッシュから直接取得できるようにします。

@CachePut アノテーションが付けられたメソッドは、実行前にキャッシュに以前に実行された結果があるかどうかをチェックしません。代わりに、メソッドは毎回実行され、実行結果は key- の形式で指定されたキャッシュに保存されます。値のペア。

@CacheEvict は、キャッシュ要素をクリアする必要があるメソッドまたはクラスに注釈を付けるために使用されます。

もちろん、これらのアノテーションには他にも多くの属性設定があり、spring-el 式でできることはたくさんあります。おそらく想像にすぎませんが、できないことはありません。

ビジネスルールが複雑な場合、キャッシュキーの設計は非常に重要であり、優れた設計によりアプリケーションがスムーズに動作します。

以上がアノテーションに基づいて Spring が Redis を統合する詳細な例の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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