Redis的应用场景 毫无疑问,Redis开创了一种新的数据存储思路,使用Redis,我们不用在面对功能单调的数据库时,把精力放在如何把大象放进冰箱这样的问题上,而是利用Redis灵活多变的数据结构和数据操作,为不同的大象构建不同的冰箱。希望你喜欢这个比喻。一、Redis常用数据类型Redis最为常用的数据类型主要有以下五种:StringHashListSetSorted set在具体描述这几种数据类型之前,我们先通过一张图了解下Redis内部内存管理中是如何描述这些不同数据类型的:首先Redis内部使用一个redisObjec
SpringBoot+Redis实现分布式锁 分布式锁的实现有很多种,比如基于数据库、Redis 、 zookeeper 等实现,本文的示例主要介绍使用Redis实现分布式锁。分布式锁,即分布式系统中的锁,分布式锁是控制分布式系统有序的对共享资源进行操作,在单体应用中我们通过锁实现共享资源访问,而分布式锁,就是解决了分布式系统中控制共享资源访问的问题。可能初学的小伙伴就会有疑问,Java多线程中的公平锁、非公平锁、自旋锁、可重入锁、读写锁、互斥锁这些都还没闹明白呢?怎么又出来一个分布式锁?其实,可以这么理解:Java的原生锁是解决多线程下对于共享资源的
面试系列-Redis常见面试题 Redis在互联网技术存储方面使用如此广泛,几乎所有的后端技术面试官都要在Redis的使用和原理方面对小伙伴们进行360°的刁难。缓存是高并发场景下提高热点数据访问性能的一个有效手段,在开发项目时会经常使用到。缓存的类型分为:本地缓存、分布式缓存和多级缓存。本地缓存就是在进程的内存中进行缓存,比如我们的 JVM 堆中,可以用 LRUMap 来实现,也可以使用 Ehcache 这样的工具来实现。本地缓存是内存访问,没有远程交互开销,性能最好,但是受限于单机容量,一般缓存较小且无法扩展。分布式缓存可以很好得解决
面试系列-线程池详解 构造一个线程池为什么需要几个参数?如果避免线程池出现OOM?和的区别是什么?本文将对这些问题一一解答,同时还将给出使用线程池的常见场景和代码片段。================================================================================================Java中创建线程池很简单,只需要调用中相应的便捷方法即可,比如,但是便捷不仅隐藏了复杂性,也为我们埋下了潜在的隐患(OOM,线程耗尽)。创建线程池便捷方法列表:小程序使用这
女朋友都能看懂的SpringCloud!!! 一、前言项目结构图:像我这种技术小白,看到这些词()的时候,感觉就是遥不可及的(高大尚的技术!!)。就好像刚学Java面向对象的时候,在论坛上翻阅资料的时候,无意看到"面向切面编程",也认为这是遥不可及的(高大尚的技术!!)。但真正接触到"面向切面编程"的时候,发现原来就是如此啊,也没什么大不了的。只不过当时被它的名字给唬住了…不知道各位在刚接触这些名字的时候,有没有被唬住了呢??以下内容来源维基百科:集群技术特点:通过多台计算机完成同一个工作,达到更高的效率。两机或多机内容、工作过程等完全一样。如果一台死
《我想进大厂》之kafka夺命连环11问 kafka是一个流式数据处理平台,他具有消息系统的能力,也有实时流式数据处理分析能力,只是我们更多的偏向于把他当做消息队列系统来使用。如果说按照容易理解来分层的话,大致可以分为3层:第一层是Zookeeper,相当于注册中心,他负责kafka集群元数据的管理,以及集群的协调工作,在每个kafka服务器启动的时候去连接到Zookeeper,把自己注册到Zookeeper当中第二层里是kafka的核心层,这里就会包含很多kafka的基本概念在内:record:代表消息topic:主题,消息都会由一个主题方式来组
基于 Kubernetes 的微服务项目设计与实现 因公众号更改推送规则,请点“在看”并加“星标”第一时间获取精彩技术分享随着互联网的发展,后端服务和容器编排技术的日益成熟,微服务成为了后端服务的首选,Kubernetes 也已经成为目前容器编排的事实标准,微服务拥抱容器时代已经来临。笔者结合自己的经验,写了这篇微服务 + Kubernetes 入门宝典,希望能够抛砖引玉。能让大家了解微服务和 Kubernetes 如何配合。上卷主要描述微服务设计,项目实现,Kubernetes 部署,微服务的部署高可用和监控这几个部分。下卷计划讨论服务化网格和数据持久化,
APOC函数之路径(path)用法 本章来聊聊APOC里路径查询的用法,如果APOC库还不知道是什么或者不知道怎么安装可以参照文章APOC是啥了解了解!!!不要钱。文章中我们以查询产品光伏组件数据为例子。数据基于以下样本图:返回结果MaterialsRelationship类型是一个关系实体,定义如下:@Data@RelationshipEntity(type = "Materials")public class MaterialsRelationship { @Id private String uuid; /*
Neo4j全文检索之中文分词器(二) 在上篇文章中Neo4j之全文检索(一)介绍了全文索引的创建和如何全文搜索。理解起来也很简单。文章末尾留个了一个问题,如何创建中文的全文索引。其实用了这么久,我感觉用不用中文的全文索引影响不是很大,但是留了问题,我们就说说三种方式实现中文全文索引的创建。第一种:利用系统库里自带的过程函数我们在创建全文索引函数的时候是可以指定索引的分词器的,他的分词器可用下边的方式查询:call db.index.fulltext.listAvailableAnalyzers查到很多系统自带的分词器,其中有一个是“cjk”是针
APOC是啥了解了解!!!不要钱 上章节中提到了内置过程函数,用来创建全文索引。Neo4j本身内置过程函数的功能其实不多,为了方便我们使用到更多的内置过程函数,我们引入了APOC。一、什么是APOC?用来做什么?APOC代表Awesome Procedures on Cypher。在发布APOC之前,开发人员需要编写自己的过程和函数,以实现Cypher或Neo4j数据库尚未实现的常见功能。每个开发人员可能会编写自己的这些函数版本,从而导致大量重复。因此,我们的Neo4j开发人员之一将APOC库创建为通用程序和功
Neo4j之全文检索(一) 本篇文章我们开始谈谈Neo4j的全文检索功能,Neo4j的全文索引是基于Lucene实现的,但是Lucene默认情况下只提供了基于英文的分词器,下篇文章我们在讨论中文分词器(IK)的引用,本篇默认基于英文分词来做。我们前边文章就举例说明过,比如我要搜索苹果公司?首先我们要做的第一步在各个词条上创建全文索引,第二步我们根据苹果公司进行全文检索,把匹配度高的按顺序输出。下边我们一步步讲解怎么做。一、call和yield的用法首先看看这两个词的用方法。CALL语句用于调用数据库中的过程(Procedure),YI
Springboot+Neo4j如何返回自定义结果集 在上几篇的文章中,基于Springboot+Neo4j搭建了框架,做了一些节点与关系的常用操作。实际开发中还是会遇到一些问题,比如从Neo4j查询的数据如何转化成我们需要的结果?定义的Dto怎么接收到查询的结果呢?今天就来讲讲如何返回自定义的结果。还是以公司生产产品为例子。第一种返回方式:关系对象,节点对象。这种返回方式就是把定义的关系类和节点类直接作为接收对象返回。首先定义model里两个类:公司节点类(CompanyEntryNode),生产关系类(ProductionRelationship)@Nod
Neo4j安装部署 经常看到大家在安装Neo4j的时候会遇到各种各样的问题,网上也有不少文章参考,今天分别按安装环境找了几个视频给大家参考。Windows环境安装视频:https://ke.qq.com/webcourse/index.html#cid=3323492&term_id=103454345&taid=10760039836071524&type=1024&vid=5285890813027140345Linux环境安装视频:https://ke.qq.com/webcourse/i
Neo4j 之 Cypher(二) 一、labels()函数,nodes()函数上篇文章Neo4j 之 Cypher(一)中我们说到了foreach()函数,relationships()函数。本章我们说说labels()函数,nodes()函数。match p=(n)where all(l in nodes(p) where labels(l)=["ProductEntry"])return p这段代码的意思就是查找处所有标签是ProductEntry的节点。其中nodes(p)表示该路径的所有节点,lables(l)表示该节点的所有
Neo4j 之 Cypher(一) 一般的增删改查操作,我们就不谈了。基本的操作网上都能查到,这篇文章就把我们经常会用到的写下来,供大家参考。话不多说直接开干。 -- 删除关系 -- 1、 (a)-[r]->(b) 要删除关系r,那我们直接这样写match (a:ProductEntry)-[r]->(b:ProductEntry)where id(a)='' and id(b)=''delete r2、
什么是Cypher?和Neo4j有什么关系? 什么是Cypher?Cypher是一种声明式图形查询语言,可用于表达性和高效的查询更新和管理。它旨在同时适合开发人员和运营专业人员。Cypher的设计既简单又强大。可以轻松表达高度复杂的数据库查询,使您可以专注于自己的域,而不会迷失在数据库访问中。Cypher受到许多不同方法的启发,并以用于表达查询的既定实践为基础。许多关键字(例如WHERE和ORDER BY)均受到SQL的启发。模式匹配借鉴了SPARQL的表达方法。某些列表语义是从Haskell和Python等语言中借用的。Cypher的结构基于英文散文
Springboot+Neo4j+Mysql事务配置(二) 本篇文章我们继续讨论neo4j与mysql多数据源时,批量事务的提交。就是说我一个提交结果里既有mysql更新,又有neo4j更新,这个时候的事务该怎么办呢?有人会说加两个事务不就行了,答案是当然不行的,因为@Transactional注解不支持多个事务管理器,默认使用transactionManager,需要实现@Transactional管理mysql事务。我们要做的就是把这两个事务合并成一个事务提交就OK了。那我们先自定义一个注解,表示这两个事务的合集@Target({ElementType.METH
Springboot+Neo4j+Mysql事务配置(二) 本篇文章我们继续讨论neo4j与mysql多数据源时,批量事务的提交。就是说我一个提交结果里既有mysql更新,又有neo4j更新,这个时候的事务该怎么办呢?有人会说加两个事务不就行了,答案是当然不行的,因为@Transactional注解不支持多个事务管理器,默认使用transactionManager,需要实现@Transactional管理mysql事务。我们要做的就是把这两个事务合并成一个事务提交就OK了。那我们先自定义一个注解,表示这两个事务的合集@Target({ElementType.METH
Springboot+Neo4j+Mysql多数据源配置(一) 我们在做项目时,有时会同时用到关系型数据库和图数据库,这个一般根据业务以及技术选型来定,如果同时用到了Neo4j,Mysql两种数据库,我们的数据源应该怎么配置呢?下面跟着文章我们一点一点揭开面纱mysql我们采用mybatis框架首先看下我们pom.xml文件的引用<dependencies> <dependency> <groupId>org.springframework.boot</groupId>