SpringBoot项目开发(八):Redis集群使用_zhuyu19911016520-CSDN博客

沙海
沙海
沙海
994
文章
2
评论
2021年4月28日12:00:08
评论
1 2758字阅读9分11秒
摘要

SpringBoot项目开发(八):Redis集群使用

SpringBoot项目开发(八):Redis集群使用

SpringBoot项目开发(八):Redis集群使用_zhuyu19911016520-CSDN博客

闪耀的瞬间
2018-08-08 10:55:43
SpringBoot项目开发(八):Redis集群使用_zhuyu19911016520-CSDN博客
3764

SpringBoot项目开发(八):Redis集群使用_zhuyu19911016520-CSDN博客

收藏

8

分类专栏:
spring boot
java
SpringBoot 项目开发
文章标签:
spring boot

版权

SpringBoot项目开发(八):Redis集群使用_zhuyu19911016520-CSDN博客
1.Spring Boot对常用的数据库支持外,对nosql 数据库也进行了自动化封装,只需要简单配置即可使用

先了解一下,楼主我参考了《NoSql精粹》后了解到以下nosql数据库:

  • Redis:键值数据库,适合缓存用户Session会话与经常需要查的数据
  • MongoDB:文档型数据库,京东用它保存商品数据
  • HBase:基于列的而不是基于行的模式,对实时查询进行优化
  • Neo4j:图数据库,善于处理用户关系,你—我---他----等等直接的关系,如果用关系型数据库则关联性很复杂

    当然,还有很多其他的Nosql数据库,但这些是不同领域的代表

2.为什么在项目中使用集群?下面是精简回答,分别对应redis的几种模式

1.持久化:持久化是最简单的高可用方法(有时甚至不被归为高可用的手段),主要作用是数据备份,即将数据存储在硬盘,保证数据不会因进程退出而丢失。 2.复制:主从复制是高可用Redis的基础,哨兵和集群都是在复制基础上实现高可用的。复制主要实现了数据的多机备份,以及对于读操作的负载均衡和简单的故障恢复。缺陷:故障恢复无法自动化;写操作无法负载均衡;存储能力受到单机的限制。 3.哨兵:在复制的基础上,哨兵实现了自动化的故障恢复。缺陷:写操作无法负载均衡;存储能力受到单机的限制。 4.集群:通过集群,Redis解决了写操作无法负载均衡,以及存储能力受到单机限制的问题,实现了较为完善的高可用方案。

3.先准备好 redis 集群环境,可以参考 搭建Redis集群 这篇文章

######4.项目中添加 spring-boot-starter-data-redis 引用,redis 支持 string,hash,list,set及zset(sorted set)

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

在application.properties中添加连接配置,请在生产环境中配置密码,增加安全性

# pool settings ...池配置
spring.redis.pool.max-active=100
spring.redis.pool.max-idle=8
spring.redis.pool.min-idle=2
spring.redis.pool.max-wait=5000
spring.redis.cluster.nodes=192.168.68.134:7000,192.168.68.134:7001,192.168.68.134:7002,192.168.68.135:7000,192.168.68.135:7001,192.168.68.135:7002,192.168.68.136:7000,192.168.68.136:7001,192.168.68.136:7002
spring.redis.timeout=5000
1234567

4.测试 redis 集群操作 ,创建测试类,注入RedisTemplate

@RunWith(SpringRunner.class)
@SpringBootTest
public class RedisTest {
    @Autowired private StringRedisTemplate redisTemplate;

    @Test
    public void testRedis(){
        String name = redisTemplate.opsForValue().get("name");
        System.out.println("name:"+name);
    }
    @Test
    public void add(){
        User user = new User();
        user.setName("zy");
        user.setAge(26);
        redisTemplate.opsForValue().set("user", JSON.toJSONString(user));
    }
}
123456789101112131415161718

右键执行,测试结果如下: SpringBoot项目开发(八):Redis集群使用_zhuyu19911016520-CSDN博客

SpringBoot项目开发(八):Redis集群使用_zhuyu19911016520-CSDN博客

在我的 redis 客户端看到,新增数据时,集群会自动的把数据分配到不同的 slot 主节点上,现在数据量少,只在一个节点,redis有几种模式,可以参考 redis几大模式与介绍集群环境搭建

如果设置的数据出现乱码,就明确执行序列化与反序列化的类型,代码如下:

@Configuration
public class RedisConfig {

    @Bean
    public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory connectionFactory) {
        RedisTemplate<Object, Object> template = new RedisTemplate<>();
        template.setConnectionFactory(connectionFactory);

        //使用Jackson2JsonRedisSerializer来序列化和反序列化redis的value值
        Jackson2JsonRedisSerializer serializer = new Jackson2JsonRedisSerializer(Object.class);

        ObjectMapper mapper = new ObjectMapper();
        mapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
        mapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
        serializer.setObjectMapper(mapper);

        template.setValueSerializer(serializer);
        //使用StringRedisSerializer来序列化和反序列化redis的key值
        template.setKeySerializer(new StringRedisSerializer());
        template.afterPropertiesSet();
        return template;
    }
}
1234567891011121314151617181920212223

下篇 Mongodb的使用

继续阅读
weinxin
资源分享QQ群
本站是一个IT技术分享社区, 会经常分享资源和教程; 分享的时代, 请别再沉默!
沙海
匿名

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: