数据层的解决方案(NOSQL)

news2024/11/24 20:56:20

1.Redis

1.Redis是一款key-value存储结构的内存结构的内存级NoSQL数据库

支持多种数据存储

支持持久化

支持集群

2.服务器的启动命令:

redis-server.exe redis.windows.conf

3.客户端启动命令

redis-cli.exe

4.SpringBoot整合Redis

1.导入相应的依赖

<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

2.做相应的配置

spring:
  redis:
    host: localhost
    port: 6379
    client-type: jedis

主机:localhost

默认端口:6379

5.RedisTemplate提供各种数据库存储类型的接口

@SpringBootTest
class Springboot16RedisApplicationTests {
   @Resource
   private RedisTemplate redisTemplate;
​
   @Test
   void set() {
      //选择操作的数据类型  调用set方法
      ValueOperations ops = redisTemplate.opsForValue();
      ops.set(1,"hello");
   }
   @Test
   void get() {
      //选择操作的数据类型  调用set方法
      ValueOperations ops = redisTemplate.opsForValue();
      Object o = ops.get(1);
      System.out.println(o);
   }
​
   @Test
    //通过添加两个键和一个值
   void hset() {
      HashOperations hashOperations = redisTemplate.opsForHash();
      hashOperations.put("key1","a","aaa");
   }
   @Test
   void hget() {
      //选择操作的数据类型  调用set方法
      HashOperations hashOperations = redisTemplate.opsForHash();
      Object o = hashOperations.get("key1", "a");
      System.out.println(o);
   }
​
}

6.jedis和redis的区别:

1.jedis连接Redis服务器是直连模式当多线程模式下使用jedis会存在线程安全问题,解决方案可以通过配置连接池使每个连接专用,这样整体性能就大受影响。

2.lettcus基于Netty框架进行与Redis服务器连接,底层设计中采用StatefulRedisConnection。 StatefulRedisConnection自身是线程安全的,可以保障并发访问安全问题,所以一个连接可以被多线程复用。当然lettcus也支持多连接实例一起工作。

<dependency>
   <groupId>redis.clients</groupId>
   <artifactId>jedis</artifactId>
</dependency>
spring:
  redis:
    host: localhost
    port: 6379
    client-type: jedis

2.Mongodb

MongoDB是一个开源、高性能、无模式的文档型数据库,实际上是指动态类型的模式 ,而不是RDBMS(SQL)数据库中可用的静态类型的模式。

1.导入相应的依赖

<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>

2.配置客户端

spring:
  data:
    mongodb:
      uri: mongodb://localhost/lin

3.客户端读写

@SpringBootTest
class Springboot17MonogodbApplicationTests {
   @Resource
   private MongoTemplate mongoTemplate;
   @Test
   void contextLoads() {
      Book book = new Book();
      book.setId(2);
      book.setType("111");
      book.setDescription("111");
      book.setName("11111");
      mongoTemplate.save(book);
   }
   @Test
   void findAll(){
      List<Book> all = mongoTemplate.findAll(Book.class);
      System.out.println(all);
   }
​
}

4.MongoDB的CRUD

1.基础查询

查询全部:db.集合.find(); 查第一条:db.集合.findOne() 查询指定数量文档:db.集合.find().limit(10) //查10条文档 跳过指定数量文档:db.集合.find().skip(20) //跳过20条文档 统计:db.集合.count() 排序:db.集合.sort({age:1}) //按age升序排序 投影:db.集合名称.find(条件,{name:1,age:1}) //仅保留name与age域

2.条件查询

基本格式:db.集合.find({条件}) 模糊查询:db.集合.find({域名:/正则表达式/}) //等同SQL中的like,比like强大,可以执行正则所有规则 条件比较运算:db.集合.find({域名:{$gt:值}}) //等同SQL中的数值比较操作,例如:name>18 包含查询:db.集合.find({域名:{$in:[值1,值2]}}) //等同于SQL中的in 条件连接查询:db.集合.find({$and:[{条件1},{条件2}]}) //等同于SQL中的and、or

3.ElasticSearch(ES)

ElasticSearch是一个分布式搜索全文搜素引擎

1.elasticsearch的运行elasticsearch.bat

2.创建、查询、删除索引

3.创建索引并指定规则

{
    "mappings":{
        "properties":{
            "id":{
                "type":"keyword"
            },
            "name":{
                "type":"text",
                "analyzer":"ik_max_word",
                "copy_to":"all"
​
            },
             "description":{
                "type":"text",
                "analyzer":"ik_max_word",
                 "copy_to":"all"
            },
            "all":{
                "type":"text",
                "analyzer":"ik_max_word"
            },
            "type":{
                "type":"text"
            }
​
        }
    }
}

4.创建文档

5.查询文档

6.删除文档

 

7.条件查询

 

8.修改文档(全量修改)

PUT http://localhost:9200/books/_doc/1

{ "name":"springboot", "type":"springboot", "description":"springboot" }

9.修改文档(修改部分)

POST http://localhost:9200/books/_update/1

{ "doc":{ "name":"springboot" } }

10.springboot整合es

1.导入相应的依赖

<dependency>
   <groupId>org.elasticsearch.client</groupId>
   <artifactId>elasticsearch-rest-high-level-client</artifactId>
</dependency>

2.配置

spring:
  datasource:
    druid:
      driver-class-name: com.mysql.cj.jdbc.Driver
      url: jdbc:mysql://localhost:3306/ssm_db?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true
      username: root
      password: "123456"
#  elasticsearch:
#    uris: http://localhost:9200
​
​
mybatis-plus:
  global-config:
    db-config:
      table-prefix: tbl_
      id-type: auto
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

3.相关操作

@SpringBootTest
class Springboot18EsApplicationTests {
   @Resource
   private BookDao bookDao;
​
   private RestHighLevelClient client;
   //测试启动时执行的方法
   @BeforeEach
   void setUp() {
      //创建客户端
      HttpHost host=HttpHost.create("http://localhost:9200");
      RestClientBuilder builder= RestClient.builder(host);
      client = new RestHighLevelClient(builder);
   }
   //执行完测试方法之后执行的方法
   @AfterEach
   void tearDown() throws IOException {
      client.close();
   }
​
   @Test
   void createTestIndex() throws IOException {
      CreateIndexRequest request=new CreateIndexRequest("books");
      client.indices().create(request, RequestOptions.DEFAULT);
   }
​
   //
   @Test
   void testCreateIndexByIK() throws IOException {
      CreateIndexRequest request = new CreateIndexRequest("books");
      String json = "{\n" +
            "    \"mappings\":{\n" +
            "        \"properties\":{\n" +
            "            \"id\":{\n" +
            "                \"type\":\"keyword\"\n" +
            "            },\n" +
            "            \"name\":{\n" +
            "                \"type\":\"text\",\n" +
            "                \"analyzer\":\"ik_max_word\",\n" +
            "                \"copy_to\":\"all\"\n" +
            "\n" +
            "            },\n" +
            "             \"description\":{\n" +
            "                \"type\":\"text\",\n" +
            "                \"analyzer\":\"ik_max_word\",\n" +
            "                 \"copy_to\":\"all\"\n" +
            "            },\n" +
            "            \"all\":{\n" +
            "                \"type\":\"text\",\n" +
            "                \"analyzer\":\"ik_max_word\"\n" +
            "            },\n" +
            "            \"type\":{\n" +
            "                \"type\":\"text\"\n" +
            "            }\n" +
            "\n" +
            "        }\n" +
            "    }\n" +
            "}";
      //设置请求中的参数
      request.source(json, XContentType.JSON);
​
      client.indices().create(request, RequestOptions.DEFAULT);
   }
   
   //添加文档
   @Test
   void creatDoc() throws IOException {
      Book book = bookDao.selectById(2);
      IndexRequest request=new IndexRequest("books").id(book.getId().toString());
      String json= JSON.toJSONString(book);
      request.source(json,XContentType.JSON);
      client.index(request,RequestOptions.DEFAULT);
   }
​
   //所有
   @Test
   void creatDocAll() throws IOException {
      List<Book> bookList = bookDao.selectList(null);
      //创建一个批处理的容器
      BulkRequest bulkRequest = new BulkRequest();
      for (Book book : bookList) {
         IndexRequest request=new IndexRequest("books").id(book.getId().toString());
         String json= JSON.toJSONString(book);
         request.source(json,XContentType.JSON);
         bulkRequest.add(request);
      }
   /* IndexRequest request=new IndexRequest("books").id(book.getId().toString());
      String json= JSON.toJSONString(book);
      request.source(json,XContentType.JSON);*/
      client.bulk(bulkRequest,RequestOptions.DEFAULT);
   }
   //按id查询文档
   @Test
   void findById() throws IOException {
      GetRequest request=new GetRequest("books","2");
      GetResponse res = client.get(request, RequestOptions.DEFAULT);
      String sourceAsString = res.getSourceAsString();
      System.out.println(sourceAsString);
   }
​
   //按条件查询
   @Test
   void findByCondition() throws IOException {
      SearchRequest request=new SearchRequest("books");
​
      //添加查询条件
      SearchSourceBuilder builder=new SearchSourceBuilder();
      //all中包含了name 和 description
      SearchSourceBuilder query = builder.query(QueryBuilders.termQuery("all", "spring"));
      request.source(builder);
​
      SearchResponse search = client.search(request, RequestOptions.DEFAULT);
      //拿到所有的命中结果
      SearchHits hits = search.getHits();
      for (SearchHit hit : hits) {
         String sourceAsString = hit.getSourceAsString();
         System.out.println(sourceAsString);
      }
​
   }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/424518.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ESP32学习笔记09-ADC多通道采集 dma方式传输

9. ADC多通道采集 dma方式传输 9.1 DIG SAR ADC 控制器 9.1.1特点 高性能。时钟更快,因此采样速率实现了大幅提升。支持多通道扫描模式。每个 SAR ADC 的测量规则可见样式表。扫描模式可配置为 单通道模式双通道模式交替模式。扫描可由软件或 I2S 总线发起。支持 DMA,扫描完…

Win10 安装配置 Hadoop 及 Spark

以下内容只针对 Win10 系统 1. 环境安装 (1) 安装Java并配置环境变量 https://www.oracle.com/java/technologies/downloads/#java8-windows (2) 安装Scala https://www.scala-lang.org/ 或 https://github.com/lampepfl/dotty/releases/tag/3.2.2 配置环境变量&#xff0…

谷歌研究科学家:ChatGPT秘密武器的演进与局限

来源&#xff5c;TalkRL OneFlow编译 翻译&#xff5c;徐佳渝、贾川 同样是基于GPT预训练模型&#xff0c;为什么ChatGPT的效果要远远超出GPT-3等前几代模型&#xff1f;答案已经揭晓&#xff0c;成就ChatGPT的秘密武器在于RLHF&#xff0c;也就是人类反馈的强化学习。 在预训…

SpringMVC的入门案例

三层架构和mvc 三层架构&#xff1a; 我们的开发架构一般都是基于两种形式&#xff0c;一种是C/S 架构&#xff0c;也就是客户端/服务器&#xff0c;另一种是 B/S 架构&#xff0c;也就是测览器服务器。在 avaEE开发中&#xff0c;几乎全都是基于 B/S 架构的开发。那么在 B/S…

Dream 主题之 Halo 2.0 适配,以及适配前后的一些异同

经过一段时间的适配&#xff0c;目前 Dream 已经发布了基于 Halo 2.x 的第一个预发版本。目前对主题所有功能都完成了适配&#xff0c;但是由于 Halo 2.x 与 1.x 的一些不同&#xff0c;以及 Thyeleaf 模板引擎与 FreeMaker 模板渲染引擎的一些不同的特性&#xff0c;适配前与适…

Python机器学习、深度学习技术提升气象、海洋、水文领域实践应用能力

Python是功能强大、免费、开源&#xff0c;实现面向对象的编程语言&#xff0c;能够在不同操作系统和平台使用&#xff0c;简洁的语法和解释性语言使其成为理想的脚本语言。除了标准库&#xff0c;还有丰富的第三方库&#xff0c;Python在数据处理、科学计算、数学建模、数据挖…

redis docker 集群搭建

redis docker 集群搭建 1. 安装镜像 docker pull redis:latest2. 创建conf模板和脚本 # 创建模板目录 mkdir /data/redis_conf# 创建实际映射目录 mkdir /data/redis_data# 在/data/redis_conf创建conf模板 touch redis_cluster.conf.template# 编写redis_cluster.conf.temp…

详解TCP协议与模拟实现TCP版本的字典翻译客户端与服务器

文章目录TCP协议前言1.TCP协议介绍2. TCP协议的特点3. TCP协议的机制3.1 确认应答机制3.2 超时重传机制3.3 连接管理机制3.3.1 三次握手3.3.2 四次挥手3.4 滑动窗口3.5 流量控制3.6 拥塞控制3.7 延时应答机制3.8 捎带应答机制3.9 面向字节流3.10 异常处理4.TCP socket的介绍5.实…

SureX 全新投资矩阵推出,引领理财新潮流!

前言—— 随着加密货币市场的崛起&#xff0c;越来越多的投资者开始关注这个领域。但是&#xff0c;对于新手投资者来说&#xff0c;加密货币市场充满了各种不确定性和风险。如何在这个市场上游刃有余&#xff1f;SureX 零操作理财产品来袭&#xff0c;为新手投资者提供了一种…

[SWPUCTF] 2021新生赛之(NSSCTF)刷题记录 ①

[SWPUCTF] 2021 新生赛&#xff08;NSSCTF刷题记录wp&#xff09;[SWPUCTF 2021 新生赛]gift_F12[第五空间 2021]签到题[SWPUCTF 2021 新生赛]jicao[SWPUCTF 2021 新生赛]easy_md5[SWPUCTF 2021 新生赛]caidao[SWPUCTF 2021 新生赛]include[SWPUCTF 2021 新生赛]easyrce[SWPUCT…

机器人提示词工程师 Robotics Prompt Engineer

还没毕业&#xff0c;在校学习的各项技能都已经没用了&#xff0c;也别急着焦虑和忧伤&#xff0c;工业时代到信息时代&#xff0c;信息时代到智能时代&#xff0c;换代对每个普通人都是非常具有挑战性的&#xff0c;也是新一轮洗牌的开始。 机器人提示词工程师的核心竞争力包括…

【音视频第14天】webRTC协议(1)

目录协议ICESTUNNATTURNSDPSDP结构Signaling and ConnectingSignaling: How peers find each other in WebRTCConnecting and NAT Traversal with STUN/TURNSignalingsdp协议WebRTC如何使用sdpWebRTC会话示例Connecting为什么WebRTC需要一个专用的子系统来连接?Networking rea…

配置 Zabbix Server 监控 Kafka 集群

目录 第一章.环境安装部署 第一章.环境安装部署 1.1安装卡夫卡集群跟zabbix 第二章操作步骤 2.1.记录集群 Zabbix 监控节点地址 2.2.在kafka三个节点安装安装 zabbix-agent2 2.3在 Web 页面中添加 agent 主机 第一章.环境安装部署 1.1安装卡夫卡集群跟zabbix systemctl…

2023年想学习编程语言,该选哪种?

2023年想学习编程语言&#xff0c;该选哪种&#xff1f;在计算机广泛运用于社会的各个行业领域乃至生活日常每个角落的今天&#xff0c;选择学习一门计算机语言真的很不错&#xff0c;它会让你的生活从此与众不同&#xff0c;拥有另一番光景的未来。 根据最新的编程语言排行榜…

聚焦运营商信创运维,美信时代监控易四大亮点值得一试!

2021年11月《“十四五”信息通信行业发展规划》提出&#xff0c;到2025年&#xff0c;我国将建立高速泛在、集成互联、智能绿色、安全可靠的新型数字基础设施体系。 此《规划》让我国运营商信创进一步加速&#xff0c;中国移动、中国电信、中国联通等都先后加入信创大军&#x…

尚硅谷大数据技术Scala教程-笔记05【模式匹配、异常、隐式转换、泛型、scala总结】

视频地址&#xff1a;尚硅谷大数据技术之Scala入门到精通教程&#xff08;小白快速上手scala&#xff09;_哔哩哔哩_bilibili 尚硅谷大数据技术Scala教程-笔记01【Scala课程简介、Scala入门、变量和数据类型、运算符、流程控制】尚硅谷大数据技术Scala教程-笔记02【函数式编程】…

性能测试简介

性能测试是通过模拟真实的用户&#xff0c;对软件或系统进行操作&#xff0c;查看其响应时间、响应速度、负载能力等。并分析在不同的业务需求下&#xff0c;系统的负载情况是否满足要求。 性能测试主要从两个方面进行&#xff1a;一方面是性能测试本身&#xff0c;包括压力测试…

【Vue-cli】前端工程化环境准备

一、知识点整理 1、Vue-cli 是Vue官方提供的一个脚手架&#xff0c;用于快速生成一个 Vue 的项目模板。 2、Vue-cli提供了如下功能: 1&#xff09;统一的目录结构 2&#xff09;本地调试 3&#xff09;热部署 4&#xff09;单元测试 5&#xff09;集成打包上线 3、需安装依赖…

2023年最新网络安全渗透工程师面试题汇总!不看亏大了!

技术面试问题 CTF 说一个印象深刻的CTF的题目 Padding Oracle->CBC->密码学(RSA/AES/DSA/SM) CRC32 反序列化漏洞 sql二次注入 第一次进行数据库插入数据的时候&#xff0c;仅仅只是使用了 addslashes 或者是借助get_magic_quotes_gpc 对其中的特殊字符进行了转义&…

Java中的文件操作

Java中通过java.io.File类对一个文件&#xff08;包含目录&#xff09;进行抽象的描述。注意有File对象&#xff0c;并不代表真实存在该文件。 1.File概述 我们先看看File类中的常见属性、构造方法和方法 1.1属性 修饰符及类型属性说明static StringpathSeparator依赖系统的…