# SpringBoot2NoSQL
**Repository Path**: wyqhtml/SpringBoot2NoSQL
## Basic Information
- **Project Name**: SpringBoot2NoSQL
- **Description**: All in one一站式SpringBoot for NoSQL Study Tutorial 开发教程学习手册。含SpringBoot2.0 +Redis、Ehcache、MongoDB、ElasticSearch、Cassandra、CouchBase、Solr、Neo4j、Gemfire共10种常用NoSQL数据库操作、工具类、演示代码。
- **Primary Language**: Java
- **License**: Apache-2.0
- **Default Branch**: master
- **Homepage**: https://github.com/xy-Group/SpringBoot2NoSQL
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 35
- **Created**: 2021-06-17
- **Last Updated**: 2021-06-17
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
SpringBoot2.0 + NoSQL使用教程,项目名称:“SpringBoot2NoSQL”
## 项目介绍
All in one一站式SpringBoot for NoSQL开发教程学习手册。
含SpringBoot2.0 +:
1. Redis
2. Ehcache
3. MongoDB
4. ElasticSearch
5. Cassandra
6. CouchBase
7. Solr
8. Neo4j
9. Gemfire
共9种常用NoSQL数据库操作、工具类、演示代码。用于整理日常常用的开发模式,一是作为开发笔记以备我自己日后使用,二是分享出来供大家参考。
重点介绍Redis、MongoDB、ElasticSeach、Cassandra四种数据库,因为它们是各自领域的领先者(分别是KV缓存、文档数据库、搜索数据库、列数据库)。
另还准备新开一个项目用于介绍Hadoop家族的大数据开发,将命名为“SpringBoot2Hadoop”
## 项目运行帮助
项目导入,请使用Gradle进行项目导入:

运行方式1,使用SpringBoot2的启动类启动,类名:SpringBoot2NoSqlApplication:

运行方式2,使用Gradle的启动工程,即Gradle Task》SpringBoot2NoSql》application》bootRun

运行成功

测试效果:
Redis Bucket对象桶Controller操作:

## Redis for SpringBoot 开发介绍
内容:
- SpringBoot配置、控制器、Repository Crud;
- string、list、set、zset、hash操作;
- 同步、异步操作;
- 管道批处理;
- 分布式对象操作:对象桶Object Bucket、二进制流Binary Stream、原子类型、发布订阅、HyperLogLog分布式基数估计算法等;分布式锁;
- 分布式集合操作:哈希、多值哈希、集合、排序集合、队列(双端、阻塞、有界、公平、延迟、优先)
- 性能测试、内存监控
- 注意:在启动SpringBoot前要先启动Redis服务。
##### application.properties配置:
# Redis
# Redis数据库索引(默认为0)
spring.redis.database=0
spring.redis.host=127.0.0.1
spring.redis.port=6379
#spring.redis.password=123
# 连接池最大连接数(使用负值表示没有限制)
spring.redis.pool.max-active=60
# 连接池中的最大空闲连接
spring.redis.pool.max-idle=30
# 连接池最大阻塞等待时间(使用负值表示没有限制)
spring.redis.pool.max-wait=-1
# 连接池中的最小空闲连接
spring.redis.pool.min-idle=0
#redisson配置
#redis链接地址
spring.redisson.address=redis://127.0.0.1:6379
...
因为我们还使用了Redisson作为客户端,还需RedissonConfig
@ConfigurationProperties(prefix = "spring.redisson")
@Configuration
public class RedissonConfig{
...
Spring官方默认支持Lettuce、Jedis客户端,Redis官方的推荐客户端是Redisson,因为Redison提供了诸多分布式的集合工具(这对单机到分布式的扩展非常有益)以及优异的性能,所以非常值得使用Redisson客户端。Spring Boot是一个平台,不必受限于它。我们在代码中配置Redisson连接的模式是单机模式,如想配置集群模式和哨兵模式,请参考官方wiki: https://github.com/redisson/redisson/wiki/
##### 模型Model:
见xy.SpringBoot2NoSQL.model.Redis.User
public class User implements Serializable{
private String login;
private String fullName;
...
这完全是一个简单POJO java类.使用登录名(login)作为关键字段。
##### 数据层repository:
xy.SpringBoot2NoSQL.repository.Redis.**ObjectRepository**
以及
xy.SpringBoot2NoSQL.repository.Redis.**UserRepository**
分别是Object类型转换操作的数据类,和泛型User数据操作。
CRUD操作是RedisTemplate中提供了几个常用的单例对象:

两者都是扩展自org.springframework.data.redis.core.**ValueOperations**
,全面满足Redis的5大数据结构外,还提供了如地理位置、计数估计HyperLogLog操作。如:
private @Nullable ValueOperations valueOps;//KV操作
private @Nullable ListOperations listOps;//列表
private @Nullable SetOperations setOps;//无排序集合
private @Nullable ZSetOperations zSetOps;//计分排序集合
private @Nullable GeoOperations geoOps;//用于地理位置
private @Nullable HyperLogLogOperations hllOps;//基数估值
...
@Override
public ValueOperations opsForValue() {
if (valueOps == null) {
valueOps = new DefaultValueOperations<>(this);
}
return valueOps;
}
...
@Override
public ZSetOperations opsForZSet() {
if (zSetOps == null) {
zSetOps = new DefaultZSetOperations<>(this);
}
return zSetOps;
}
...
在RedisTemplate中,已经提供了一个工厂方法:opsForValue()。这个方法会返回一个默认的操作类。另外,我们可以直接通过注解@Resource(name = “redisTemplate”)来进行注入。
##### 控制器controller:
见xy.SpringBoot2NoSQL.controller.Redis.**RedisDataController**
@RestController
@RequestMapping("/redis")
public class RedisDataController {
@Autowired
ObjectRepository objRepository;
@Autowired
StringStringRepository stringStringRepository;
@RequestMapping("/add/{name}")
public String getRecognition(@PathVariable("name") String name){
User user = new User(name,name);
objRepository.save(user);
return "add success.";
}
@RequestMapping("/user/{name}")
public User getUser(@PathVariable("name") String name){
return (User)objRepository.get(name);
}
}
具体代码不再赘述。
另外,提供了Redisson的控制器:
xy.SpringBoot2NoSQL.controller.Redis.**RedissonController**
RedissonController演示了同步\异步操作、分布式集合(哈希、多值哈希、集合、排序集合、队列)、本地缓存、对象桶Object Bucket、二进制流Binary Stream、原子类型、发布订阅、HyperLogLog分布式基数估计算法、累加器、元素淘汰、事件监听、分布式锁、异步批量操作等。
比如本地缓存操作:
@RequestMapping("/getLocalCachedMap/{name}/{key}")
public String getLocalCachedMap(@PathVariable("name") String name,@PathVariable("key") String key){
LocalCachedMapOptions