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的使用