ホームページ  >  記事  >  データベース  >  SpringBoot で Redis を正しく使用する方法

SpringBoot で Redis を正しく使用する方法

PHPz
PHPz転載
2023-05-29 15:07:06674ブラウズ

Redis はデータ キャッシュを実装しています。プロジェクトでは、一部の辞書データ、セッション データ、および一時データが redis に保存されます。Springboot も redis をサポートしています。一般的に、複数のスレッドが 1 つの redis 実装を使用します。スレッド セーフのリスクがあります。スレッドごとに 1 つのスレッドを実装するのはリソースの無駄が多すぎます。スレッド数を制御できないのは非常に危険です。そこで、いくつかの Redis スレッド プール コンポーネントが登場しました。主な 2 つのコンポーネントについて説明します。

jedis スレッド プールとは主に、各インスタンスが独自のスレッドを持ち、確立されたプールからスレッドを取得できることを意味します
lettuce lettuce は、Apache によって起動されたスレッド プール ツールです。その redis インスタンスは使用できます複数のスレッド共有アクセスにより、リソース使用率が向上します

redis シリアル化設定

一般的に、redis-key は文字列シリアル化を使用し、redis-value は json シリアル化を使用し、json のサイズは小さく、可読性が高く、シリアライザー インターフェイスを実装する必要はありません。

/**
 * 对redis的配置.
 */
@Configuration
public class RedisConfig {

    @Autowired
    private RedisConnectionFactory redisConnectionFactory;

    /**
     * redis重写RedisTemplate.
     */
    @Bean
    public RedisTemplate redisTemplate() {
        RedisTemplate redisTemplate = new RedisTemplate();
        RedisSerializer<String> stringSerializer = new StringRedisSerializer();
        Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
        ObjectMapper om = new ObjectMapper();
        om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
        //序列化时允许非常量字段均输出类型,即redis序列化后带有类型
        om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
        jackson2JsonRedisSerializer.setObjectMapper(om);
        // redis key的序列化
        redisTemplate.setKeySerializer(stringSerializer);
        redisTemplate.setHashKeySerializer(stringSerializer);

        // redis value的序列化
        redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);
        redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer);

        redisTemplate.setConnectionFactory(redisConnectionFactory);
        return redisTemplate;
    }
}

上記のコードでは、om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL) によって生成された json 文字列には型があるため、逆シリアル化するときに型を通じて直接推論できます。

[
  "com.lind.basic.entity.Token",
  {
    "credentials": "ok",
    "region": "hello",
    "bucket": null
  }
]

追加と読み取りのコードを参照してください

 @GetMapping("set")
    public String set() throws JsonProcessingException {
        Token token = Token.builder()
                .credentials("ok")
                .region("hello")
                .build();
        redisTemplate.opsForValue().set("test:user", token);//redisTemplate帮我们序列化
        redisTemplate.opsForHash().put("author", "zzl", token);
        return "OK";
    }

    @GetMapping("get")
    public Token get() throws IOException {
        return (Token) redisTemplate.opsForValue().get("test:user");
    }

注: エンティティ クラス Token の場合、逆シリアル化に必要な引数のないコンストラクターが必要です。

以上がSpringBoot で Redis を正しく使用する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はyisu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。