Redis はデータ キャッシュを実装しています。プロジェクトでは、一部の辞書データ、セッション データ、および一時データが redis に保存されます。Springboot も redis をサポートしています。一般的に、複数のスレッドが 1 つの redis 実装を使用します。スレッド セーフのリスクがあります。スレッドごとに 1 つのスレッドを実装するのはリソースの無駄が多すぎます。スレッド数を制御できないのは非常に危険です。そこで、いくつかの Redis スレッド プール コンポーネントが登場しました。主な 2 つのコンポーネントについて説明します。
jedis スレッド プールとは主に、各インスタンスが独自のスレッドを持ち、確立されたプールからスレッドを取得できることを意味します
lettuce lettuce は、Apache によって起動されたスレッド プール ツールです。その 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 サイトの他の関連記事を参照してください。