by Guest » 16 Jan 2025, 11:23
Ich habe ein Problem mit Redis, wenn ich mithilfe von CrudRepository.existsById() überprüfe, ob ein Schlüssel vorhanden ist. Unter normalen Bedingungen funktioniert alles einwandfrei und der Schlüssel ist in Redis vorhanden, aber das Problem tritt bei hoher Anforderungslast oder gleichzeitigem Zugriff auf.
Redis-Dienst:
Code: Select all
@Service
public class RedisService {
private final SessionRedisDataRepository sessionRedisDataRepository;
public RedisService(SessionRedisDataRepository sessionRedisDataRepository) {
this.sessionRedisDataRepository = sessionRedisDataRepository;
}
public boolean isKeyExists(String key) {
return sessionRedisDataRepository.existsById(key);
}
}
Redis-Repository:
Code: Select all
public interface SessionRedisDataRepository extends CrudRepository {
}
Sitzungsdatenklasse:
Code: Select all
@RedisHash(value = "SessionData", timeToLive = 3600L)
public class SessionRedisData implements Serializable {
@Id
private String sessionId;
}
Wenn mehrere Anfragen gleichzeitig oder unter hoher Auslastung eingehen, gibt die isKeyExists-Methode manchmal „false“ zurück, obwohl der Schlüssel in Redis vorhanden ist.
- Was funktioniert: Unter normaler Last ist der Schlüssel vorhanden, und existById gibt
true zurück.
- Was fehlschlägt: Wenn mehrere gleichzeitige Anforderungen auftreten, wird möglicherweise derselbe Schlüssel überprüft und existById gibt false zurück, obwohl der
Schlüssel in Redis ist.
Was könnte der zugrunde liegende sein Ursache dieses Problems mit existById in diesem Fall und was sind die Korrekturen?
Ich habe ein Problem mit Redis, wenn ich mithilfe von CrudRepository.existsById() überprüfe, ob ein Schlüssel vorhanden ist. Unter normalen Bedingungen funktioniert alles einwandfrei und der Schlüssel ist in Redis vorhanden, aber das Problem tritt bei hoher Anforderungslast oder gleichzeitigem Zugriff auf.
Redis-Dienst:
[code]@Service
public class RedisService {
private final SessionRedisDataRepository sessionRedisDataRepository;
public RedisService(SessionRedisDataRepository sessionRedisDataRepository) {
this.sessionRedisDataRepository = sessionRedisDataRepository;
}
public boolean isKeyExists(String key) {
return sessionRedisDataRepository.existsById(key);
}
}
[/code]
Redis-Repository:
[code]public interface SessionRedisDataRepository extends CrudRepository {
}
[/code]
Sitzungsdatenklasse:
[code]@RedisHash(value = "SessionData", timeToLive = 3600L)
public class SessionRedisData implements Serializable {
@Id
private String sessionId;
}
[/code]
Wenn mehrere Anfragen gleichzeitig oder unter hoher Auslastung eingehen, gibt die isKeyExists-Methode manchmal „false“ zurück, obwohl der Schlüssel in Redis vorhanden ist.
[list]
[*]Was funktioniert: Unter normaler Last ist der Schlüssel vorhanden, und existById gibt
true zurück.
[*]Was fehlschlägt: Wenn mehrere gleichzeitige Anforderungen auftreten, wird möglicherweise derselbe Schlüssel überprüft und existById gibt false zurück, obwohl der
Schlüssel in Redis ist.
[/list]
[b]Was könnte der zugrunde liegende sein Ursache dieses Problems mit existById in diesem Fall und was sind die Korrekturen?[/b]