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

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)


	org.springframework.boot
	spring-boot-starter-data-redis

在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
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));
    }
}

右键执行,测试结果如下:
SpringBoot项目开发(八):Redis集群使用_第1张图片

SpringBoot项目开发(八):Redis集群使用_第2张图片

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

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

@Configuration
public class RedisConfig {

    @Bean
    public RedisTemplate redisTemplate(RedisConnectionFactory connectionFactory) {
        RedisTemplate 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;
    }
}

下篇 Mongodb的使用

你可能感兴趣的:(spring,boot,java,SpringBoot,项目开发)