前言

系统之前接入的是单点redis,为了条系统高可用能力,特增加集成redis-cluster集群的步骤

依赖库引入

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

启动类配置

@EnableScheduling
@EnableCaching
@MapperScan("com.haier.smarthome.intelligentfamilyconsole.mapper")
public class IntelligentFamilyConsoleApplication { public static void main(String[] args) {
SpringApplication.run(IntelligentFamilyConsoleApplication.class, args);
} }

配置类

package com.haier.smarthome.intelligentfamilyconsole.config;

import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.PropertyAccessor;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisClusterConfiguration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.connection.RedisNode;
import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;
import redis.clients.jedis.JedisCluster;
import redis.clients.jedis.JedisPoolConfig; import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List; /**
* @Author:zhanghongpeng
* @Description:Redis 配置类
* @CreateDate:13:48 2018/7/4
*/
@Configuration
@ConditionalOnClass(JedisCluster.class)
public class RedisClusterConfig { @Resource
private RedisProperties redisProperties; /**
* 配置 Redis 连接池信息
*/
// @Bean
// public JedisPoolConfig getJedisPoolConfig() {
// JedisPoolConfig jedisPoolConfig =new JedisPoolConfig();
// jedisPoolConfig.setMaxIdle(redisProperties.getMaxIdle());
// jedisPoolConfig.setMaxWaitMillis(redisProperties.getMaxWait());
// jedisPoolConfig.setTestOnBorrow(redisProperties.isTestOnBorrow());
//
// return jedisPoolConfig;
// } /**
* 配置 Redis Cluster 信息
*/
@Bean
public RedisClusterConfiguration getJedisCluster() {
RedisClusterConfiguration redisClusterConfiguration = new RedisClusterConfiguration();
redisClusterConfiguration.setMaxRedirects(redisProperties.getMaxRedirects()); List<RedisNode> nodeList = new ArrayList<>(); String[] cNodes = redisProperties.getNodes().split(",");
//分割出集群节点
for(String node : cNodes) {
String[] hp = node.split(":");
nodeList.add(new RedisNode(hp[0], Integer.parseInt(hp[1])));
}
redisClusterConfiguration.setClusterNodes(nodeList); return redisClusterConfiguration;
} /**
* 配置 Redis 连接工厂
*/
@Bean
public JedisConnectionFactory getJedisConnectionFactory(RedisClusterConfiguration redisClusterConfiguration, JedisPoolConfig jedisPoolConfig) {
JedisConnectionFactory jedisConnectionFactory = new JedisConnectionFactory(redisClusterConfiguration, jedisPoolConfig);
return jedisConnectionFactory;
} /**
* 设置数据存入redis 的序列化方式
* redisTemplate序列化默认使用的jdkSerializeable
* 存储二进制字节码,导致key会出现乱码,所以自定义序列化类
*/
@Bean
public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
RedisTemplate<Object, Object> redisTemplate = new RedisTemplate<>();
redisTemplate.setConnectionFactory(redisConnectionFactory);
Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
objectMapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
jackson2JsonRedisSerializer.setObjectMapper(objectMapper); redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);
redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.setHashKeySerializer(new StringRedisSerializer());
redisTemplate.afterPropertiesSet(); return redisTemplate;
} }
package com.haier.smarthome.intelligentfamilyconsole.config;

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component; /**
* @Author:zhanghongpeng
* @Description:Redis 基本环境信息
* @CreateDate:13:48 2018/7/4
*/
@Component
//
@ConfigurationProperties(prefix = "spring.redis.cluster")
@Data
public class RedisProperties { private String nodes; private Integer commandTimeout; private Integer maxAttempts; private Integer maxRedirects; private Integer maxActive; private Integer maxWait; private Integer maxIdle; private Integer minIdle; private boolean testOnBorrow; public String getNodes() {
return nodes;
} public void setNodes(String nodes) {
this.nodes = nodes;
} public Integer getCommandTimeout() {
return commandTimeout;
} public void setCommandTimeout(Integer commandTimeout) {
this.commandTimeout = commandTimeout;
} public Integer getMaxAttempts() {
return maxAttempts;
} public void setMaxAttempts(Integer maxAttempts) {
this.maxAttempts = maxAttempts;
} public Integer getMaxRedirects() {
return maxRedirects;
} public void setMaxRedirects(Integer maxRedirects) {
this.maxRedirects = maxRedirects;
} public Integer getMaxActive() {
return maxActive;
} public void setMaxActive(Integer maxActive) {
this.maxActive = maxActive;
} public Integer getMaxWait() {
return maxWait;
} public void setMaxWait(Integer maxWait) {
this.maxWait = maxWait;
} public Integer getMaxIdle() {
return maxIdle;
} public void setMaxIdle(Integer maxIdle) {
this.maxIdle = maxIdle;
} public Integer getMinIdle() {
return minIdle;
} public void setMinIdle(Integer minIdle) {
this.minIdle = minIdle;
} public boolean isTestOnBorrow() {
return testOnBorrow;
} public void setTestOnBorrow(boolean testOnBorrow) {
this.testOnBorrow = testOnBorrow;
}
}

使用测试

package com.haier.smarthome.intelligentfamilyconsole.service;

import com.haier.smarthome.intelligentfamilyconsole.entity.TestModel;
import net.sf.json.JSONArray;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.CachePut;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service; import java.util.ArrayList;
import java.util.List; /**
* 接口实现类 - Test
* Created by zhanghongpeng on 2018/9/13.
*/
@Service
public class RedisClusterServiceImpl implements RedisClusterService{ @Autowired
private RedisTemplate redisTemplate; @Override
@Cacheable(value = "TestmodelCache", key = "#key")
public List<TestModel> getTestmodel(String key) { return new ArrayList<TestModel>();
} @Override
@CachePut(value = "TestmodelCache", key = "#key")
public List<TestModel> updateTestmodel(String key, List<TestModel> testModelList) {
redisTemplate.opsForValue().set(key, testModelList);
return testModelList;
}
}

Spring-Cloud集成redis-cluster的更多相关文章

  1. Spring+Dubbo集成Redis的两种解决方案

    当下我们的系统数据库压力都非常大,解决数据库的瓶颈问题势在必行,为了解决数据库的压力等需求,我们常用的是各种缓存,比如redis,本文就来简单讲解一下如何集成redis缓存存储,附github源码. ...

  2. (35)Spring Boot集成Redis实现缓存机制【从零开始学Spring Boot】

    [本文章是否对你有用以及是否有好的建议,请留言] 本文章牵涉到的技术点比较多:Spring Data JPA.Redis.Spring MVC,Spirng Cache,所以在看这篇文章的时候,需要对 ...

  3. Spring Boot 2.X(六):Spring Boot 集成Redis

    Redis 简介 什么是 Redis Redis 是目前使用的非常广泛的免费开源内存数据库,是一个高性能的 key-value 数据库. Redis 与其他 key-value 缓存(如 Memcac ...

  4. SpringBoot(十一): Spring Boot集成Redis

    1.在 pom.xml 中配置相关的 jar 依赖: <!-- 加载 spring boot redis 包 --> <dependency> <groupId>o ...

  5. spring boot集成redis基础入门

    redis 支持持久化数据,不仅支持key-value类型的数据,还拥有list,set,zset,hash等数据结构的存储. 可以进行master-slave模式的数据备份 更多redis相关文档请 ...

  6. Spring Boot集成Redis集群(Cluster模式)

    目录 集成jedis 引入依赖 配置绑定 注册 获取redis客户端 使用 验证 集成spring-data-redis 引入依赖 配置绑定 注册 获取redis客户端 使用 验证 异常处理 同样的, ...

  7. Spring Cloud集成相关优质项目推荐

    Spring Cloud Config 配置管理工具包,让你可以把配置放到远程服务器,集中化管理集群配置,目前支持本地存储.Git以及Subversion. Spring Cloud Bus 事件.消 ...

  8. 【分布式事务】spring cloud集成lcn解决分布式事务

    参考地址:https://blog.csdn.net/u010882691/article/details/82256587 参考地址:https://blog.csdn.net/oyh1203/ar ...

  9. spring cloud集成 consul源码分析

    1.简介 1.1 Consul is a tool for service discovery and configuration. Consul is distributed, highly ava ...

  10. 【spring boot】【redis】spring boot 集成redis的发布订阅机制

    一.简单介绍 1.redis的发布订阅功能,很简单. 消息发布者和消息订阅者互相不认得,也不关心对方有谁. 消息发布者,将消息发送给频道(channel). 然后是由 频道(channel)将消息发送 ...

随机推荐

  1. [转帖]tar、gzip、zip、jar是什么,怎么查看?

    https://www.cnblogs.com/codelogs/p/16702759.html   原创:扣钉日记(微信公众号ID:codelogs),欢迎分享,转载请保留出处. 简介# 如果你是后 ...

  2. [1036]Linux启动时间分析

    简述 今天有同事咨询:项目上有台服务器操作系统启动时间较长,如何分析? 果然,好问题都来自实践. 经过查找,对于所有基于systemd的系统,可以使用systemd-analyze来分析系统启动时间. ...

  3. 【JS 逆向百例】无限debugger绕过,某政民互动数据逆向

    声明 本文章中所有内容仅供学习交流,抓包内容.敏感网址.数据接口均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关,若有侵权,请联系我立即删除! 逆向目标 目标:某政务服务 ...

  4. lua开发和调试环境

    Lua开发环境搭建 Lua官网提供源码下载需要自己编译,Lua官网:https://www.lua.org/ftp/ lua for windows.exe(占二十多MB那个) 目前在网络上没有找到 ...

  5. 热门数据集提供【MNIST、鸢尾花、猫狗、CIFAR10、vegetables、Ox-Flowers17、pascalvoc】

    热门数据集提供[MNIST.鸢尾花.猫狗.CIFAR10.vegetables.Ox-Flowers17.pascalvoc] 简介: 鸢尾花数据集: 约150条数据,每条样本4个属性,共3个类别 M ...

  6. 基于SLAM的规划算法仿真复现|SLAM|智能规划

    图片来自百度百科 前言 那么这里博主先安利一些干货满满的专栏了! 首先是博主的高质量博客的汇总,这个专栏里面的博客,都是博主最最用心写的一部分,干货满满,希望对大家有帮助. 高质量博客汇总https: ...

  7. CF526F Pudding Monsters 题解

    题目链接:CF 或者 洛谷 析合树真是连续段问题的降智神器 先看下题目的一些特殊性,每行每列恰好有一个棋子.考虑特殊性,\(n \times n\) 的棋盘,那么就该判断是否有 \(n\) 个棋子,容 ...

  8. DoraCloud桌面模板制作教程

    模板制作是桌面云部署时的一项重要工作.模板的质量直接影响到虚拟桌面业务运行的稳定性.安全性和用户体验.制作模板需要完成如下一些工作: 安装Windows桌面操作系统. 安装虚拟化平台相关的半虚拟化驱动 ...

  9. 数学微积分,学习笔记,等价无穷小的证明:(1+x)^a-1 ~ ax

    \(\lim_{x \to 0} \frac{\sqrt[n]{1+x} -1}{\frac{x}{n} } =1\)的证明 \[\lim_{x \to 0} \frac{\sqrt[n]{1+x} ...

  10. 基于javascript引擎封装实现算术表达式计算工具类

    JAVA可动态计算表达式的框架非常多,比如:spEL.Aviator.MVEL.EasyRules.jsEL等,这些框架的编码上手程度.功能侧重点及执行性能各有优劣,网上也有大把的学习资料及示例代码, ...