Spring 集成Redis哨兵模式
2020-12-13 05:35
标签:cat 图片 config ngx 多少 active 更换 监控 system
Spring 集成Redis哨兵模式
1、pom文件添加以下jar
org.springframework.data spring-data-redis1.7.2.RELEASE redis.clients jedis2.9.0
两个jar的版本不兼容会导致启动失败,如要更换版本,请进行版本兼容性测试
2、spring配置文件springContext.xml添加以下配置
3、哨兵配置以及properties文件配置如下:
redis-sentinel.xml
redis哨兵
classpath*:/com/config/redis-sentinel.properties
redis-sentinel.properties
#Matser redis.masterName=mymaster redis.masterHost=127.0.0.1 redis.masterPort=6385 redis.password=ww #sentinel1 的IP和端口 redis.sentinel.host1=140.143.26.113 redis.sentinel.port1=26001 #sentinel1 的IP和端口 redis.sentinel.host2=140.143.26.113 redis.sentinel.port2=26002 #sentinel1 的IP和端口 redis.sentinel.host3=140.143.26.113 redis.sentinel.port3=26003 #最大空闲数 redis.maxIdle=50 #最大建立连接等待时间 redis.maxWait=1000 #是否在从池中取出连接前进行检验,如果检验失败,则从池中去除连接并尝试取出另一个 redis.testOnBorrow=false #控制一个pool可分配多少个jedis实例,用来替换上面的redis.maxActive,如果是jedis 2.4以后用该属性 redis.maxTotal=200
4、RedisUtil.java工具类
package com.pinghengxing.util; import java.util.List; import java.util.Map; import java.util.Set; import java.util.concurrent.TimeUnit; import javax.annotation.Resource; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Component; import org.springframework.util.CollectionUtils; /** * * @author ww * 基于spring和redis的redisTemplate工具类 * 针对所有的hash 都是以h开头的方法 * 针对所有的Set 都是以s开头的方法 不含通用方法 * 针对所有的List 都是以l开头的方法 */ @Component("redisUtil") public class RedisUtil { @Resource private RedisTemplateredisTemplate; public void setRedisTemplate(RedisTemplate redisTemplate) { this.redisTemplate = redisTemplate; } //=============================common============================ /** * 指定缓存失效时间 * @param key 键 * @param time 时间(秒) * @return */ public boolean expire(String key,long time){ try { if(time>0){ redisTemplate.expire(key, time, TimeUnit.SECONDS); } return true; } catch (Exception e) { e.printStackTrace(); return false; } } /** * 根据key 获取过期时间 * @param key 键 不能为null * @return 时间(秒) 返回0代表为永久有效 */ public long getExpire(String key){ return redisTemplate.getExpire(key,TimeUnit.SECONDS); } /** * 判断key是否存在 * @param key 键 * @return true 存在 false不存在 */ public boolean hasKey(String key){ try { return redisTemplate.hasKey(key); } catch (Exception e) { e.printStackTrace(); return false; } } /** * 删除缓存 * @param key 可以传一个值 或多个 */ @SuppressWarnings("unchecked") public void del(String ... key){ if(key!=null&&key.length>0){ if(key.length==1){ redisTemplate.delete(key[0]); }else{ redisTemplate.delete(CollectionUtils.arrayToList(key)); } } } //============================String============================= /** * 普通缓存获取 * @param key 键 * @return 值 */ public Object get(String key){ return key==null?null:redisTemplate.opsForValue().get(key); } /** * 普通缓存放入 * @param key 键 * @param value 值 * @return true成功 false失败 */ public boolean set(String key,Object value) { try { redisTemplate.opsForValue().set(key, value); return true; } catch (Exception e) { e.printStackTrace(); return false; } } /** * 普通缓存放入并设置时间 * @param key 键 * @param value 值 * @param time 时间(秒) time要大于0 如果time小于等于0 将设置无限期 * @return true成功 false 失败 */ public boolean set(String key,Object value,long time){ try { if(time>0){ redisTemplate.opsForValue().set(key, value, time, TimeUnit.SECONDS); }else{ set(key, value); } return true; } catch (Exception e) { e.printStackTrace(); return false; } } /** * 递增 * @param key 键 * @param by 要增加几(大于0) * @return */ public long incr(String key, long delta){ if(delta){ throw new RuntimeException("递增因子必须大于0"); } return redisTemplate.opsForValue().increment(key, delta); } /** * 递减 * @param key 键 * @param by 要减少几(小于0) * @return */ public long decr(String key, long delta){ if(delta){ throw new RuntimeException("递减因子必须大于0"); } return redisTemplate.opsForValue().increment(key, -delta); } //================================Map================================= /** * HashGet * @param key 键 不能为null * @param item 项 不能为null * @return 值 */ public Object hget(String key,String item){ return redisTemplate.opsForHash().get(key, item); } /** * 获取hashKey对应的所有键值 * @param key 键 * @return 对应的多个键值 */ public Map
5、测试类
package test; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import com.pinghengxing.util.RedisUtil; public class TestRedis { public static void main(String[] args) throws Exception { @SuppressWarnings("resource") ApplicationContext context=new ClassPathXmlApplicationContext("classpath:com/config/springContext.xml"); RedisUtil redisUtil=(RedisUtil) context.getBean("redisUtil"); //=====================test====================== redisUtil.set("name", "w的"); redisUtil.set("age", 24); redisUtil.set("address", "wwwwwwww"); System.out.println(redisUtil.get("name")); System.out.println(redisUtil.get("age")); System.out.println(redisUtil.get("address")); } }
6、测试,
配置完成后,进行测试,结果如下:
运行过程中遇到了一点坑,
1、jar包办版本不兼容导致的运行错误,redis的两个jar最好不要随便更改
2、本以为哨兵没有密码,密码没有添加,但运行时报没有权限的错误,添加以下密码配置后正常
3、key ,value序列化的类型选择不正确,导致存储数字(long,int)时报类型转换异常,
最后:
完整的项目配置下载地址如下:可下载参考
https://files.cnblogs.com/files/pinghengxing/sping_redis_test.zip
Spring 集成Redis哨兵模式
标签:cat 图片 config ngx 多少 active 更换 监控 system
原文地址:https://www.cnblogs.com/pinghengxing/p/11143587.html
文章标题:Spring 集成Redis哨兵模式
文章链接:http://soscw.com/index.php/essay/31254.html