返回介绍

4.2 访问 NoSQL 数据库

发布于 2025-04-21 20:58:44 字数 4070 浏览 0 评论 0 收藏

与关系型数据库一样,Spring Boot 也提供了对 NoSQL 数据库的集成扩展,如对 Redis 和 MongoDB 等数据库的操作。通过默认配置即可使用 RedisTemplate 和 MongoTemplate 等模板类操作非关系型数据库。

4.2.1 访问 Redis

Redis 可以作为缓存、消息中间件或多类型的 key-value 数据库。作为非关系型数据库,Redis 支持多种类型的存储方式,包括 String(字符串)、List(列表)、Hash(哈希)、Set(集合)和 Sorted Set(有序集合)等。

Spring Boot 为 Redis 提供了基本的自动配置,依赖于 spring-boot-starter-data-redis 包。该包提供了自动配置的 RedisConnectionFactory、StringRedisTemplate 和 Redis-Template 实例。如果不配置,则默认连接 localhost:6379 服务器。

StringRedisTemplate 继承自 RedisTemplate,默认采用 String 的序列化策略。如果使用 RedisTemplate,则可以实现自己的序列化方式。

连接 Redis 可以使用 Lettuce 或 Jedis 客户端。Spring Boot 默认使用 Lettuce 客户端。因为 Lettuce 的连接是基于 Netty 的,所以多线程是安全的。

RedisTemplate 提供了以下 5 种数据结构的操作方法:

  • opsForValue:操作字符串类型;
  • opsForHash:操作哈希类型;
  • opsForList:操作列表类型;
  • opsForSet:操作集合类型;
  • opsForZSet:操作有序集合类型。

下面给出一个集成了 Redis 操作的简单示例。

(1)在 application.yml 配置文件中添加配置,代码如下:

spring:
  redis:
    host: localhost
    port: 6379
    password: redistest
    timeout: 1000
    lettuce:
      pool:
        max-active: 10                                  //①
        max-wait: 1000                                  //②
        max-idle: 2                                     //③
        min-idle: 0                                     //④

注释①:连接池的最大连接数。

注释②:连接池的最大阻塞等待时间。

注释③:连接池中的最大空闲连接数。

注释④:连接池中的最小空闲连接数。

(2)在 Controller 类中注入 StringRedisTemplate 实例,代码如下:

@RestController
@RequestMapping("/hi")
public class HiController {
    //自动注入 StringRedisTemplate
    @Autowired
    private StringRedisTemplate stringRedisTemplate;
    @GetMapping("/redis/add")
    public String redisAdd(int id) {
        //Redis set 操作
        stringRedisTemplate.opsForValue().set("redis_test_"+id, "redis
test!");
        return "1";
    }
    @GetMapping("/redis/query")
    public String redisQuery(int id) {
        //Redis get 操作
        String val = stringRedisTemplate.opsForValue().get("redis_
test_"+id);
        return val;
    }
    @GetMapping("/redis/delete")
    public String redisDelete(int id) {
        //Redis delete 操作
        stringRedisTemplate.delete("redis_test_"+id);
        return "1";
    }
}

访问接口 http://localhost:8080/hi/redis/add?id=1,可以在 Redis 中添加一个 String 类型的数据;访问接口 http://localhost:8080/hi/redis/query?id=1,可以查询一个 String 类型的数据;访问接口 http://localhost:8080/hi/redis/delete?id=1,可以删除 Redis 数据。

4.2.2 访问 MongoDB

MongoDB 是一个开源的 NoSQL 文档型数据库,使用类 JSON 结构代替传统的基于表结构的关系型数据库。spring-boot-starter-data-mongodb 模块提供了可以操作 MongoDB 的 MongoTemplate 模板类。

Spring Boot 自动配置 org.springframework.data.mongodb.MongoDatabaseFactory 类,默认连接 mongodb://localhost/test 库。同样,也可以自定义一个 MongoClient 来代替 MongoDatabaseFactory 类。

下面给出一个集成 MongoDB 操作的简单示例。

(1)在 application.yml 配置文件中添加 MongoDB 配置,具体代码如下:

spring:
  data:
    mongodb:
      host: localhost
      port: 27017
      database: user
      username: root
      password: test1111
      authentication-database: admin

(2)注入 MongoTemplate 实例,代码如下:

@RestController
@RequestMapping("/hi")
public class HiController {
    @Autowired
    private MongoTemplate mongoTemplate;        //自动注入 MongoTemplate
    @GetMapping("/mongo/add")
    public Document mongoAdd(String id) {
        BasicDBObject db = new BasicDBObject();
        db.put("_id", new ObjectId(id));
        //插入操作
        mongoTemplate.insert(db, "pages");
        MongoCollection<Document> collection = mongoTemplate.
getCollection("user");
        Document document = collection.find(db).first();
        return document;
    }
    @GetMapping("/mongo/query")
    public Document mongoQuery(String id) {
        BasicDBObject db = new BasicDBObject();
        db.put("_id", new ObjectId(id));
        MongoCollection<Document> collection = mongoTemplate.
getCollection("user");
        //查询操作
Document document = collection.find(db).first();
        return document;
    }
}

访问接口 http://localhost:8080/hi/mongo/query?id=5a717aa60837d974f4b4a5,即可查询相关的数据。

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。