Warum gibt die Redis-ExistenzById-Methode bei hoher Last oder gleichzeitigem Zugriff manchmal „false“ zurück, obwohl der
Posted: 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:
Redis-Repository:
Sitzungsdatenklasse:
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.
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);
}
}
Code: Select all
public interface SessionRedisDataRepository extends CrudRepository {
}
Code: Select all
@RedisHash(value = "SessionData", timeToLive = 3600L)
public class SessionRedisData implements Serializable {
@Id
private String sessionId;
}
- 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.