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

SpringBoot整合Redis集群实践
本文详细介绍SpringBoot项目中如何整合Redis集群,包括配置、测试和常见数据类型的应用场景,如String、List、Hash、Set和Zset。同时,探讨了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)

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

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

右键执行,测试结果如下:
这里写图片描述

这里写图片描述

在我的 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;
    }
}
5.在 Redis 中,常用的 5 种数据类型和应用场景如下:

String: 缓存、计数器、分布式锁等。
List: 链表、队列、微博关注人时间轴列表等。
Hash: 用户信息、Hash 表等。
Set: 去重、赞、踩、共同好友等。
Zset: 访问量排行榜、点击量排行榜等。

下篇 Mongodb的使用

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值