{"id":656,"date":"2026-04-04T22:33:11","date_gmt":"2026-04-04T21:33:11","guid":{"rendered":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/?p=656"},"modified":"2026-06-16T22:37:58","modified_gmt":"2026-06-16T21:37:58","slug":"redis-in-java-caching-pub-sub-und-session-management-mit-spring-data-redis","status":"publish","type":"post","link":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/?p=656","title":{"rendered":"Redis in Java \u2013 Caching, Pub\/Sub und Session-Management mit Spring Data Redis"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Redis ist der Schweizer Taschenmesser unter den Datenbanken: extrem schnell, vielf\u00e4ltig einsetzbar und nativ auf Performance optimiert. W\u00e4hrend relationale Datenbanken auf Festplattenpersistenz und ACID-Transaktionen optimiert sind, gl\u00e4nzt Redis als In-Memory-Datenbank mit Sub-Millisekunden-Latenz. Spring Data Redis macht die Integration in Spring-Boot-Projekte nahtlos.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Redis als Cache<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Die h\u00e4ufigste Anwendung von Redis in Java-Projekten ist das Caching. Spring Boot bietet mit&nbsp;<code>@Cacheable<\/code>&nbsp;eine deklarative Schnittstelle \u2013 das Backend tauscht man \u00fcber die Konfiguration aus.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Abh\u00e4ngigkeiten:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"HTML, XML\" data-shcb-language-slug=\"xml\"><span><code class=\"hljs language-xml\"><span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">dependency<\/span>&gt;<\/span>\n    <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">groupId<\/span>&gt;<\/span>org.springframework.boot<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">groupId<\/span>&gt;<\/span>\n    <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">artifactId<\/span>&gt;<\/span>spring-boot-starter-data-redis<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">artifactId<\/span>&gt;<\/span>\n<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">dependency<\/span>&gt;<\/span>\n<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">dependency<\/span>&gt;<\/span>\n    <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">groupId<\/span>&gt;<\/span>org.springframework.boot<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">groupId<\/span>&gt;<\/span>\n    <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">artifactId<\/span>&gt;<\/span>spring-boot-starter-cache<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">artifactId<\/span>&gt;<\/span>\n<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">dependency<\/span>&gt;<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">HTML, XML<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">xml<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Konfiguration f\u00fcr Redis als Cache-Backend:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">@Configuration\n@EnableCaching\n<span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">CacheConfig<\/span> <\/span>{\n}\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">spring.cache.type=redis\nspring.data.redis.host=localhost\nspring.data.redis.port=6379\nspring.cache.redis.time-to-live=10m\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Cacheable Service:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-3\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">@Service\n<span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">ProduktService<\/span> <\/span>{\n\n    @Cacheable(value = <span class=\"hljs-string\">\"produkte\"<\/span>, key = <span class=\"hljs-string\">\"#id\"<\/span>)\n    <span class=\"hljs-keyword\">public<\/span> Produkt findById(Long id) {\n        &lt;em&gt;<span class=\"hljs-comment\">\/\/ Nur beim ersten Aufruf (Cache Miss) \u2013 danach aus Redis&lt;\/em&gt;<\/span>\n        <span class=\"hljs-keyword\">return<\/span> produktRepository.findById(id)\n            .orElseThrow();\n    }\n\n    @CacheEvict(value = <span class=\"hljs-string\">\"produkte\"<\/span>, key = <span class=\"hljs-string\">\"#id\"<\/span>)\n    <span class=\"hljs-keyword\">public<\/span> void update(Long id, ProduktUpdate update) {\n        &lt;em&gt;<span class=\"hljs-comment\">\/\/ Cache-Eintrag wird nach dem Update gel\u00f6scht&lt;\/em&gt;<\/span>\n        produktRepository.update(id, update);\n    }\n}\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-3\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Spring pr\u00fcft vor dem Methodenaufruf, ob der Schl\u00fcssel im Redis-Cache existiert. Wenn ja, wird die Methode \u00fcbersprungen und der gecachte Wert zur\u00fcckgegeben.&nbsp;<code>@CacheEvict<\/code>&nbsp;entfernt den Eintrag nach schreibenden Operationen.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">RedisTemplate f\u00fcr direkten Zugriff<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">F\u00fcr granulare Operationen bietet Spring Data Redis das&nbsp;<code>RedisTemplate<\/code>:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-4\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">@Bean\npublic RedisTemplate&lt;<span class=\"hljs-built_in\">String<\/span>, Produkt&gt; redisTemplate(\n        RedisConnectionFactory factory) {\n    RedisTemplate&lt;<span class=\"hljs-built_in\">String<\/span>, Produkt&gt; template = <span class=\"hljs-keyword\">new<\/span> RedisTemplate&lt;&gt;();\n    template.setConnectionFactory(factory);\n    template.setKeySerializer(<span class=\"hljs-keyword\">new<\/span> StringRedisSerializer());\n    template.setValueSerializer(\n        <span class=\"hljs-keyword\">new<\/span> Jackson2JsonRedisSerializer&lt;&gt;(Produkt.class));\n    <span class=\"hljs-keyword\">return<\/span> template;\n}\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-4\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Direkte Nutzung:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-5\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">&lt;em&gt;<span class=\"hljs-comment\">\/\/ Speichern mit TTL&lt;\/em&gt;<\/span>\nredisTemplate.opsForValue()\n    .set(<span class=\"hljs-string\">\"produkt:42\"<\/span>, produkt, Duration.ofMinutes(<span class=\"hljs-number\">30<\/span>));\n\n<span class=\"xml\"><span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">em<\/span>&gt;<\/span>\/\/ TTL pr\u00fcfen<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">em<\/span>&gt;<\/span><\/span>\nLong ttl = redisTemplate.getExpire(<span class=\"hljs-string\">\"produkt:42\"<\/span>); <span class=\"xml\"><span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">em<\/span>&gt;<\/span>\/\/ in Sekunden<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">em<\/span>&gt;<\/span><\/span>\n\n<span class=\"xml\"><span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">em<\/span>&gt;<\/span>\/\/ Atomar inkrementieren<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">em<\/span>&gt;<\/span><\/span>\nLong aufrufe = redisTemplate.opsForValue()\n    .increment(<span class=\"hljs-string\">\"counter:produkt:42\"<\/span>);\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-5\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Redis bietet neben einfachen Key-Value-Operationen auch Listen, Sets, Sorted Sets und Hashes als native Datenstrukturen \u2013 alle \u00fcber&nbsp;<code>redisTemplate.opsForList()<\/code>,&nbsp;<code>.opsForSet()<\/code>&nbsp;etc. ansprechbar.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Pub\/Sub mit Redis<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Redis kann als Message Broker fungieren \u2013 f\u00fcr einfache Ereignisbenachrichtigungen ohne den Overhead von Kafka oder RabbitMQ.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Konfiguration:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-6\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">@Configuration\n<span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">RedisPubSubConfig<\/span> <\/span>{\n\n    @Bean\n    <span class=\"hljs-keyword\">public<\/span> RedisMessageListenerContainer container(\n            RedisConnectionFactory factory,\n            MessageListenerAdapter adapter) {\n        RedisMessageListenerContainer container =\n            <span class=\"hljs-keyword\">new<\/span> RedisMessageListenerContainer();\n        container.setConnectionFactory(factory);\n        container.addMessageListener(adapter,\n            <span class=\"hljs-keyword\">new<\/span> PatternTopic(<span class=\"hljs-string\">\"bestellungen.*\"<\/span>));\n        <span class=\"hljs-keyword\">return<\/span> container;\n    }\n\n    @Bean\n    <span class=\"hljs-keyword\">public<\/span> MessageListenerAdapter adapter(\n            BestellungSubscriber subscriber) {\n        <span class=\"hljs-keyword\">return<\/span> <span class=\"hljs-keyword\">new<\/span> MessageListenerAdapter(subscriber, <span class=\"hljs-string\">\"onMessage\"<\/span>);\n    }\n}\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-6\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Subscriber:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-7\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">@Component\npublic <span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">BestellungSubscriber<\/span> <\/span>{\n\n    public <span class=\"hljs-keyword\">void<\/span> onMessage(<span class=\"hljs-built_in\">String<\/span> nachricht) {\n        log.info(<span class=\"hljs-string\">\"Neue Bestellung: {}\"<\/span>, nachricht);\n        <span class=\"xml\"><span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">em<\/span>&gt;<\/span>\/\/ Lager aktualisieren, E-Mail versenden ...<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">em<\/span>&gt;<\/span><\/span>\n    }\n}\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-7\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Publisher:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-8\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">redisTemplate<\/span><span class=\"hljs-selector-class\">.convertAndSend<\/span>(\n    \"<span class=\"hljs-selector-tag\">bestellungen<\/span><span class=\"hljs-selector-class\">.neu<\/span>\", <span class=\"hljs-selector-tag\">bestellungJson<\/span>);\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-8\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Pub\/Sub eignet sich f\u00fcr Szenarien wie Cache-Invalidation \u00fcber Service-Grenzen hinweg oder Echtzeit-Benachrichtigungen. F\u00fcr garantierte Zustellung (At-Least-Once) sollte man jedoch auf Kafka oder Redis Streams ausweichen.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Redis Streams<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Redis Streams (seit Redis 5.0) bieten eine persistente Nachrichtenstruktur mit Consumer Groups \u2013 ideal f\u00fcr Event-Driven-Architekturen, bei denen Nachrichten nicht verloren gehen d\u00fcrfen:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-9\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">&lt;em&gt;<span class=\"hljs-comment\">\/\/ Nachricht schreiben&lt;\/em&gt;<\/span>\n<span class=\"hljs-built_in\">Map<\/span>&lt;<span class=\"hljs-built_in\">String<\/span>, <span class=\"hljs-built_in\">String<\/span>&gt; body = <span class=\"hljs-built_in\">Map<\/span>.of(\n    <span class=\"hljs-string\">\"produktId\"<\/span>, <span class=\"hljs-string\">\"42\"<\/span>, <span class=\"hljs-string\">\"menge\"<\/span>, <span class=\"hljs-string\">\"3\"<\/span>);\nredisTemplate.opsForStream()\n    .add(StreamRecords.string(body)\n        .withStreamKey(<span class=\"hljs-string\">\"bestellungen\"<\/span>));\n\n<span class=\"xml\"><span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">em<\/span>&gt;<\/span>\/\/ Consumer Group erstellen (einmalig)<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">em<\/span>&gt;<\/span><\/span>\nredisTemplate.opsForStream().createGroup(\n    <span class=\"hljs-string\">\"bestellungen\"<\/span>, <span class=\"hljs-string\">\"lager-service\"<\/span>);\n\n<span class=\"xml\"><span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">em<\/span>&gt;<\/span>\/\/ Nachrichten lesen<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">em<\/span>&gt;<\/span><\/span>\nList&lt;MapRecord&lt;<span class=\"hljs-built_in\">String<\/span>, <span class=\"hljs-built_in\">String<\/span>, <span class=\"hljs-built_in\">String<\/span>&gt;&gt; records =\n    redisTemplate.opsForStream().read(\n        Consumer.from(<span class=\"hljs-string\">\"lager-service\"<\/span>, <span class=\"hljs-string\">\"instanz-1\"<\/span>),\n        StreamReadOptions.empty().count(<span class=\"hljs-number\">10<\/span>),\n        StreamOffset.create(<span class=\"hljs-string\">\"bestellungen\"<\/span>,\n            ReadOffset.lastConsumed()));\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-9\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Im Gegensatz zu Pub\/Sub bleiben Nachrichten in Streams erhalten und k\u00f6nnen von mehreren Consumer Groups unabh\u00e4ngig konsumiert werden. Spring Data Redis unterst\u00fctzt Streams nativ \u00fcber&nbsp;<code>opsForStream()<\/code>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Spring Session mit Redis<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Session-Management mit Redis verteilt HTTP-Sessions \u00fcber mehrere Server-Instanzen, ohne dass der Client an eine bestimmte Instanz gebunden wird (Sticky Sessions):<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-10\" data-shcb-language-name=\"HTML, XML\" data-shcb-language-slug=\"xml\"><span><code class=\"hljs language-xml\"><span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">dependency<\/span>&gt;<\/span>\n    <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">groupId<\/span>&gt;<\/span>org.springframework.session<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">groupId<\/span>&gt;<\/span>\n    <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">artifactId<\/span>&gt;<\/span>spring-session-data-redis<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">artifactId<\/span>&gt;<\/span>\n<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">dependency<\/span>&gt;<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-10\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">HTML, XML<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">xml<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Konfiguration:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">spring.session.store-type=redis\nspring.session.redis.flush-mode=on_save\nspring.session.timeout=30m\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Danach ist jede HTTP-Session automatisch in Redis gespeichert \u2013 alle Server-Instanzen teilen sich die Sessions. Ein Load Balancer kann Requests frei verteilen, ohne dass der Benutzer seinen Login verliert. Aufr\u00e4umen \u00fcbernimmt Redis \u00fcber den TTL-Mechanismus.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Performance-Vergleich<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th class=\"has-text-align-left\" data-align=\"left\">Operation<\/th><th class=\"has-text-align-left\" data-align=\"left\">Redis (lokal)<\/th><th class=\"has-text-align-left\" data-align=\"left\">PostgreSQL<\/th><th class=\"has-text-align-left\" data-align=\"left\">Faktor<\/th><\/tr><\/thead><tbody><tr><td>Einfaches GET<\/td><td>~0,1 ms<\/td><td>~2 ms<\/td><td>20\u00d7<\/td><\/tr><tr><td>Query mit Index<\/td><td>~0,5 ms<\/td><td>~5 ms<\/td><td>10\u00d7<\/td><\/tr><tr><td>Schreiben (single)<\/td><td>~0,3 ms<\/td><td>~8 ms<\/td><td>25\u00d7<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Die Zahlen variieren je nach Hardware und Netzwerk, aber die Gr\u00f6\u00dfenordnung macht klar: Redis ist f\u00fcr Hot-Paths und Caching ideal.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Fazit<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Redis erg\u00e4nzt klassische relationale Datenbanken ideal. Als Caching-Layer reduziert es die Last auf PostgreSQL\/MySQL, als Pub\/Sub-Broker erm\u00f6glicht es ereignisgesteuerte Architekturen, und als Session-Store entkoppelt es den Anwendungszustand vom Server. Spring Data Redis abstrahiert die Redis-Kommunikation hinter gewohnten Spring-Idiomen wie&nbsp;<code>@Cacheable<\/code>,&nbsp;<code>RedisTemplate<\/code>&nbsp;und&nbsp;<code>MessageListenerAdapter<\/code>. Die nahtlose Integration macht Redis zur ersten Wahl f\u00fcr performante Java-Anwendungen.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Hinweis zur Lizenz:<\/strong>&nbsp;Seit Version 7.4 (M\u00e4rz 2024) ist Redis nicht mehr unter der BSD-Lizenz verf\u00fcgbar, sondern dual lizenziert unter RSALv2 und SSPLv1. F\u00fcr die meisten Entwickler \u00e4ndert sich dadurch nichts \u2013 interne und pers\u00f6nliche Nutzung bleibt frei. Wer eine echte Open-Source-Alternative sucht, findet mit&nbsp;<strong>Valkey<\/strong>&nbsp;(Linux Foundation) einen kompatiblen Fork unter BSD-Lizenz.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Redis ist der Schweizer Taschenmesser unter den Datenbanken: extrem schnell, vielf\u00e4ltig einsetzbar und nativ auf Performance optimiert. W\u00e4hrend relationale Datenbanken auf Festplattenpersistenz und ACID-Transaktionen optimiert sind, gl\u00e4nzt Redis als In-Memory-Datenbank mit Sub-Millisekunden-Latenz. Spring Data Redis macht die Integration in Spring-Boot-Projekte nahtlos. Redis als Cache Die h\u00e4ufigste Anwendung von Redis in Java-Projekten ist das Caching. Spring [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4,5],"tags":[],"class_list":["post-656","post","type-post","status-publish","format-standard","hentry","category-plain_java","category-spring"],"_links":{"self":[{"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=\/wp\/v2\/posts\/656","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=656"}],"version-history":[{"count":1,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=\/wp\/v2\/posts\/656\/revisions"}],"predecessor-version":[{"id":657,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=\/wp\/v2\/posts\/656\/revisions\/657"}],"wp:attachment":[{"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=656"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=656"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=656"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}