{"id":87444,"date":"2019-01-29T13:00:38","date_gmt":"2019-01-29T11:00:38","guid":{"rendered":"https:\/\/www.javacodegeeks.com\/?p=87444"},"modified":"2019-01-29T14:02:42","modified_gmt":"2019-01-29T12:02:42","slug":"spring-data-redis-high-availability-sentinel","status":"publish","type":"post","link":"https:\/\/www.javacodegeeks.com\/2019\/01\/spring-data-redis-high-availability-sentinel.html","title":{"rendered":"Spring Data Redis: High-Availability with Sentinel"},"content":{"rendered":"<h2 class=\"wp-block-heading\">1. Overview<\/h2>\n<p>For high-availability with Redis, we can use Spring Data Redis\u2019 support for Redis Sentinel. With Sentinel, we can create a Redis deployment that automatically resists certain failures.<\/p>\n<p>Redis Sentinel also provides other collateral tasks such as monitoring, notifications and acts as a configuration provider for clients.<\/p>\n<p>At a high level, Sentinel\u2019s capabilities are:<\/p>\n<ul class=\"wp-block-list\">\n<li><strong>Automated failover<\/strong>. When a master is not working as expected, Sentinel starts a failover process for us where a slave is promoted to master. Additionally, the other slaves are reconfigured to use the new master and the applications using the Redis server are informed about the new address to use.<\/li>\n<li><strong>Configuration source<\/strong>. When a failover happens, Sentinels will report the new address. This is because Sentinel functions as a source of authority for clients. When clients do service discovery, they connect to Sentinels to request the address of the current Redis master responsible for a given service.<\/li>\n<li><strong>Monitoring<\/strong>. Sentinel periodically checks if our master and slave instances are working as they are intended to.<\/li>\n<li><strong>Notifying<\/strong>. Sentinel can be configured to notify a variety of targets when an error occurs with one of the Redis instances. These targets include other applications, a sysadmin, or an API.<\/li>\n<\/ul>\n<h2 class=\"wp-block-heading\">2. How to Run Sentinel<\/h2>\n<p>A stable release of Sentinel has shipped with Redis since Redis 2.8.<\/p>\n<p>Starting Sentinel is very easy. When we reviewed <a href=\"https:\/\/www.javacodegeeks.com\/2017\/11\/intro-redis-spring-boot.html\" target=\"_blank\" rel=\"noreferrer noopener\" aria-label=\" (opens in a new tab)\">Spring Data Redis (with Spring Boot)<\/a> in my previous article, we installed Redis using homebrew on Mac. This command allows us to run Sentinel with that installation:<\/p>\n<pre class=\"wp-block-preformatted brush:bash\">redis-sentinel \/path\/to\/sentinel.conf<\/pre>\n<p>If we are using the <em>redis-sentinel <\/em>executable (or if have a symbolic link using that name to the <em>redis-server<\/em> executable), we can run Sentinel with the above command as well.<div style=\"display:inline-block; margin: 15px 0;\"> <div id=\"adngin-JavaCodeGeeks_incontent_video-0\" style=\"display:inline-block;\"><\/div> <\/div><\/p>\n<p>Alternatively, we can use the <em>redis-server<\/em>&nbsp;executable and start it in Sentinel mode, like this:<\/p>\n<pre class=\"wp-block-preformatted brush:bash\">redis-server \/path\/to\/sentinel.conf --sentinel<\/pre>\n<h2 class=\"wp-block-heading\">3. Key Concepts to Know Before Deploying Sentinel<\/h2>\n<p>Some concepts we should review before deploying to Sentinel include:<\/p>\n<ol class=\"wp-block-list\">\n<li>We require at least three Sentinel instances for a durable Redis deployment.<\/li>\n<li>We should place the three Sentinel instances into computers or virtual machines that are believed to fail independently rather than together. For instance, this could mean different availability zones.<\/li>\n<li>Redis uses asynchronous replication and therefore does not guarantee that received writes are kept during failures, even when using Sentinel. However, we can deploy Sentinel that mitigates the amount of time that writes can be lost.<\/li>\n<li>Any high-availability setup must be tested periodically and Sentinel is no different. We need to test in both development environments and in our production environments. By planning and testing for failure, we limit our failures.<\/li>\n<\/ol>\n<h2 class=\"wp-block-heading\">4. Configuration in Spring Data<\/h2>\n<p>When we use a Sentinels-based configuration, we do not provide the Redis host\/port information to Spring Data Redis. Instead we provide the property for the master server and a list of Sentinel URLs. Each Sentinel process has its own configuration file that lists the master Redis server, such as:<\/p>\n<pre class=\"wp-block-preformatted brush:bash\">sentinel monitor themaster 127.0.0.1 6379 2\nsentinel down-after-milliseconds themaster 60000\nsentinel failover-timeout themaster 180000\nsentinel parallel-syncs themaster 1<\/pre>\n<p>Once we have configured our master, slaves and Sentinels, we need to change the spring data redis configuration in our application to work with the sentinels.<\/p>\n<h3 class=\"wp-block-heading\">4.1 Java Configuration<\/h3>\n<p>The Java configuration can be done using both Jedis and Lettuce:<\/p>\n<pre class=\"wp-block-preformatted brush:bash\">\/**\n * Jedis\n *\/\n@Bean\npublic RedisConnectionFactory jedisConnectionFactory() {\n  RedisSentinelConfiguration sentinelConfig = new RedisSentinelConfiguration()\n  .master(\"themaster\")\n  .sentinel(\"127.0.0.1\", 26579)\n  .sentinel(\"127.0.0.1\", 26580);\n  return new JedisConnectionFactory(sentinelConfig);\n}\n\n\/**\n * Lettuce\n *\/\n@Bean\npublic RedisConnectionFactory lettuceConnectionFactory() {\n  RedisSentinelConfiguration sentinelConfig = new RedisSentinelConfiguration()\n  .master(\"themaster\")\n  .sentinel(\"127.0.0.1\", 26579)\n  .sentinel(\"127.0.0.1\", 26580);\n  return new LettuceConnectionFactory(sentinelConfig);\n}<\/pre>\n<h3 class=\"wp-block-heading\">4.2 Properties Configuration<\/h3>\n<p>A <em>ProperySource<\/em>, such as <em>application.properties<\/em>, can be used for the configuration. For example, if we use a localhost:<\/p>\n<pre class=\"wp-block-preformatted brush:bash\">spring.redis.sentinel.master= themaster # Name of our Redis server.\nspring.redis.sentinel.nodes= localhost:26579, localhost:26580, localhost:26581 # Comma-separated list of host:port pairs.<\/pre>\n<h2 class=\"wp-block-heading\">5. Conclusion<\/h2>\n<p>Today we reviewed how high-availability can be achieved with Redis by using Sentinel and how Spring Data Redis supports this is in our Spring applications. For more information about Sentinel, the <a href=\"https:\/\/redis.io\/topics\/sentinel\">Redis website<\/a> is a good source.<\/p>\n<p>On my site, there\u2019s also information starting with <a href=\"https:\/\/www.javacodegeeks.com\/2017\/11\/intro-redis-spring-boot.html\" target=\"_blank\" rel=\"noreferrer noopener\" aria-label=\" (opens in a new tab)\">Spring Data Redis and Spring Boot<\/a> and several articles about the Spring Framework in general.<\/p>\n<div class=\"attribution\">\n<table>\n<tbody>\n<tr>\n<td>\n<p>Published on Java Code Geeks with permission by Michael Good, partner at our <a href=\"\/\/www.javacodegeeks.com\/join-us\/jcg\/\" target=\"_blank\" rel=\"noopener\">JCG program<\/a>. See the original article here: <a href=\"https:\/\/michaelcgood.com\/spring-data-redis-sentinel\/\" target=\"_blank\" rel=\"noopener\">Spring Data Redis: High-Availability with Sentinel<\/a><\/p>\n<p>Opinions expressed by Java Code Geeks contributors are their own.<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>1. Overview For high-availability with Redis, we can use Spring Data Redis\u2019 support for Redis Sentinel. With Sentinel, we can create a Redis deployment that automatically resists certain failures. Redis Sentinel also provides other collateral tasks such as monitoring, notifications and acts as a configuration provider for clients. At a high level, Sentinel\u2019s capabilities are: &hellip;<\/p>\n","protected":false},"author":5558,"featured_media":223,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[8],"tags":[117,321],"class_list":["post-87444","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-enterprise-java","tag-redis","tag-spring-data"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.5 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Spring Data Redis: High-Availability with Sentinel - Java Code Geeks<\/title>\n<meta name=\"description\" content=\"Interested to learn about Spring Data Redis? Check our article explaining that Redis Sentinel provides collateral tasks such as monitoring, notifications .\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.javacodegeeks.com\/2019\/01\/spring-data-redis-high-availability-sentinel.html\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Spring Data Redis: High-Availability with Sentinel - Java Code Geeks\" \/>\n<meta property=\"og:description\" content=\"Interested to learn about Spring Data Redis? Check our article explaining that Redis Sentinel provides collateral tasks such as monitoring, notifications .\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.javacodegeeks.com\/2019\/01\/spring-data-redis-high-availability-sentinel.html\" \/>\n<meta property=\"og:site_name\" content=\"Java Code Geeks\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/javacodegeeks\" \/>\n<meta property=\"article:published_time\" content=\"2019-01-29T11:00:38+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2019-01-29T12:02:42+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/redis-logo.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"150\" \/>\n\t<meta property=\"og:image:height\" content=\"150\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Michael Good\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@javacodegeeks\" \/>\n<meta name=\"twitter:site\" content=\"@javacodegeeks\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Michael Good\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2019\\\/01\\\/spring-data-redis-high-availability-sentinel.html#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2019\\\/01\\\/spring-data-redis-high-availability-sentinel.html\"},\"author\":{\"name\":\"Michael Good\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#\\\/schema\\\/person\\\/d13cc729556b91450ae21878a82139ed\"},\"headline\":\"Spring Data Redis: High-Availability with Sentinel\",\"datePublished\":\"2019-01-29T11:00:38+00:00\",\"dateModified\":\"2019-01-29T12:02:42+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2019\\\/01\\\/spring-data-redis-high-availability-sentinel.html\"},\"wordCount\":643,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2019\\\/01\\\/spring-data-redis-high-availability-sentinel.html#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2012\\\/10\\\/redis-logo.jpg\",\"keywords\":[\"Redis\",\"Spring Data\"],\"articleSection\":[\"Enterprise Java\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.javacodegeeks.com\\\/2019\\\/01\\\/spring-data-redis-high-availability-sentinel.html#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2019\\\/01\\\/spring-data-redis-high-availability-sentinel.html\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2019\\\/01\\\/spring-data-redis-high-availability-sentinel.html\",\"name\":\"Spring Data Redis: High-Availability with Sentinel - Java Code Geeks\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2019\\\/01\\\/spring-data-redis-high-availability-sentinel.html#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2019\\\/01\\\/spring-data-redis-high-availability-sentinel.html#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2012\\\/10\\\/redis-logo.jpg\",\"datePublished\":\"2019-01-29T11:00:38+00:00\",\"dateModified\":\"2019-01-29T12:02:42+00:00\",\"description\":\"Interested to learn about Spring Data Redis? Check our article explaining that Redis Sentinel provides collateral tasks such as monitoring, notifications .\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2019\\\/01\\\/spring-data-redis-high-availability-sentinel.html#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.javacodegeeks.com\\\/2019\\\/01\\\/spring-data-redis-high-availability-sentinel.html\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2019\\\/01\\\/spring-data-redis-high-availability-sentinel.html#primaryimage\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2012\\\/10\\\/redis-logo.jpg\",\"contentUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2012\\\/10\\\/redis-logo.jpg\",\"width\":150,\"height\":150},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2019\\\/01\\\/spring-data-redis-high-availability-sentinel.html#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.javacodegeeks.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Java\",\"item\":\"https:\\\/\\\/www.javacodegeeks.com\\\/category\\\/java\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Enterprise Java\",\"item\":\"https:\\\/\\\/www.javacodegeeks.com\\\/category\\\/java\\\/enterprise-java\"},{\"@type\":\"ListItem\",\"position\":4,\"name\":\"Spring Data Redis: High-Availability with Sentinel\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#website\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/\",\"name\":\"Java Code Geeks\",\"description\":\"Java Developers Resource Center\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#organization\"},\"alternateName\":\"JCG\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.javacodegeeks.com\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#organization\",\"name\":\"Exelixis Media P.C.\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2022\\\/06\\\/exelixis-logo.png\",\"contentUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2022\\\/06\\\/exelixis-logo.png\",\"width\":864,\"height\":246,\"caption\":\"Exelixis Media P.C.\"},\"image\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/javacodegeeks\",\"https:\\\/\\\/x.com\\\/javacodegeeks\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#\\\/schema\\\/person\\\/d13cc729556b91450ae21878a82139ed\",\"name\":\"Michael Good\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/dc6ef7dbff80afe08a3cdc3b0677aaa26021085e041ce1873dc2141bc581b623?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/dc6ef7dbff80afe08a3cdc3b0677aaa26021085e041ce1873dc2141bc581b623?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/dc6ef7dbff80afe08a3cdc3b0677aaa26021085e041ce1873dc2141bc581b623?s=96&d=mm&r=g\",\"caption\":\"Michael Good\"},\"description\":\"Michael is a software engineer located in the Washington DC area that is interested in Java, cyber security, and open source technologies. Follow his personal blog to read more from Michael.\",\"sameAs\":[\"http:\\\/\\\/www.michaelcgood.com\"],\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/author\\\/michael-good\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Spring Data Redis: High-Availability with Sentinel - Java Code Geeks","description":"Interested to learn about Spring Data Redis? Check our article explaining that Redis Sentinel provides collateral tasks such as monitoring, notifications .","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.javacodegeeks.com\/2019\/01\/spring-data-redis-high-availability-sentinel.html","og_locale":"en_US","og_type":"article","og_title":"Spring Data Redis: High-Availability with Sentinel - Java Code Geeks","og_description":"Interested to learn about Spring Data Redis? Check our article explaining that Redis Sentinel provides collateral tasks such as monitoring, notifications .","og_url":"https:\/\/www.javacodegeeks.com\/2019\/01\/spring-data-redis-high-availability-sentinel.html","og_site_name":"Java Code Geeks","article_publisher":"https:\/\/www.facebook.com\/javacodegeeks","article_published_time":"2019-01-29T11:00:38+00:00","article_modified_time":"2019-01-29T12:02:42+00:00","og_image":[{"width":150,"height":150,"url":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/redis-logo.jpg","type":"image\/jpeg"}],"author":"Michael Good","twitter_card":"summary_large_image","twitter_creator":"@javacodegeeks","twitter_site":"@javacodegeeks","twitter_misc":{"Written by":"Michael Good","Est. reading time":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.javacodegeeks.com\/2019\/01\/spring-data-redis-high-availability-sentinel.html#article","isPartOf":{"@id":"https:\/\/www.javacodegeeks.com\/2019\/01\/spring-data-redis-high-availability-sentinel.html"},"author":{"name":"Michael Good","@id":"https:\/\/www.javacodegeeks.com\/#\/schema\/person\/d13cc729556b91450ae21878a82139ed"},"headline":"Spring Data Redis: High-Availability with Sentinel","datePublished":"2019-01-29T11:00:38+00:00","dateModified":"2019-01-29T12:02:42+00:00","mainEntityOfPage":{"@id":"https:\/\/www.javacodegeeks.com\/2019\/01\/spring-data-redis-high-availability-sentinel.html"},"wordCount":643,"commentCount":0,"publisher":{"@id":"https:\/\/www.javacodegeeks.com\/#organization"},"image":{"@id":"https:\/\/www.javacodegeeks.com\/2019\/01\/spring-data-redis-high-availability-sentinel.html#primaryimage"},"thumbnailUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/redis-logo.jpg","keywords":["Redis","Spring Data"],"articleSection":["Enterprise Java"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.javacodegeeks.com\/2019\/01\/spring-data-redis-high-availability-sentinel.html#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.javacodegeeks.com\/2019\/01\/spring-data-redis-high-availability-sentinel.html","url":"https:\/\/www.javacodegeeks.com\/2019\/01\/spring-data-redis-high-availability-sentinel.html","name":"Spring Data Redis: High-Availability with Sentinel - Java Code Geeks","isPartOf":{"@id":"https:\/\/www.javacodegeeks.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.javacodegeeks.com\/2019\/01\/spring-data-redis-high-availability-sentinel.html#primaryimage"},"image":{"@id":"https:\/\/www.javacodegeeks.com\/2019\/01\/spring-data-redis-high-availability-sentinel.html#primaryimage"},"thumbnailUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/redis-logo.jpg","datePublished":"2019-01-29T11:00:38+00:00","dateModified":"2019-01-29T12:02:42+00:00","description":"Interested to learn about Spring Data Redis? Check our article explaining that Redis Sentinel provides collateral tasks such as monitoring, notifications .","breadcrumb":{"@id":"https:\/\/www.javacodegeeks.com\/2019\/01\/spring-data-redis-high-availability-sentinel.html#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.javacodegeeks.com\/2019\/01\/spring-data-redis-high-availability-sentinel.html"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.javacodegeeks.com\/2019\/01\/spring-data-redis-high-availability-sentinel.html#primaryimage","url":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/redis-logo.jpg","contentUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/redis-logo.jpg","width":150,"height":150},{"@type":"BreadcrumbList","@id":"https:\/\/www.javacodegeeks.com\/2019\/01\/spring-data-redis-high-availability-sentinel.html#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.javacodegeeks.com\/"},{"@type":"ListItem","position":2,"name":"Java","item":"https:\/\/www.javacodegeeks.com\/category\/java"},{"@type":"ListItem","position":3,"name":"Enterprise Java","item":"https:\/\/www.javacodegeeks.com\/category\/java\/enterprise-java"},{"@type":"ListItem","position":4,"name":"Spring Data Redis: High-Availability with Sentinel"}]},{"@type":"WebSite","@id":"https:\/\/www.javacodegeeks.com\/#website","url":"https:\/\/www.javacodegeeks.com\/","name":"Java Code Geeks","description":"Java Developers Resource Center","publisher":{"@id":"https:\/\/www.javacodegeeks.com\/#organization"},"alternateName":"JCG","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.javacodegeeks.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.javacodegeeks.com\/#organization","name":"Exelixis Media P.C.","url":"https:\/\/www.javacodegeeks.com\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.javacodegeeks.com\/#\/schema\/logo\/image\/","url":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2022\/06\/exelixis-logo.png","contentUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2022\/06\/exelixis-logo.png","width":864,"height":246,"caption":"Exelixis Media P.C."},"image":{"@id":"https:\/\/www.javacodegeeks.com\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/javacodegeeks","https:\/\/x.com\/javacodegeeks"]},{"@type":"Person","@id":"https:\/\/www.javacodegeeks.com\/#\/schema\/person\/d13cc729556b91450ae21878a82139ed","name":"Michael Good","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/dc6ef7dbff80afe08a3cdc3b0677aaa26021085e041ce1873dc2141bc581b623?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/dc6ef7dbff80afe08a3cdc3b0677aaa26021085e041ce1873dc2141bc581b623?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/dc6ef7dbff80afe08a3cdc3b0677aaa26021085e041ce1873dc2141bc581b623?s=96&d=mm&r=g","caption":"Michael Good"},"description":"Michael is a software engineer located in the Washington DC area that is interested in Java, cyber security, and open source technologies. Follow his personal blog to read more from Michael.","sameAs":["http:\/\/www.michaelcgood.com"],"url":"https:\/\/www.javacodegeeks.com\/author\/michael-good"}]}},"_links":{"self":[{"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/posts\/87444","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/users\/5558"}],"replies":[{"embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/comments?post=87444"}],"version-history":[{"count":0,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/posts\/87444\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/media\/223"}],"wp:attachment":[{"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/media?parent=87444"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/categories?post=87444"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/tags?post=87444"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}