Jedis整合单机、Sentinel和Cluster模式
2019-10-16 08:11:06来源:博客园 阅读 ()
Jedis整合单机、Sentinel和Cluster模式
配置文件和配置类
@Data @Configuration @ConfigurationProperties("jedis-config") public class JedisConfigure { @Value("maxtotal") private String maxTotal; @Value("maxidle") private String maxIdle; @Value("minidle") private String minIdle; @Value("host") private String host; @Value("port") private String port; @Value("nodes") private Set<String> nodes; @Value("master-name") private String masterName; @Value("timeout") private String timeout; } //配置文件 放在application.yml jedis-config: maxtotal: 100 host: 127.0.0.1 port: 6379 maxidle: 100 minidle: 0 master-name: mymaster nodes: - 127.0.0.1:7001 - 127.0.0.1:7002 - 192.168.1.98:7003 - 192.168.1.98:7004 - 192.168.1.20:7005 - 192.168.1.20:7006
一、定义jedis接口
public interface IJedisService { /** * 获取Jedis连接 * @return JedisCommands */ JedisCommands getJedis(); /** * 释放连接 * @param jedis */ void jedisClose(JedisCommands jedis); /** * 关闭连接池 */ void jedisPoolClose(); }
二、定义IJedisService的实现类
@EnableConfigurationProperties(JedisConfigure.class) public class AbstractRedisService implements IJedisService { Pool<Jedis> jedisPool; @Autowired private JedisConfigure jedisConfigure; /** * jedis连接池配置类 */ public GenericObjectPoolConfig jedisPoolConfig = new GenericObjectPoolConfig(); /** * 初始化Jedis连接池配置 */ @PostConstruct public void initJedisPoolConfig() { jedisPoolConfig.setMaxTotal(Integer.parseInt(jedisConfigure.getMaxTotal())); jedisPoolConfig.setMaxIdle(Integer.parseInt(jedisConfigure.getMinIdle())); jedisPoolConfig.setMinIdle(Integer.parseInt(jedisConfigure.getMinIdle())); jedisPoolConfig.setJmxEnabled(true); jedisPoolConfig.setBlockWhenExhausted(true); jedisPoolConfig.setTestOnBorrow(true); jedisPoolConfig.setTestOnReturn(true); jedisPoolConfig.setMaxWaitMillis(-1); } /** * 初始化线程池 * 根据Class类型初始化 * @param clazz * @return */ public void initJedisPool(Class clazz) { //Single if (JedisPool.class.getName().equals(clazz.getName())) jedisPool = new JedisPool(jedisPoolConfig, jedisConfigure.getHost(), Integer.parseInt(jedisConfigure.getPort()), 100000); //Sentinel if (JedisSentinelPool.class.getName().equals(clazz.getName())) jedisPool = new JedisSentinelPool(jedisConfigure.getMasterName(), jedisConfigure.getNodes(), jedisPoolConfig, 100000); } @Override public JedisCommands getJedis() { Jedis jedis = jedisPool.getResource(); return jedis; } @Override public void jedisClose(JedisCommands jedis) { jedisPool.returnResource((Jedis) jedis); } @Override public void jedisPoolClose() { if (!jedisPool.isClosed()) jedisPool.close(); } }
三、单机模式的具体实现
public class JedisSingleService extends AbstractRedisService { @PostConstruct private void loadJedisPool() { super.initJedisPool(JedisPool.class); } }
四、Sentinel模式的具体实现
public class JedisSentinelService extends AbstractRedisService { @PostConstruct private void loadJedisPool() { super.initJedisPool(JedisSentinelPool.class); } }
五、Cluster模式的具体实现
@Slf4j @EnableConfigurationProperties(JedisConfigure.class) public class JedisClusterService extends AbstractRedisService { @Autowired private JedisConfigure jedisConfigure; JedisCluster jedis; /** * 初始化配置 */ @PostConstruct private void initJedisCluster() { //初始化一般配置 super.initJedisPoolConfig(); //初始化JedisCluster Set<HostAndPort> clusterHostMap = Sets.newHashSet(); initHostMap(clusterHostMap, jedisConfigure.getNodes()); jedis = new JedisCluster(clusterHostMap, jedisPoolConfig); } /** * 节点转换 * * @param clusterHostMap * @param nodes */ private void initHostMap(Set<HostAndPort> clusterHostMap, Set<String> nodes) { if (clusterHostMap == null) return; try { for (String node : nodes) { log.info("初始化Redis-Cluster集群 --- [{}]", node); String[] nodeInfo = node.split(":"); String ip = nodeInfo[0]; Integer port = Integer.parseInt(nodeInfo[1]); HostAndPort hostAndPort = new HostAndPort(ip, port); clusterHostMap.add(hostAndPort); } } catch (Exception e) { throw new RuntimeException("redis-->Cluster集群节点配置异常"); } } @Override public JedisCommands getJedis() { return jedis; } @Override public void jedisClose(JedisCommands jedis) { try { ((JedisCluster) jedis).close(); } catch (IOException e) { e.printStackTrace(); log.error("Redis-Cluster Close失败 --- [{}]", e.getMessage()); } } }
六、注入Bean
@Bean public IJedisService redisSingleJedisService() { return new JedisSingleService(); } @Bean IJedisService redisSentinelService() { return new JedisSentinelService(); } @Bean IJedisService redisClusterService() { return new JedisClusterService(); }
原文链接:https://www.cnblogs.com/Innocent-of-Dabber/p/11676811.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- SpringBoot 2.3 整合最新版 ShardingJdbc + Druid + MyBatis 2020-06-11
- MyBatis整合双数据源 2020-06-04
- Spring07_纯注解实战及Spring整合Junit 2020-05-28
- ElasticSearch7.4.2安装、使用以及与SpringBoot的整合 2020-05-27
- SpringBoot2.3整合RabbitMQ实现延迟消费消息 2020-05-26
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash