Maison  >  Article  >  base de données  >  Comment utiliser Spring Boot pour créer rapidement un cache de session distribué basé sur Redis

Comment utiliser Spring Boot pour créer rapidement un cache de session distribué basé sur Redis

WBOY
WBOYavant
2023-05-27 20:49:27883parcourir

Utilisez Spring Boot pour créer rapidement une solution de cache de session distribuée basée sur Redis

Dans les applications Web à grande échelle, la gestion des sessions est très importante, qui ne peut pas être satisfaite par le stockage sur une seule machine.

Il existe généralement les méthodes suivantes :

  1. Persistance des sessions dans la base de données. Mais l'inconvénient est que le coût de lecture et d'écriture est trop élevé.

  2. Dé-session, comme le stockage des informations dans les cookies. Mais l'inconvénient est que la taille est limitée et. dangereux.

3. Stockez la session dans une base de données nosql distribuée, telle que Redis.

Étape 1 : Configurez un environnement de développement Spring Boot

Ajoutez la dépendance principale maven spring-session-data-redis

<!--基于redis的分布式session存储-->
        <dependency>
            <groupId>org.springframework.session</groupId>
            <artifactId>spring-session-data-redis</artifactId>
        </dependency>

Configurez les propriétés de connexion Redis dans le fichier application.properties

######   Redis config start ######
spring.redis.database=0
spring.redis.host=192.168.41.60
spring.redis.port=6379
spring.redis.password=
spring.redis.pool.max-active=20
spring.redis.pool.max-wait=-1
spring.redis.pool.max-idle=8
spring.redis.pool.min-idle=0
spring.redis.timeout=0
######   Redis config end ######

Étape 2 : Activer l'annotation @EnableRedisHttpSession

@Configuration
@EnableRedisHttpSession(redisNamespace = "mysession",maxInactiveIntervalInSeconds = 60*60*24)
public class SessionConfig

Le code source de l'annotation @EnableRedisHttpSession est le suivant. Vous pouvez voir que trois paramètres peuvent être configurés :

  • .

    maxInactiveIntervalInSeconds : délai d'expiration des données en session (pas de session dans Redis) Délai d'expiration)

  • Dans ma configuration, j'ai spécifié un espace de noms nommé "mysession" pour identifier l'application actuelle

  • redisFlushMode : la façon dont Redis enregistre le session, le ON_SAVE
    par défaut en a deux. One way : IMMEDIATE : Enregistrez immédiatement une fois la session créée. ON_SAVE : Il ne sera pas enregistré lors de la création de la session, mais il sera enregistré lors de l'ajout de données à la session

    .
@Retention(java.lang.annotation.RetentionPolicy.RUNTIME)
@Target({ java.lang.annotation.ElementType.TYPE })
@Documented
@Import(RedisHttpSessionConfiguration.class)
@Configuration
public @interface EnableRedisHttpSession
    int maxInactiveIntervalInSeconds() default 1800;

    String redisNamespace() default "";

    RedisFlushMode redisFlushMode() default

Étape 3 : Test

Ecrire un contrôleur

@RestController
public class HelloController

    @RequestMapping("/hello/{username}")
    public String hello(HttpSession session, @PathVariable(value = "username") String username) {
        session.setAttribute("username", username);
        return "保存session到Redis成功";
    }

    @RequestMapping("/getName")
    public String getUsername(HttpSession session) {
        String username = (String) session.getAttribute("username");
        return

Lorsque le navigateur accède au lien http://localhost:8080/hello/admin, la méthode

hello recevra les paramètres passés par le navigateur et les enregistrera dans la session, puis enregistrez la session Enregistrer dans Redis

En affichant les informations dans Redis, vous pouvez voir les informations suivantes :

Le spring:session est automatiquement ajouté et l'espace de noms mysession que nous avons créé se trouve sous ce répertoire par défaut

Ensuite, nous visitons http://localhost:8080/getName, vous pouvez voir que le navigateur affichera l'administrateur que nous venons d'enregistrer dans la session

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