NoSQL 是指非关系型数据库,非关系型数据库和关系型数据库两者存在许多显著的不同点,其中最要的是 NoSQL 不使用 SQL 作为查询语言。其数据存储可以不需要固定的表格模式,都有水平可扩展性的特征。
Redis 是一个使用C语言写的基于内存的NoSQL 数据库,它是目前最流行的键值对存储数据库。
Redis 由一个 Key,Value 映射的字典构成与其他 NoSQ 不同, Redis中Value 类型不局限于符串,还支持列表、集合、有序集合、散列等
Redis 不仅可以当作缓存使用,也可以配置数
持久化后当作NoSQL 数据库使用,目前支持两种持久化方式,快照持久化和 AOF持久化。
另一放面,Redis 也可以搭建集群或者主从复制结构,在高并发环境下具有高可用性。
redis教程:https://www.runoob.com/redis/redis-data-types.html
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
<exclusions>
<exclusion>
<groupId>io.lettuce</groupId>
<artifactId>lettuce-core</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
</dependency>
spring:
redis:
database: 0
host: 127.0.0.1
port: 6379
password:
jedis:
pool:
max-active: 8
max-idle: 8
max-wait: -1ms
min-idle: 0
@Data
public class Book implements Serializable {
private Integer id;
private String name;
private String author;
}
@RestController
@RequestMapping("/redis")
public class BookRedisController {
@Autowired
RedisTemplate redisTemplate;
@Autowired
StringRedisTemplate stringRedisTemplate;
@GetMapping("/test")
public void test1() {
ValueOperations<String, String> operations = stringRedisTemplate.opsForValue();
operations.set("name", "三国演义");
String name = operations.get("name");
System.out.println(name);
ValueOperations operations1 = redisTemplate.opsForValue();
Book book = new Book();
book.setId(1);
book.setName("红楼梦");
book.setAuthor("曹雪芹");
operations1.set("book", book);
Book resultBook = (Book) operations1.get("book");
System.out.println(resultBook);
}
}
MongoDB是种面向文档的数据库管理系统,它是一个介于关系型数据库和非关系型数据库,MongoDB功能丰富,它支持 JSON、BSON数据格式 ,既可以存储简单的数据格式,又可以存储复杂的数据类型。
MongoDB 最大的特点是它支持的查询语言非常强大,并且还支持对数据建立索引。总体来说,MongoDB 是一款应用相当广泛 NoSQL 数据库。
MongoDB学习手册:https://www.runoob.com/mongodb/mongodb-tutorial.html
1.首先执行如下命令下载 MongoDB:
下载完成后,将下载的 MongoDB 解压,并将解压后的文件夹重命名为 mongodb
2.配置 MongoDB
进入mongodb 目录下,创建两个文件夹 db和logs ,分别用来保存数据和日志。
然后进入bin 录下,创建一个新的 MongoDB 配置文件 mongo.conf时,文件内容如下:
dbpath=/opt/mongodb/db
logpath=/opt/mongodb/logs/mongodb.log
port=27017
fork=true
第1行配直表 数据存储目录
第2行配置表示日志文件位直。
第3行配置表示启动端口。
第4行配置表示以守护程序的方式启动 MongoDB ,即允许MongoDB 在后台运行。
3.MongoDB的启动
配置完成后,还是在bin目录下,运行如下命令启动 MongoDB:
./mongod -f mongo.conf --bind ip all
MongoDB 启动成功后,在 bin 目录下再执行 mongo 命令,进入 MongoDB 控制台,然后输入db.version(),如果能看到 MongoDB 的版本号 就表示安装成功
4.MongoDB的关闭
默认情况下,启动后连接的是 MongoDB 中的 test 库,而关闭 MongoDB 命令需要在 admin库中执行,因此关闭 MongoDB 需要首先切换到admin下然后执行 db.shutdownServer()命令,完整操作步骤如下
use admin;
db.shutdownServer();
exit
4.安全管理
默认情况下启动的 MongoDB 没有登录密码 在生产环境中这是非常不安全的,但是不同MySQL、Oracle等关系型数据库、MongoDB 每一个库都有不同的密码,在哪一个库中创建用就要在哪一个库中验证密码。要置密码,首先要创建 个用户,例如 admin 中创建 个用户,代码如下:
use admin
db.createUser({user :"sang",pwd:"123",roles:[{role:"readWrite",db :"test"}})
新创建的用户名为 sang ,密码 123。roles 表示该用户具有的角色,这里的配置表示该用户对test 库具有读和写两项权限。
./mongod -f mongo.conf --auth --bind_ip_all
./mongo
db.auth("sang","123")
如果 db.auth(“sang”, “123”)命令执行结果为1,就表示认证成功,可以执行对 test 库的读写操作
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
spring:
data:
mongodb:
# 验证登录信息的库
authentication-database: admin
# 连接的数据库
database: test
host: 127.0.0.1
port: 27017
username: zzm
password: '123456'
package com.example.springbootvuetest.pojo;
import lombok.Data;
/**
* @author zhuzhaoman
* @date 2020/6/10 0010 13:54
* @description 描述
*/
@Data
public class Book {
private Integer id;
private String name;
private String author;
}
package com.example.springbootvuetest.repository;
import com.example.springbootvuetest.pojo.Book;
import org.springframework.data.mongodb.repository.MongoRepository;
import java.util.List;
/**
* @author zhuzhaoman
* @date 2020/6/10 0010 21:12
* @description 描述
*/
public interface BookRepository extends MongoRepository<Book, Integer> {
/**
* 查询名字中包含查询字段的所有Book
* @param author
* @return
*/
List<Book> findByAuthorContains(String author);
/**
* 查询名字为查询字段的Book
* @param name
* @return
*/
Book findByNameEquals(String name);
}
package com.example.springbootvuetest.controller;
import com.example.springbootvuetest.pojo.Book;
import com.example.springbootvuetest.repository.BookRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.ArrayList;
import java.util.List;
/**
* @author zhuzhaoman
* @date 2020/6/10 0010 21:16
* @description 描述
*/
@RestController
public class BookController {
@Autowired
BookRepository bookRepository;
@Autowired
MongoTemplate mongoTemplate;
@GetMapping("/test1")
public void test1(){
List<Book> books = new ArrayList<>();
Book book1 = new Book();
book1.setId(3);
book1.setName("朝花夕拾");
book1.setAuthor("鲁迅");
books.add(book1);
Book book2 = new Book();
book2.setId(4);
book2.setName("呐喊");
book2.setAuthor("鲁迅");
books.add(book2);
bookRepository.insert(books);
List<Book> bookList = bookRepository.findByAuthorContains("鲁迅");
System.out.println(bookList);
Book book = bookRepository.findByNameEquals("朝花夕拾");
System.out.println(book);
}
@GetMapping("/test2")
public void test2() {
List<Book> books = new ArrayList<>();
Book book1 = new Book();
book1.setId(1);
book1.setName("多年父子成兄弟");
book1.setAuthor("汪曾祺");
books.add(book1);
Book book2 = new Book();
book2.setId(2);
book2.setName("沁园春");
book2.setAuthor("毛泽东");
books.add(book2);
mongoTemplate.insertAll(books);
List<Book> bookList = mongoTemplate.findAll(Book.class);
System.out.println(bookList);
Book book = mongoTemplate.findById(1, Book.class);
System.out.println(book);
}
}