您的位置:首页 > 数据库 > Redis

Spring Boot系列教程十三:Spring boot集成Sentinel Redis

2018-03-22 10:17 956 查看

前言

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

Redis的地址如下:192.168.12.194:6379192.168.12.194:6380192.16
4000
8.12.194:6381

实现:

properties配置文件中添加配置信息:
[html] view plain copyspring.redis.database=0  
spring.redis.password=123456  
  
# pool settings ...池配置    
spring.redis.pool.max-idle=8    
spring.redis.pool.min-idle=0    
spring.redis.pool.max-active=8    
spring.redis.pool.max-wait=-1   
  
#哨兵监听redis server名称  
spring.redis.sentinel.master=mymaster  
#哨兵的配置列表  
spring.redis.sentinel.nodes=192.168.12.194:26379,192.168.12.194:36379,192.168.12.194:46379  

创建RedisComponent类[html] view plain copypackage com.woniu.RedisComponent;  
  
import java.io.UnsupportedEncodingException;  
  
import org.springframework.beans.factory.annotation.Autowired;  
import org.springframework.data.redis.core.RedisTemplate;  
import org.springframework.data.redis.core.StringRedisTemplate;  
import org.springframework.data.redis.core.ValueOperations;  
import org.springframework.stereotype.Component;  
import org.springframework.stereotype.Service;  
  

12fc2
import com.woniu.bean.User;  
  
  
@Component  
public class RedisComponent {  
      
    @Autowired  
    //操作字符串的template,StringRedisTemplate是RedisTemplate的一个子集  
    private StringRedisTemplate stringRedisTemplate;  
      
    @Autowired  
    // RedisTemplate,可以进行所有的操作    
    private RedisTemplate<Object,Object> redisTemplate;  
      
    public void set(String key, String value){  
        ValueOperations<String, String> ops = this.stringRedisTemplate.opsForValue();  
        boolean bExistent = this.stringRedisTemplate.hasKey(key);  
        if (bExistent) {  
            System.out.println("this key is bExistent!");  
        }else{  
            ops.set(key, value);  
        }  
    }  
      
    public String get(String key){  
        return this.stringRedisTemplate.opsForValue().get(key);  
    }  
      
    public void del(String key){  
        this.stringRedisTemplate.delete(key);  
    }  
      
    public void sentinelSet(User user){  
        String key = null;  
        try {  
            key = new String(user.getId().getBytes("gbk"),"utf-8");  
        } catch (UnsupportedEncodingException e) {  
            // TODO Auto-generated catch block  
            e.printStackTrace();  
        }  
  
        System.out.println(key);  
        redisTemplate.opsForValue().set(key, user.toString());  
    }  
      
    public String sentinelGet(String key){  
        return stringRedisTemplate.opsForValue().get(key);  
    }  
}  

添加测试类的测试代码


[html] view plain copypackage com.woniu;  
  
import org.junit.Test;  
import org.junit.runner.RunWith;  
import org.springframework.beans.factory.annotation.Autowired;  
import org.springframework.boot.test.context.SpringBootTest;  
import org.springframework.test.context.junit4.SpringRunner;  
  
import com.woniu.RedisComponent.RedisComponent;  
import com.woniu.bean.User;  
  
@RunWith(SpringRunner.class)  
@SpringBootTest  
public class SpringbootSentinelredisApplicationTests {  
  
    @Autowired  
    private RedisComponent redisComponet;  
      
    @Test  
    public void sentinelSet(){  
        User user = new User();  
        user.setId("001");  
        user.setAge("30");  
        user.setName("wangpengfei");  
          
        redisComponet.sentinelSet(user);  
    }  
  
    @Test  
    public void sentinelGet(){  
        String str = redisComponet.sentinelGet("001");  
        System.out.println(str);  
    }  
}  

工程springboot_sentinelredis源码下载地址:点击打开链接
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: