前言 "redis是单线程的" 这句话我们耳熟能详。但它有一定的前提,redis整个服务不可能只用到一个线程完成所有工作,它还有持久化、key过期删除、集群管理等其它模块,redis会通过fork子进程或开启额外的线程去处理。所谓的单线程是指从网络连接(accept) -> 读取请求内容(r
 版权声明:原创不易,本文禁止抄袭、转载,侵权必究!   一、DBeaver简介 DBeaver是一个通用的数据库管理工具和 SQL 客户端,社区版的DBeaver只能连接关系型数据库,比如MySQL、Oracle等,只有企业版以上才能连接非关系型数据库,比如MongoDB、Redis等;DB
事务简介 事务是数据库中处理的逻辑单元,每个事务中包括一个或多个数据库操作,既可以是读操作,也可以是写操作。 ACID 是一个“真正”事务所需要具备的一组属性集合,指的是原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability)。
聚合管道 聚合框架是 MongoDB 中的一组分析工具,可以对一个或多个集合中的文档进行分析。 MongoDB 的聚合框架基于管道的概念:首先从集合中获取到输入,然后将输入的文档传递到一个或多个阶段,每个阶段都将之前阶段输出的内容作为输入,最终得到一个聚合结果作为输出。 上面的图是一个比较宽泛的
索引简介 什么是索引 索引最常用的比喻就是书籍的目录,查询索引就像查询一本书的目录。 索引支持 MongoDB 查询的高效执行。如果没有索引,MongoDB 必须扫描集合中每一个文档,以选择与查询语句相匹配的文档。如果查询存在适当的索引,MongoDB 就可以使用索引来限制它扫描的文档数。 筛选字
连接 标准 URI 连接语法 通常,可以设定标准的 URI 连接语法,作为连接配置: mongodb://[username:password@]host1[:port1][,host2[:port2],...[,hostN[:portN]]][/[database][?options]] mo
组件结构 核心进程 在 MongoDB 中,核心进程主要包含了 mongod、mongos 和 mongosh 三个。 其中最主要的是 mongod 程序,其在不同的部署方案中(单机部署、副本集部署、分片集群部署),通过不同的配置,可以扮演多种不同的角色: 在单机部署中作为数据库服务器(提供所有读
什么是集群 能够对外提供相同服务的多台服务器组成的集合。 为什么要建立集群 1.从可用性角度考虑,如果只有一台机器提供服务,一旦出现故障,那么整个服务不可用。 2.从容量角度考虑,当服务访问量上升,单台机器无法支撑访问量时,必然要扩容。 如何建立集群 当有新的节点要加入集群时,客户端可以任选
mongo中的日期,在显示上,会比我们正常的时间少8h。 如果向mongo中插入数据,会少8h 如果从mongo中查出数据,那么在idea中会是正常的;而如果是在datagrip/navicat中查,那么显示的时间还是少了8h 这只是显示的问题,而对实际操作没有影响。我们在存入数据或者说查找数据的
1、redis哨兵(Sentinel) 1.1、redis集群介绍 前面文章讲的主从复制集群是无法实现master和slave角色的自动切换的,如果master节点出现现redis服务异常、主机断电、磁盘损坏等问题导致master无法使用,而redis主从复制无法实现自动的故障转移(将slave
  Redis虽然是一个内存级别的缓存程序,也就是redis是使用内存进行数据的缓存的,但是其可以将内存的数据按照一定的策略保存到硬盘中,这样的话就可以实现持久保存的目的;目前的话redis支持的两种不同方式的数据持久化保存机制,分别是RDB和AOF,这两种方式的话很类似于MySQL数据库的dum
 前面说到了redis在单机的模式下是可以数据持久化的,但是不可以解决单点失败的问题,当单台redis服务器出现问题时,就可能会造成数据的丢失;想要解决这个问题的话我们可以使用Redis的主从模式这也是Redis集群最简单的实现方式,这篇文章我就来简单部署一个Redis主从架构,我准备了3台ubu
什么是 NoSQL NoSQL 是一种非关系型数据库管理系统,不需要固定的架构,可以避免 JOIN 连接,并且易于扩展。 NoSQL 常用于具有庞大数据存储需求的分布式数据存储,通常是大数据和实时 Web 应用程序等场景。 对于海量数据,使用 RDBMS 处理是会导致系统响应时间变慢,一般的替代方
一个start包,它不需要有springboot启动类,它只提供一切公用的功能,被其它包依赖就行了,通过META-INF/spring.factories或者META-INF/spring/org.springframework.boot.autoconfigure.AutoConfigurati
RedisTemplate默认使用二进制hex的方式进行持久化,它对象的值存储到redis里,当然,你的对象需要先实现java.io.Serializable接口,这种方式兼容性好,速度快,存储空间小;缺点就是没有可读性,所以就有了json的序列化方式,下面总结一下。 一 JdkSerializa
对于springboot中基于方法的缓存Caching来说,我们直接以声明的方式添加,删除这些缓存,而它们在redis这种持久化产品中,通过value::key的方法组成一个redis.key,在业务方法中,可以通过这种key来手动获取它们。 注解声明 @CacheEvict(value = C
对于es的数据类型来说,如果它是一个复杂类型,而我们需要把复杂类型进行检索,那么应该定义成nested类型,而对于它的检索,如果是非集合数据,它与其它类型没有分别;而如果你的nested存储的数据是一个集合,那在进行不等于这种操作时,就需要说明一下了。 举例子 "id": "1", "operat
thymeleaf在spring-mvc时代很是盛行,与freemaker组成了两大模版引擎,而进行springboot之后,很多项目都采用前后分离的模式,这使得模板引擎关注度少了;而在一些场景下,使用模板引擎还是有着不可替代的优势的,比如email模板,我们会把html模版文件和后端代码放到一个
前后一体的应用,是这样进行认证的 用户向服务端发送验证信息(用户名、密码); 服务端验证成功就向用户返回一个sessionid; 服务端保存了这个session_id对应的信息,并写入用户的 Cookie; 之后的每一次请求,都会通过Cookie,将session_id传回服务端,服务端收到ses