あなたはspringbootでRedisの中でそれを使用する方法を知っていますか

テイルズオブヴェスペリア

特記事項:この記事は、春のデータ依存性は、ばねブートスターター・データ-新しい春のブート2.1.3、に向けられている Redisの、 デフォルトの接続プールのレタス

どのように春ブーツに統合するために、本明細書のNode.jsでのRedisで前に使用される高性能メモリデータベースとしてのRedis、あなたはあまりにも時代遅れを使用しない場合は、このレコードのRedis。Redisのアクションクラスを提供し、注釈Redisのに二つの方法を使用します。次のように主な内容は以下のとおりです。

  • ドッキングウィンドウのRedisをインストールします
  • springboot統合Redisの
  • Redisの書き込み動作クラス
  • 注釈のRedisのを使用することにより

Redisのをインストールします。

  マウントドッキングウィンドウでは、ドッキングウィンドウは、次のように整理文書を構成します:

# docker-compose.yml
version: "2"
services:
  redis:
    container_name: redis
    image: redis:3.2.10
    ports:
      - "6379:6379"

  次に、docker-compose.ymlディレクトリの使用docker-compose up -dRedisのを起動するコマンドを。

統合springboot

  説明:springbootバージョン2.1.3

Mavenの依存関係を追加

  ただ、追加spring-boot-starter-data-redisの依存関係を、除外レタスに依存して、jedisを導入することに依存コモンズ-POOL2をjedis

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
    <exclusions>
        <exclusion>
            <groupId>io.lettuce</groupId>
            <artifactId>lettuce-core</artifactId>
        </exclusion>
    </exclusions>
</dependency>

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-pool2</artifactId>
</dependency>

<dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
</dependency>

springbootプロフィールを書きます

  次のようにコンフィギュレーションファイルは、次のとおりです。

server:
  port: 8081
  servlet:
    context-path: /sso
spring:
  application:
    name: SSO
  cache:
    type: redis
  redis:
    database: 0
    host: 192.168.226.5
    port: 6379
    # 有密码填密码,没有密码不填
    password:
    # 连接超时时间(ms)
    timeout: 1000ms
    # 高版本springboot中使用jedis或者lettuce
    jedis:
      pool:
        # 连接池最大连接数(负值表示无限制)
        max-active: 8
        # 连接池最大阻塞等待时间(负值无限制)
        max-wait: 5000ms
        # 最大空闲链接数
        max-idle: 8
        # 最小空闲链接数
        min-idle: 0

書き込みの設定クラス

  Configurationクラスのコードは次のよう:

@EnableCaching//开启缓存
@Configuration
public class RedisConfig extends CachingConfigurerSupport {

    /**
     * 设置缓存管理器,这里可以配置默认过期时间等
     *
     * @param connectionFactory 连接池
     * @return
     */
    @Bean
    public CacheManager cacheManager(RedisConnectionFactory connectionFactory) {
        RedisCacheConfiguration redisCacheConfiguration = RedisCacheConfiguration
                .defaultCacheConfig()
                .entryTtl(Duration.ofSeconds(60));
        //注意:请勿使用先new 配置对象,然后在调用entryTtl方法的方式来操作
        //会导致配置不生效,原因是调用.entryTtl方法会返回一个新的配置对象,而不是在原来的配置对象上修改

        RedisCacheWriter redisCacheWriter = RedisCacheWriter.nonLockingRedisCacheWriter(connectionFactory);
        RedisCacheManager manager = new RedisCacheManager(redisCacheWriter, redisCacheConfiguration);
        return manager;
    }

    @SuppressWarnings("all")
    @Bean
    public RedisTemplate<String, String> redisTemplate(JedisConnectionFactory factory) {
        StringRedisTemplate template = new StringRedisTemplate(factory);
        Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
        ObjectMapper om = new ObjectMapper();
        om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
        om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
        jackson2JsonRedisSerializer.setObjectMapper(om);
        RedisSerializer stringSerializer = new StringRedisSerializer();
        template.setKeySerializer(stringSerializer);
        template.setValueSerializer(jackson2JsonRedisSerializer);
        template.setHashKeySerializer(stringSerializer);
        template.setHashValueSerializer(jackson2JsonRedisSerializer);
        template.afterPropertiesSet();
        return template;
    }

    //使用jedis连接池建立jedis连接工厂
    @Bean
    public JedisConnectionFactory jedisConnectionFactory() {
        logger.info("jedisConnectionFactory:初始化了");
        JedisPoolConfig config = new JedisPoolConfig();
        config.setMaxIdle(maxIdle);
        config.setMinIdle(minIdle);
        config.setMaxWaitMillis(maxWaitMillis);
        config.setMaxTotal(maxActive);
        //链接耗尽时是否阻塞,默认true
        config.setBlockWhenExhausted(true);
        //是否启用pool的jmx管理功能,默认true
        config.setJmxEnabled(true);
        JedisConnectionFactory factory = new JedisConnectionFactory();
        factory.setPoolConfig(config);
        factory.setHostName(host);
        factory.setPort(port);
        factory.setPassword(password);
        factory.setDatabase(database);
        factory.setTimeout(timeout);
        return factory;
    }
}

使用

  操作をキャッシュするには、2つの方法があり、それがさまざまな操作を実装するためにキャッシュ方法で注釈を追加することで、1は手動制御です。個人的に私は自分自身のコントロールでそう感じて、手動制御を好みます。

注釈を使用することにより

  主に次の5つのノートで:

  • @CacheConfig:クラス・レベルのキャッシュ、キャッシュのようなキーのプレフィックスを設定します
  • @Cacheable:トリガーキャッシュエントリ
  • @CacheEvict:トリガは、キャッシュを削除します
  • @CachePut:アップデートキャッシュ
  • @Caching:キャッシュの組み合わせ

@CacheConfig

  注釈は、主にグローバルコンフィギュレーション例をキャッシュするクラスのために、それは、クラスレベルの注釈で、分類をキャッシュすることができ、以下のとおりです。

@CacheConfig(cacheNames = "redis_test")
@Service
public class RedisService {
  //....
}

CacheConfigはredis_test接頭辞によって生成された上記のカテゴリの注釈キーを与えます。

@Cacheable

  キークエリキャッシュに応じてメソッドレベルの注釈:

  • キーが存在しない場合は、この方法は、Redisのにキャッシュ内の値を返します。
  • キーが存在する場合は、キャッシュから直接値
    以下のように例を示します。
    /**
     * 缓存时间,首次查询后会缓存结果,key中的值可使用表达式计算.
     * 如不提供key,将使用默认key构造方法生成一个key
     * @return long
     */
    @Cacheable(key = "'currentTime'")
    public long getTime() {
        return System.currentTimeMillis();
    }

複数の呼び出しは、このコードが返された値が毎回同じであることがわかります。

CachePut

  キャッシュを更新するために、各コールは、DB、キャッシュデータを要求することになるでしょう

  • キーが存在する場合、更新情報
  • キーが存在しない場合は、コンテンツを挿入

コードは以下の通りであります:

/**
     * 一般用于更新查插入操作,每次都会请求db
     */
    @CachePut(key = "'currentTime'+#id")
    public long updateTime(String id) {
        return System.currentTimeMillis();
    }

この方法は、キーRedisのリフレッシュ呼び出しに従ってデータをキャッシュします。

@CacheEvict

  キャッシュを削除するために、データキーによります。allEntries = trueの場合は、キャッシュ内のすべてのデータを削除します。
コードは以下の通りであります:

    @CacheEvict(key = "'currentTime'+#id",allEntries=false)
    public void deleteTime(String id) {
    }

@キャッシング

  この注釈は、他の注釈組み合わせで使用することができます。このような次の例のように:

    //value属性为key指定前缀
    @Caching(put = {@CachePut(value = "user", key = "'name_'+#user.name"),
            @CachePut(value = "user", key = "'pass_'+#user.password")})
    public User testCaching(User user) {
        return user;
    }

上記のコードを実行した後のRedisに二つのレコードに挿入されています。使用すると、keys *次の結果が表示されます。

結果

手動制御

  手動制御は同等MyBatisの手書きのSQL文を呼び出す必要があるredisTemplate、クエリキャッシュの更新をキャッシュするキャッシュや他の操作を削除するために、様々な方法で。

  でRedisUtil / utilのメソッドを参照してください使用してください。redisTemplate基本的にすべてのRedisの操作を達成することができます。

Benpianオリジナル投稿者:springboot統合Redisの

プロジェクト出典:GitHubに

おすすめ

転載: www.cnblogs.com/wuyoucao/p/10941792.html