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配置文件中添加配置信息:
    spring.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类
    package 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;
    
    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);
    	}
    }
    

    添加测试类的测试代码

    package 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源码下载地址:点击打开链接

    spring boot讨论群:611262656,一键加群:点击加群

    更多技术文章请关注微信公众号“Java架构师之路”:



  • 相关阅读:
    【C++】关于new分配空间
    【嵌入式】keil不识别野火高速dap的问题
    【Java】质数判断
    【学习方法】大学背知识点方法
    【算法】浮点数多次运算精确值下降
    【算法】main函数的堆栈溢出
    【算法】三值选中法
    【CC++笔记】register寄存器关键字
    JSON.parse()和JSON.stringify()
    webStorm使用和安装
  • 原文地址:https://www.cnblogs.com/woniu201/p/11694631.html
Copyright © 2011-2022 走看看