- 博客(20)
- 收藏
- 关注

原创 关于对redis 高并发和性能优秀的理解(自己的理解,原创,比较形象的总结,如果有不足的地方欢迎指出)
线程安全: 一个线程执行了判断 还没来得及执行逻辑 另一个线程就开始进入线程判断。所以说使用redis来执行逻辑操作。因为redis是单线程 并且储存在磁盘响应快 执行多少次就减多少次。Redis有没有线程安全问题。Redis是分布式的 ,有可能两个redis 的decr num得到同样的结果???不会,redis是单线程 单进程的软件 , 非阻塞线程(简单理解 就是一个进程进去可以服务多个) 单线程 性能略低 吞吐量比多线程少 (redis我把他看成是高铁,在单一轨道上高速行驶–单线程,且不会
2020-06-12 11:17:52
1669
3
原创 Zookeeper基础介绍
一 概述1 zookeeper是yahool 开发后贡献给apache的一套分布式的管理和协调框架2 提供了中心服务(注册中心):统一配置信息,统一命名,分布式锁,提供组服务!二 安装1 单机 :2 伪分布 :3 完全分布 :细节一特点1 、Zookeeper 是树状结构,根节点是/ - Znode树在Zookeeper中,每一个节点称之为Znode节点每一个Znode节点必须携带数据,实际开发中,这个数据往往是对这个节点的描述或者是配置信息Zookeeper中不存在相对路径,所有的
2020-06-22 14:09:38
463
原创 关于Lock锁
Synchronized锁的缺陷Synchronized不会手动释放锁资源,当线程发生阻塞后,其他线程只能眼睁睁的等着,不会分别是读线程和写线程,读问题并不会引发高并发,但是synchronized锁不能识别是读线程还是锁线程 ,遇到了都会锁上。另外没有中断锁的功能,一个线路等待时间过长不会自我中断线程。Lock锁一、概述1.Lock是JDK1.5中提供的一套用于取代synchronized的机制2.相对synchronized而言,Lock更加灵活和精细 - synchronized在使用的时候
2020-06-20 09:37:29
481
转载 (转)Lock和synchronized比较详解
今天看了并发实践这本书的ReentantLock这章,感觉对ReentantLock还是不够熟悉,有许多疑问,所有在网上找了很多文章看了一下,总体说的不够详细,重点和焦点问题没有谈到,但这篇文章相当不错,说的很全面,主要的重点都说到了,所有在这里转载了这篇文章,注意红色字体。在上一篇文章中我们讲到了如何使用关键字synchronized来实现同步访问。本文我们继续来探讨这个问题,从Java 5之后,在java.util.concurrent.locks包下提供了另外一种方式来实现同步访问,那就是Lock。
2020-06-20 08:37:11
268
原创 关于JAVA内存结构那些事
Java内存结构Stack :计算 执行代码块 独享Heap :存储对象 线程共享Method Area:储存类信息。线程共享共享Native Stack(本地方法栈):执行本地方法,用neitice修饰但是没有方法体的方法,如Object,极大部分的本地方法是C语言实现的。Program Counter(PC计数器):对进程来技术,当pc计数器对哪一行计数的时候,任务就执行到哪一行,每个线程独享,记录的是哪一行。考虑一台服务器所能承载的线程数量,考虑独享的内存 - 栈内存、本地方
2020-06-19 12:14:52
149
原创 NIO 和BlockingQueue
NIO:同步式非阻塞IO流同步–同一个对象或者一段逻辑在同一个时间只允许一个 线程使用非阻塞–一个线程在没有获取结果也会执行后面的逻辑。1 缓冲区Buffer:底层是基于数组来进行存储针对基本类型进行存储 Buffer针对基本类型来进行存储:ByteBuffer,ShortBuffer,IntBuffer,LongBuffer,FloatBuffer,DoubleBuffer,CharBuffer//表示给底层的字节数组指定大小 缓冲区给定后不可变 ByteBuffer buffer =B
2020-06-16 18:28:46
151
原创 Redis缓存和数据库保持一致解决方案
什么时候缓存不一致?当mysql数据库中执行了更改操作 但是redis里面是更新之前的价格,这个时候可能会出现缓存不一致。可以在每次更新数据库的时候删除redis缓存,然后查询的时候判断redis里面是否有缓存 ,没有再新增。但是在高并发的情况下,小几率情况会出现,先执行1 删除缓存,在2还没得及执行的时候,判断缓存为空,然后再次读取,还是读取的旧的数据。解决方法:保证1和2同步执行—添加内存锁,被动缓存中,只要发现这个内存锁,说明有人在更新数据,不会使用缓存!业务层实现代码如下:public
2020-06-15 09:14:09
1083
1
原创 关于 Redis槽道的理解
槽道原理槽道原理在redis-cluster 存在分布式计算原则–hash 槽,引入16384个槽道.槽道组成结构o16384位的二进制,以2048个元素的byte数据存储在每个节点内存里—位序列o16384个元素的数组,元素值,指向的是一个内存的节点对象node—共享数组/索引数组位序列每个节点在集群创建之初都会根据槽道管理权的分配创建一个二进制数据主节点的二进制:将管理的槽道和二进制中的bit值做对应关系16384位的二进制,定义,从左到右,位数0,1,2,…16383 对应槽道号
2020-06-13 15:45:18
1216
3
原创 关于Redis使用连接池介绍
Jedis连接池jedis为了防止使用连接对象jedis时频繁的创建和销毁,造成资源的浪费,提供了一个Jedis连接池,这个连接池是jedis最底层的连接池,其他的redis结构对应jedis对象,底层都会封装这个jedis连接池.可以从连接池中获取jedis对象,使用完毕后归还这个链接对象1.1连接池的内存结构一次性创建多个jedis对象,在一个连接池对象中管理.1.2连接池的一些属性初始化连接数量:创建连接池时,默认一开始连接对象个数最小空闲数量:连接池中的连接对象空闲的最小个数,小于最小
2020-06-13 11:00:41
2215
1
原创 Redis介绍(二)
六 实现排序1 有时候一个网页,比图说我们网盘可以查询保存时间按时间顺序显示,还有发的博客,也常常是按时间先后顺序排版!而有序的集合,常常使用场景是大数据排版,所以也很少取得全部数据!Redis认为,开发者在做完交集和并集运算后不需要直接获得全部结果!二是希望将其存进新的键中方便后续处理!实现排序,就应该用到有序的集合类型。2 sort命令 实现id由小到大排序!七 redis可以实现任务队列优点:松耦合 易于扩展8 redis 集群1 容量看:单个redis在性能上容易成为储存瓶颈所以需要
2020-06-13 10:19:09
852
原创 Redis介绍(一)
一 历史,发展2008年,意大利Merzia公司推出一款基于Mysql得网站实时统计的系统不能够LLOOG,但是他的创始人Salvatore对Mysql的性能感到失望。。。于是乎,亲自带头开发了Redis,后来他想让全世界都用这款软件,于是09年对redis开源发布,并且经常更新代码,比较活跃。2015年,redis发布了3.0.0版本。二 redis的特点2.1 存储结构Redis以字典结构存储数据,并且通过TCP协议读写字典中的内容。同大多数脚本语言一样,redis字典中的键值除了可以是字符串
2020-06-13 00:55:43
429
原创 Lucene搜索原理
LUCENE倒排索引法1索引索引:index定义:查询时,根据索引实现快速定位。使查询更高效。如-书记目录,超市品类,字典拼音法2倒排索引计算2.1分词analyze : 全文检索技术 把一段文本经过索引加工处理,进行分词实现,每一个计算结果中的字,词,句这个整体文本都是分词计算的词项数据(term)文档对象 document: 整理之后的对象数据(信息单元),表示一个数据源中的完整数据。是一个对象域属性field:文档对象虽然是一个整体数据单元,但是可以由不同的属性组成,如:网页doc
2020-06-11 13:10:06
380
原创 es集群选举
@[T 1 什么是脑裂 如何预防在一个es集群中,master中出现了多个leader 导致节点不知道去执行谁的命令。常常是因为网络波动造成leader链接不上,其他master选举出新的leader,等之前的leader链接上了 出现了多个leader的情况预防,在配置文件中配置分片最小master的有效数量为2 这样即使之前的leader恢复 但是是单独的存在,也无法生效!2 集群的选举步骤1 启动一个master后 会立刻链接协调器,获取集群的master节点信息,activeMaster值
2020-06-09 10:22:06
1233
原创 REST风格
representational state transfer(表象性状态转变).uri的使用:表示资源id,不同的uri地址应该指向不同资源.单独看这个概念很多系统http请求接口设计已经违反了uri定义新增商品: product/save修改商品: product/update查询商品: product/query增删查改,对应商品可能是同一个资源,用了3个不同的uri满足uri:product/manage/{productId},新增商品,修改商品,查询商品访问一个...
2020-06-07 23:42:04
367
原创 nginx--负载均衡三种方式
负载均衡在nginx可以通过虚拟的集群域名,来实现一个后端集群的统一管理。通过不放方式的负载均衡计算算法实现负载均衡1 轮询配置可以实现对service的依次访问。访问数量是差多不的。2 权重配置轮询作为依次访问的逻辑,一种物理平均的负载均衡计算,如果后端运行服务器集群每个节点性能不同,应该给高性能的服务器分配更多的请求,给低性能的服务器分配少的请求,可以使用权重(权衡比重),例如:8091(2),8092(3),8093(5).权重的配置,需要在轮训的list服务器列表upstream里配置
2020-05-25 11:23:22
3010
原创 IDea和nginx解决高并发
1 order-user系统高并发结构1.1高并发?互联网项目,一般必须支持高并发,我们开发的order-user系统支持多少并发(单位时间并发) 取决于系统运行使用的web容器(tomcat)取决于系统服务器的硬件。Tomcat并发 一秒钟200-500左右,所以不支持高并发!所以单机运行order-user系统 不能支持高并发,1.2高并发结构(集群)1.3 单机并发200-500 ,可以实现集群搭建,就能线性并发增长。我们可以利用idea多实例运行,让order-user系统多启动几个。多
2020-05-23 17:40:18
1062
原创 SPRINGBOOT原理
1.核心注解springboot工程中总是在添加一个核心注解@SpringBootApplication它是一个springboot框架提供的组合注解,一共组合了3个注解.RestController也是一个组合注解,组合了ResponseBody 和Controller1.1SpringBootConfiguration本质上,这个注解就是一个spring的配置注解@Configuration(一个配置注解所在的类,相当于与一个xml配置文件的功能)1.2ComponentScan相当于一个x
2020-05-23 13:35:30
312
原创 Springboot介绍 和简单搭建
SpringbootSpringboot: 基于spring的所有功能的工具框架。让一个spring框架开发过程简化 再简化,能够应对非常多的开发场景实现自动配置。例如帮忙配置spring springmvc等配置1 为什么使用springboot。简化配置2 特点2.1 独立运行spring容器Spring容器的运行一班都需要别的容器的支持 比如开发一个web应用。要是由第三方web容器 springboot中可以独立运行,一个main方法加载springboot运行代码2.2 内嵌ser
2020-05-22 22:01:08
368
原创 使用maven开发一个web项目
1.1 创建项目选择骨架,选择nextIdea根据选择的骨架给pom.Xml配置了内容 ,我们需要更改jdk版本为系统一一致(我当前用的jdk1.8 所以修改为1.8)。注意:在创建项目时 由于ide版本不同 ,有的版本默认使用了maven配置 本地库虽然解压了 但是idea没有使用 需要动手调整mavean配置1.2 添加pom.xml中的依赖资源使用该项目开发ssm框架系统 需要引入开发所需要的依赖Spring的相关依赖 :”Springmvc的相关依赖 :spring-webmvc
2020-05-20 17:43:59
635
原创 maven安装步骤
1 创建项目空间 选择骨架创建maven项目2 选择骨架这里默认3填写项目基本信息Groupid: 项目或者公司名字倒写Artifatid: 项目 或者模块名字Verssion: 对当前版本号Package: 默认创建包的路径最后按Y 确定成功1.2 maven项目结构选择的骨架只会决定配置中有哪些文件 配置报告Maven项目跟目录Src 文件夹,表示项目代码配置源数据–Main-java:java包 和.java原件-resources:配置文件 ,applica
2020-05-19 18:17:13
168
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人