Maison  >  Article  >  base de données  >  Comment utiliser Redis correctement dans Springboot

Comment utiliser Redis correctement dans Springboot

PHPz
PHPzavant
2023-05-29 15:07:06671parcourir

Redis implémente la mise en cache des données. Dans le projet, certaines données de dictionnaire, données de session et données temporaires seront stockées dans Redis. De manière générale, plusieurs threads peuvent utiliser une seule implémentation Redis ensemble. L'implémentation d'un seul thread gaspille trop de ressources. Il est très dangereux de ne pas pouvoir contrôler le nombre de threads, c'est pourquoi certains composants du pool de threads Redis sont apparus. Parlons des deux composants principaux.

le pool de threads jedis signifie principalement que chaque instance a son propre thread et que les threads peuvent être obtenus à partir du pool qu'elle crée
lettuce lettuce est un outil de pool de threads lancé par Apache. Son instance redis peut être partagée et accessible par plusieurs threads. amélioration Utilisation améliorée des ressources

configuration de la sérialisation redis

De manière générale, redis-key utilise la sérialisation de chaîne ; redis-value utilise la sérialisation json. JSON est de petite taille et hautement lisible, et n'a pas besoin d'implémenter l'interface du sérialiseur.

/**
 * 对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;
    }
}

Dans le code ci-dessus, la chaîne json générée par om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL) a un type, de sorte qu'elle puisse être directement déduite via le type lors de la désérialisation.

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

Regardez le code d'ajout et de lecture

 @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");
    }

Remarque : pour la classe d'entité Token, elle doit avoir un constructeur sans argument, qui est nécessaire pour la désérialisation.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer