前言
redis性能基准是10w次读写/秒;
但是不适用于下面的场景:
需要缓存,但是经常需要统计,分析和查询。
这种场景适合使用Mongodb;
他是最接近关系数据库的NOSQL;
mongodb介绍:::infoC 语言编写,基于分布式文件存储的开源数据库系统,在负载高的时候,可以添加更多的节点,保证服务器性能。可扩展高性能的数据存储方案。
mongodb把数据存储为一个文档,数据结构是键值对,字段值还可以包含其他的文档,数组等;:::
安装mongodb
我的是mac电脑,简单记录一下安装和使用步骤;
- brew cask install mongodb
- 设置path ;
- mongo 连接mongodb
- use database_name 创建数据库
配置
依赖
<dependency>
    <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
<dependency>
    <groupId>com.alibaba</groupId>
  <artifactId>fastjson</artifactId>
  <version>1.2.39</version>
</dependency>属性配置
spring.data.mongodb.host=127.0.0.1
spring.data.mongodb.username=spring
spring.data.mongodb.password=123456
spring.data.mongodb.port=27017
spring.data.mongodb.database=springbootMongoTemplate
可以直接通过MongoTemplate操作mongodb;
代码
package com.springbootpractice.demo.mongodb.service;
import com.mongodb.client.result.DeleteResult;
import com.mongodb.client.result.UpdateResult;
import com.springbootpractice.demo.mongodb.dao.entity.User;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.core.query.Update;
import org.springframework.stereotype.Service;
import java.util.List;
/**
 * 说明:mongodb操作代码
 * @author carter
 * 创建时间: 2020年01月15日 3:02 下午
 **/
@Service
public class UserService {
    private final MongoTemplate mongoTemplate;
    public UserService(MongoTemplate mongoTemplate) {
        this.mongoTemplate = mongoTemplate;
    }
    public void saveUser(User user) {
        mongoTemplate.save(user);
    }
    public DeleteResult deleteUser(Long id) {
        Query query = Query.query(Criteria.where("id").is(id));
        return mongoTemplate.remove(query, User.class);
    }
    public List<User> findUser(String userName, String note, int skip, int limit) {
        final Criteria criteria = Criteria.where("userName")
                .regex(userName)
                .and("note")
                .regex(note);
        Query query = Query.query(criteria)
                .limit(limit)
                .skip(skip);
        return mongoTemplate.find(query, User.class);
    }
    public UpdateResult updateUser(Long id, String userName, String note) {
        Update update = new Update();
        update.set("userName", userName);
        update.set("note", note);
        Query query = Query.query(Criteria.where("id").is(id));
        return mongoTemplate.updateFirst(query, update, User.class);
    }
    public User getUser(Long id) {
        return mongoTemplate.findById(id, User.class);
    }
}测试代码
package com.springbootpractice.demo.mongodb;
import com.springbootpractice.demo.mongodb.dao.entity.Role;
import com.springbootpractice.demo.mongodb.dao.entity.User;
import com.springbootpractice.demo.mongodb.service.UserService;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import java.util.Arrays;
import java.util.stream.IntStream;
@SpringBootTest
class DemoMongodbApplicationTests {
    @Autowired
    private UserService userService;
    @Test
    void mongodbTest() {
        IntStream.rangeClosed(1, 10).forEach((item) -> {
            final long id = System.currentTimeMillis();
            userService.saveUser(User.builder().id(id)
                    .userName("user")
                    .note("note")
                    .roles(Arrays.asList(Role.builder().id(id)
                                    .roleName("role"   id)
                                    .note("note"   id)
                                    .build(),
                            Role.builder().id(id   1000000)
                                    .roleName("_role"   id)
                                    .note("_note"   id)
                                    .build()
                    ))
                    .build());
        });
        userService.findUser("user", "note", 0, 10)
                .forEach(System.out::println);
    }
}template方式操作mongodb代码点我!
小结
本篇文章你可以学会:
1. mongodb的简要介绍,安装;
1. springboot的template方式实现mongodb的增删改查操作;
                










