У меня есть веб-приложение, для которого я использую 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> {
}
Где это кажется быть проблемой?