redis性能基准是10w次读写/秒;
但是不适用于下面的场景:
需要缓存,但是经常需要统计,分析和查询。
这种场景适合使用Mongodb;
他是最接近关系数据库的NOSQL;
mongodb介绍
:::info
C++语言编写,基于分布式文件存储的开源数据库系统,在负载高的时候,可以添加更多的节点,保证服务器性能。可扩展高性能的数据存储方案。
mongodb把数据存储为一个文档,数据结构是键值对,字段值还可以包含其他的文档,数组等;
:::
我的是mac电脑,简单记录一下安装和使用步骤;
<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=springboot
可以直接通过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代码点我!
本篇文章你可以学会:
原创不易,转载请注明出处,欢迎沟通交流。