Проблемы производительности Spring Boot Redis с CrudRepository: ~ 1000 мс для поиска ключа - PullRequest
0 голосов
/ 26 мая 2020

У меня есть веб-приложение, для которого я использую Redis для хранения объектов сеанса. У меня есть настраиваемый объект сеанса, для которого я использую утилиты сериализации для сериализации и десериализации его в массив байтов для хранения.

Проблема в том, что время чтения сеанса составляет ~1000 ms для каждого вызова.

Сериализация / десериализация байтов, как и ожидалось, происходит довольно быстро: ~1-10ms.

Вот выдержки из соответствующих классов:

Объект сеанса:

import org.springframework.session.Session;

public class MySession implements Session, Serializable {
...    
} 

Сущность Redis, содержащая байты объекта сеанса:

import org.springframework.util.SerializationUtils;

@Getter
@Setter
@NoArgsConstructor
@RedisHash("my-session")
public class MySessionCacheable implements Serializable {

  private String id;
  private byte[] mySessionBytes;

  public MySessionCacheable(MySession mySession) {
    Instant start = Instant.now();
    this.mySessionBytes = SerializationUtils.serialize(mySession);
    this.id = mySession.getId();
  }

  public MySession getQuestSession() {
    MySession mySession = (MySession) SerializationUtils.deserialize(mySessionBytes);
    return questSession;
  }
}

реализация Springboot SessionRepository для чтения / записи объекта сеанса из / to redis:

public class MySessionRepository implements SessionRepository<MySession> {

  private MySessionRedisRepository _sessionCache;

  @Override
  public void save(MySession session) {
    _sessionCache.save(new MySessionCacheable(session));
  }

   @Override
  public MySession findById(String id) {
    Optional<MySessionCacheable> session2 = _sessionCache.findById(id);
    if (session2.isPresent()) {
      return session2.get().getMySession();
    } else {
      return null;
    }
  }
  ...

Где MySessionRedisRepository - это просто CrudRepository, предоставленное данными Spring:

@Repository
public interface MySessionRedisRepository extends CrudRepository<MySessionCacheable, String> {
}

Где это кажется быть проблемой?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...