zoukankan      html  css  js  c++  java
  • Spring Boot系列教程十:Spring boot集成Sentinel Redis

    前言

    上一篇文章介绍了spring boot集成单点的redis,然而实际生产环境使用单点的redis风险很高,一旦宕机整个服务将无法使用,这篇文章介绍如何使用基于sentinel的redis高可用方案。
    哨兵sentinel的地址如下:
    192.168.12.194:26379
    192.168.12.194:36379
    192.168.12.194:46379
     
    Redis的地址如下:
    192.168.12.194:6379
    192.168.12.194:6380
    192.168.12.194:6381
     

    实现:

    properties配置文件中添加配置信息:
     1 spring.redis.database=0
     2 spring.redis.password=123456
     3 
     4 # pool settings ...池配置  
     5 spring.redis.pool.max-idle=8  
     6 spring.redis.pool.min-idle=0  
     7 spring.redis.pool.max-active=8  
     8 spring.redis.pool.max-wait=-1 
     9 
    10 #哨兵监听redis server名称
    11 spring.redis.sentinel.master=mymaster
    12 #哨兵的配置列表
    13 spring.redis.sentinel.nodes=192.168.12.194:26379,192.168.12.194:36379,192.168.12.194:46379

    创建RedisComponent类

     1 package com.woniu.RedisComponent;
     2 
     3 import java.io.UnsupportedEncodingException;
     4 
     5 import org.springframework.beans.factory.annotation.Autowired;
     6 import org.springframework.data.redis.core.RedisTemplate;
     7 import org.springframework.data.redis.core.StringRedisTemplate;
     8 import org.springframework.data.redis.core.ValueOperations;
     9 import org.springframework.stereotype.Component;
    10 import org.springframework.stereotype.Service;
    11 
    12 import com.woniu.bean.User;
    13 
    14 
    15 @Component
    16 public class RedisComponent {
    17     
    18     @Autowired
    19     //操作字符串的template,StringRedisTemplate是RedisTemplate的一个子集
    20     private StringRedisTemplate stringRedisTemplate;
    21     
    22     @Autowired
    23     // RedisTemplate,可以进行所有的操作  
    24     private RedisTemplate<Object,Object> redisTemplate;
    25     
    26     public void set(String key, String value){
    27         ValueOperations<String, String> ops = this.stringRedisTemplate.opsForValue();
    28         boolean bExistent = this.stringRedisTemplate.hasKey(key);
    29         if (bExistent) {
    30             System.out.println("this key is bExistent!");
    31         }else{
    32             ops.set(key, value);
    33         }
    34     }
    35     
    36     public String get(String key){
    37         return this.stringRedisTemplate.opsForValue().get(key);
    38     }
    39     
    40     public void del(String key){
    41         this.stringRedisTemplate.delete(key);
    42     }
    43     
    44     public void sentinelSet(User user){
    45         String key = null;
    46         try {
    47             key = new String(user.getId().getBytes("gbk"),"utf-8");
    48         } catch (UnsupportedEncodingException e) {
    49             // TODO Auto-generated catch block
    50             e.printStackTrace();
    51         }
    52 
    53         System.out.println(key);
    54         redisTemplate.opsForValue().set(key, user.toString());
    55     }
    56     
    57     public String sentinelGet(String key){
    58         return stringRedisTemplate.opsForValue().get(key);
    59     }
    60 }
    添加测试类的测试代码
     
     1 package com.woniu;
     2 
     3 import org.junit.Test;
     4 import org.junit.runner.RunWith;
     5 import org.springframework.beans.factory.annotation.Autowired;
     6 import org.springframework.boot.test.context.SpringBootTest;
     7 import org.springframework.test.context.junit4.SpringRunner;
     8 
     9 import com.woniu.RedisComponent.RedisComponent;
    10 import com.woniu.bean.User;
    11 
    12 @RunWith(SpringRunner.class)
    13 @SpringBootTest
    14 public class SpringbootSentinelredisApplicationTests {
    15 
    16     @Autowired
    17     private RedisComponent redisComponet;
    18     
    19     @Test
    20     public void sentinelSet(){
    21         User user = new User();
    22         user.setId("001");
    23         user.setAge("30");
    24         user.setName("wangpengfei");
    25         
    26         redisComponet.sentinelSet(user);
    27     }
    28 
    29     @Test
    30     public void sentinelGet(){
    31         String str = redisComponet.sentinelGet("001");
    32         System.out.println(str);
    33     }
    34 }
     
  • 相关阅读:
    The formatter threw an exception while trying to deserialize the message in WCF
    通过Web Deploy方式部署WCF
    The Managed Metadata Service or Connection is currently not available
    How to create Managed Metadata Column
    冒泡算法
    asp.net core 实战项目(一)——ef core的使用
    Vue学习笔记入门篇——安装及常用指令介绍
    Vue学习笔记入门篇——数据及DOM
    Vue学习笔记目录
    Chart.js在Laravel项目中的应用
  • 原文地址:https://www.cnblogs.com/wdpnodecodes/p/7406976.html
Copyright © 2011-2022 走看看