- 博客(51)
- 资源 (1)
- 收藏
- 关注
原创 五、ZooKeeper 分布式事件
文章目录一、Watcher 标准的事件处理器二、Curator 缓存监听一、Watcher 标准的事件处理器在 ZooKeeper 中,接口类型 Watcher 用于表示一个标准的事件处理器,用来定义收到事件通知后相关的回调处理逻辑。接口类型 Watcher 包含 KeeperState 和 EventType 这两个内部枚举类,分别代表了通知状态和事件类型。提供一个接口的事件回调方法:void process(WatchedEvent event);。定义并使用一个 Watcher 实例:Wat
2020-08-25 16:20:55
376
原创 四、ZooKeeper Curator 开源客户端
文章目录一、Curator 有什么不同?二、Curator 开发包依赖三、Curator 的基本用法1. 客户端实例2. Curator 管理节点四、异步接口五、Curator 分布式锁的使用一、Curator 有什么不同?Curator 是一套 ZooKeeper 客户端框架,和 ZkClient 一样它解决了非常底层的细节开发工作。Curator 提供了一套易用性和可读性更强的 Fluent 风格的客户端 API 框架,还提供了一些比较普遍的、开箱即用的、分布式开发用的解决方案,如 Recipe、
2020-08-25 16:20:17
228
原创 三、ZooKeeper 手写分布式锁
文章目录一、ZooKeeper 分布式锁实现二、ZooKeeper 分布式锁的原理三、实现ZooKeeper 分布式锁一、ZooKeeper 分布式锁实现在单体应用开发场景中涉及并发的时候,一般采用 Synchronized 或者其它的 JUC 工具实现多线程间的同步问题,在分布式的应用场景中,就需要一种更加高级的锁机制来处理跨机器的进程之间数据同步问题。这种跨机器的锁就是 分布式锁二、ZooKeeper 分布式锁的原理ZooKeeper 的每一个节点都是一个天然的顺序发号器在每一个节点下面创
2020-08-25 16:19:19
190
原创 二、ZooKeeper 手写分布式配置
文章目录一、ZooKeeper 分布式配置实现1. 需求2. 代码实现一、ZooKeeper 分布式配置实现ZooKeeper Java Example : https://zookeeper.apache.org/doc/current/javaExample.html1. 需求用ZK实现一个配置中心,当节点中的数据变更的时候,应用程序同步最新的配置数据。2. 代码实现添加配置类 Configuration@Getter@Setter@AllArgsConstructorpubli
2020-08-25 16:18:28
167
原创 一、ZooKeeper 入门
文章目录一、ZooKeeper 介绍二、ZooKeeper 配置三、ZooKeeper 配置开机启动Server四、ZooKeeper 客户端命令五、参考文档一、ZooKeeper 介绍它是一个针对大型分布式应用程序的分布式协调服务,通过共享的分层名称空间相互协调,该命名空间的组织方式类似于文件系统,由ZNode 节点组成,ZooKeeper数据保留在内存中。ZK 公开了一组简单的原语,分布式应用程序可以基于这些原语实现分布式同步、配置维护及分布式节点统一命名等服务。分布式协调,高性能,高扩展性,高
2020-08-25 16:17:53
419
原创 2. Apache 安装 WAF
Apache安全防护WAF,安装配置mod_security模块在不改动现有系统任何代码的前提下,防止SQL注入比如下面这个场景:服务器中难免有些安全性比较差的程序,或者某个程序在SQL处理上,没有使用参数查询,而是直接拼接字符串,还没有类型检查。 这时可以考虑使用WAF (Web Application Firewall)。安装配置http://www.apachelounge.com/download/首先安装好Apache 2.4 和相应版本mod_security解压后,里面有两个文件夹
2020-08-19 14:54:36
1308
原创 1. Apache Widdows 下安装
windows安装apachecmd打开命令行窗口,切换到apache安装目录下cd E:\apache\bin安装apache服务器httpd.exe -k install修改配置文件编辑文件:<安装目录>\conf\httpd.conf测试该服务的配置文件httpd.exe -n “MyServiceName” –t启动已安装的apache服务httpd.exe -k start测试安装结果[http://localhost:port]知
2020-08-19 14:54:02
160
原创 八、Redis Twemproxy (nutcracker)
文章目录一、Twemproxy (nutcracker) 介绍二、编译Twemproxy三、配置 Twemproxy四、其缺点:五、Redis 高可用集群架构一、Twemproxy (nutcracker) 介绍Git 地址 :https://github.com/twitter/twemproxytwemproxy 也叫 nutcracker,是 Twtter 开源的一个快速、轻量级的 Redis 和 Mencached 代理服务器,主要用于管理 Redis 和 memcached 集群,减少到后端
2020-08-16 22:21:24
524
1
原创 五、Redis 持久化
文章目录一、Redis 持久化一、RDB1. 优点:2. 缺点:3. 规则配置4. RDB 快照过程:5. RDB 相关命令二、AOF (append only file)1. 优点:2. 缺点:3. AOF 配置:4. AOF 重写AOF 重写过程5. BGREWRITEAOF 手动执行AOF重写6. AOF文件损坏修复redis-check-aof 实验一、Redis 持久化Redis 提供了 RDB 和 AOF 两种不同级别的持久化方式:RDB持久化方式能够在指定的时间间隔能对你的数据进行
2020-08-16 21:55:01
81
原创 四、Redis 事务、发布订阅、Pipeline、Expire、缓存回收策略
文章目录一、事务1. Redis事务相关命令:2. 正常执行事务3. Discard 事务4. Command 命令错误(类似于java编译性错误)5. 运行错误(类似于java的1/0的运行时异常)6. watch二、Pub/Sub 发布订阅1. 订阅发布2. 模式匹配订阅3. 缺点三、Pipeline 管道四、EXPIRE Key seconds1. Expire 特点:2. Redis如何淘汰过期的 Keys五、缓存回收策略1. Maxmemory配置指令2. 回收策略3. 回收进程如何工作4. 近似
2020-08-16 21:54:16
650
原创 二、Redis 常用命令与数据类型
文章目录一、常用命令1. Keys2. Help1). help @\ 查看命令组的帮助2). help \ 查看具体命令3). help \ 参数提示补全3. set4. get5. exists6. EXPIRE key seconds7. EXPIREAT key timestamp8. PEXPIREAT key milliseconds-timestamp9. TTL10. PTTL11. TYPE12. DEL13. INCR key14. INCRBY key increment15. DE
2020-08-16 21:53:38
201
原创 一、Redis Centos 7 安装与配置
文章目录一、下载安装1. 升级 GCC2. 重编译安装3. 添加环境变量4. Redis可执行文件二、安装 Redis 服务1. 手动安装并配置 Redis2. 配置开机自启动服务3. 配置 chkconfig 开机重启4. 设置service启动信息5. systemctl 管理 Redis 服务三、Redis 配置1. NETWORK配置2. GENERAL 配置3. SNAPSHOTTING 配置4. REPLICATION 主从配置5. SECURITY 安全配置6. CLIENTS 连接配置7.
2020-08-16 21:52:33
586
原创 七、Redis 缓存击穿、穿透、雪崩
文章目录一、缓存穿透二、缓存击穿三、雪崩一、缓存穿透现象:用户大量并发请求的数据(key)对应的数据在 redis 和数据库中都不存在,导致尽管数据不存在但还是每次都会进行查DB。很多时候代码写的逻辑都是先从 redis 缓存中查,如果缓存中为空则从DB中查,如果DB中查到的数据不为空则设置到缓存并返回给接口。但如果从DB中查询的数据为空,则会造成返复查询DB.解决方案:从DB中查询出来数据为空,也进行空数据的缓存,避免DB数据为空也每次都进行数据库查询;使用布隆过滤器,但是会增加一定的复杂度
2020-08-16 21:51:20
127
原创 六、Redis 主从复制 Replicaof、哨兵 Sentinel
文章目录一、Replicaof 主从复制1. 配置主从复制:1). 命令行方式2). 配置方式(永久生效)2. 其它设置3. Slave持久化4. 无硬盘复制5. 增量复制二、Sentinel 哨兵1. 基本配置1). 配置 sentinel.conf2). 运行Sentinel2. 选举优先规则,选择优先级最高的 slave,(通过slave-priority)来配置3. 每个 Sentinel 都需要定期执行的任务4. 主观下线和客观下线:5. sentinel 选举规则一、Replicaof 主从复
2020-08-16 21:50:52
5172
1
原创 三、Redis Bitmap 操作
文章目录一、Bitmap 位操作1. SETBIT key offset value2. GETBIT key offset3. BITCOUNT key [start] [end]4. BITOP operation destkey key [key ...]4. BITPOS key bit [start] [end]二、Bitmap 使用场景一:用户签到三、Bitmap 使用场景二:统计活跃用户一、Bitmap 位操作通过一个bit位来表示某个元素对应的值或者状态,其中的key就是对应元素本身。我
2020-08-14 22:06:53
1038
原创 四、高并发 - 基于Keepalived的LVS实验
四、高并发 - 基于Keepalived的LVS实验准备环境vip:node01 192.168.79.101lvs(主):node01 192.168.79.101 网卡: eth0lvs(备):node04 192.168.79.104 网卡: eth0nginx1:node02 192.168.79.102 网卡: eth3nginx2:node03 192.168.79.103 网卡: eth3RS中的服务node02~node03:1)修改内核:echo 1 >
2020-08-11 10:32:20
189
原创 三、高并发 - LVS的DR模型
三、高并发 - LVS的DR模型理论基础网卡上有IP和MAC地址,网卡一加电就会将自己公布出去,别的机器只能知道IP地址逻辑的会走ARP协议请求MAC地址。Linux系统下 /proc 是虚拟目录,开机之后才会有的目录,里面放的内核及所有启动的进程,把里面的变量及参数抽象成文件,修改文件的值相当于改了内核变量参数的值,目录中的文件的参数值一变,内核立即发生效果。这些文件修改的时候不能用vi 命令去打开修改。因为会产生隐藏临时文件,只能echo 重定向去覆盖。lo 回环接口,是内核上的虚拟网卡,虚
2020-08-11 10:30:01
213
原创 一、高并发 - 网络协议原理
计算机网络体系结构分层 OSI 七层模型 TCP/IP 概念层模型 功能 TCP/IP 协议 应用层 应用层 文件传输,电子邮件,文件服务 ,虚拟终端 TFTP,HTTP,SMTP,FTP,SNTP,DNS,Telnet 表示层 数据格式化,代码转换,数据加密 没有协议
2020-08-11 10:22:47
508
1
原创 三、多线程 - 线程池
三、多线程 - 线程池一、Executor执行者,是一个接口类,他有一个方法叫执行,那么执行的东西是 Runnable。二、ExecutorService是从Executor继承,除了去实现Executor可以去执行一个任务之外,还完善了整个任务执行器的一个生命周期,就拿线程池来举例子,一个线程池里面一堆的线程就是一堆的工人,执行完一个任务之后我这个线程怎么结束啊;线程池定义了这样一些个方法:void shutdown();//结束List<Runnable> shutdownN
2020-08-11 07:11:08
133
原创 二、多线程 - 容器
二、多线程 - 容器容器 分两大类Collection、Map,Collection又分三大类List、Set、Queue队列SetSet 与 List, Queue 的主要区别是不会有重复元素ArrayList & LinkedList没有加锁,线程不安全。ArrayList是基于数组实现的,LinkedList是基于双链表实现的。LinkedList还实现了Deque接口,Deque接口是Queue接口的子接口,它代表一个双向队列,因此LinkedList可以作为双向对列。因为
2020-08-11 07:10:28
581
原创 一、多线程 - 线程
八、多线程 - 线程创建线程的几种方式:继承Thread,并重写该类的run方法public class MyThread extends Thread{ @Override public void run(){ System.out.println(Thread.currentThread().getName()+" 是继承写法。"); } public static void main(String[] args){ MyTh
2020-08-11 07:08:20
241
原创 七、JVM - 线程安全与锁优化
七、线程安全与锁优化 线程安全:当多个线程同时访问一个对象时,如果不用考虑这些线程在运行时环境下的调度和交替执行,也不需要进行额外的同步,或者在调用方进行任何其他的协调操作,调用这个对象的行为都可以获得正确的结果,那就称这个对象是线程安全的。synchronized 根据《Java 虚拟机规范》的要求,在执行 monitorenter 指令时,首先要去尝试获取对象的锁。如果这个对象没有被锁定,或者当前线程已经持有了那个对象的锁,就把锁的计数器的值加一,而在执行 monitorexit 指令时
2020-08-10 21:37:54
112
原创 六、JVM - Java 与线程
六、Java 与线程线程的实现 目前线程是 Java 里面进行处理器资源调度的最基本单位,不过如果 Loom 项目能够成功为 Java 引用纤程(Fiber)的话,可能就会改变这一点。 主流的操作系统都提供了线程实现,Java 语言刚提供了在不同硬件的操作系统平台下对线程操作的统一处理,每个已经调用过 start() 方法且还未结束的 java.lang.Thread 类的实例就代表着一个线程。Thread 类与大部分的 Java 类库有着显著的差别,它的所有关键方法都被声明为 Native
2020-08-10 21:35:52
99
原创 五、JVM - Java 内存模型
五、Java 内存模型硬件的效率与一致性 大多数的运算任务都不可能只靠处理器“计算”就能完成,处理器至少要与内存交互,如读取运算数据、存储运算结果等,这个 I/O 操作就是很难消除的(无法仅靠寄存器来完成所有运算任务)。由于计算机的存储设备与处理器的运算数度有着几个数量级的差距,所以现代计算机系统都不得不加入一层或多层读写数度尽可能接近处理器运算数度的高速缓存来作为内存与处理器之间的缓冲:将运算需要使用的数据复制到缓存中,让运算能快速进行,当运算结束后再从缓存同步回内存之是,这样处理器就无须等待缓慢
2020-08-10 21:33:05
95
原创 四、JVM - 虚拟机类加载机制与字节码执行引擎
四、虚拟机类加载机制与字节码执行引擎类加载时机 一个类型从被加载到虚拟机内存中开始,到卸载出内存为止,整个生命周期将会经历加载(Loading)、验证(Verification)、准备(Preparation)、解析(Resolution)、初使化(Initialization)、使用(Using) 和卸载(Unloading) 七个阶段。其中验证、准备、解析三个部分统称为连接(Linking)。 加载、验证、准备、初使化和卸载这五个阶段的顺序是确定的,类型的加载过程必须按这种顺序按部就班的
2020-08-10 21:28:15
196
原创 三、JVM - 基础故障处理工具
三、基础故障处理工具HotSpot参数分类标准: - 开头,所有的HotSpot都支持非标准:-X 开头,特定版本HotSpot支持特定命令不稳定:-XX 开头,下个版本可能取消java -XX:+PrintCommandLineFlags -version 观查虚拟机配置java -XX:+PrintFlagsInitial 默认参数值java -XX:+PrintFlagsFinal 最终参数值java -XX:+PrintFlagsFinal | grep xxx 找到
2020-08-10 21:24:35
174
原创 二、JVM - 垃圾收集器
二、垃圾收集器如何定位垃圾引用计数(ReferenceCount)在对象中添加一个引用计数器,每当一个地方引用它时,计数器值就加1;当引用失效时,计数器值就减1;任何时候计数器值为零的对象就是不可能再被使用的,原理简单,判定效率高。但是单纯的引用计数就很难解决对象之间相互循环引用的问题。可达性分析算法(Reachability Analysis)当前主流的商用程序语言(Java、C#、Lisp)的内存管理子系统,都是通过可达性分析(Reachability Analysis) 算法来判定对
2020-08-10 21:22:51
160
原创 一、JVM - 内存管理
一、Java 内存管理运行时数据区域 Java 虚拟机在执行Java程序的过程会把它所管理的内存划分为若干个不同数据区域程序计数器 程序计数器是一块较小的内存空间,可以看作是当前线程所执行的字节码的行号指示器。每条线程都有一个独立的程序计数器。如果正在执行的是本地(Native)方法,这个计数器的值则为空(Undefined)。此内存区域是唯一一个在《Java虚拟机规范》中没有规定OutOfMemoryError情况的区域Java 虚拟机栈 与程
2020-08-10 21:12:15
158
原创 Spring Security + JWT 实现基于Token的安全验证
Spring Security + JWT 实现基于token的安全验证准备工作使用Maven搭建SpringMVC项目,并加入Spring Security的实现参考: Spring SecurityJWT官网JWT简介参考:JWT简介JWT的结构JWT包含了使用 . 分隔的三部分:1.Header 头部,
2017-05-16 18:44:39
27129
15
原创 Spring Security 快速入门
Spring Securityhttp://docs.spring.io/spring-security/site/docs/4.2.2.RELEASE/reference/htmlsingle/#el-permission-evaluator准备工作使用Maven搭建SpringMVC项目添加Spring Security支持添加相关Jar
2017-05-15 18:43:13
501
原创 Geode Region 管理
数据是以键/值对(key/value)的形式存于regions中的 键和值可以是任何类型 org.apache.geode.cache.Region实现了java.util.Map接口 可以通过XML配置、API以及gfsh命令的方式创建、删除、清除或使无效操作Region Region的属性定义了区域中的数据如何存储,分发和管理 数据区域可以在分布式系统成员之间划分,也可以是
2017-05-11 15:20:49
2423
原创 Java调用Geode
Goede序列化Geode提供了Java序列化之外的序列化选项,为数据存储,传输和语言类型提供更高的性能和更大的灵活性。 Geode DataSerialization 比PDXSerialization快 25%,但使用PDX序列化可以减少反序列化的成本。 Geode 提供的序列化方式(DataSerialization和PDXSerialization),不支持对象的循环引
2017-05-11 14:53:46
4012
7
原创 Geode 分布式缓存配置
分布式成员配置分布式系统成员(Members): 是连接到Geode分布式系统的程序。可以配置成员属于单一的分布系统,也可以配置为分布系统的clients 或 servers 并与其它分布系统进行通信。 数据成员在创建高速缓存时连接到Geode系统。通过配置属性配置分布式系统。参考gemfire_properties Geode属性定义了相关成员的初使属性,包括启动,初使化,通信的
2017-05-11 14:50:54
2220
原创 Geode多节点集群实验
服务器说明主机(nn): locator1 + server1主机(db): locator2 + server2 主机(dn1): locator3 + server3 主机(dn2): locator4 + server4 分别在各主机创建Geode工作目录,并在该目录中进入GFSH命令行。新建多locator集群主机(nn)
2017-05-11 14:48:47
1710
原创 Spring WebSocket 初探
Spring Websocket API1.spring 4.0及以上增加了WebSocket的支持(这里使用4.3.8.RELEASE) 2.spring 支持STOMP协议的WebSocket通信 3.应对不支持 WebSocket 的场景,许多浏览器不支持 WebSocket 协议;SockJS 是 WebSocket 技术的一种模拟。SockJS 会 尽可能对应 Web
2017-05-11 14:36:53
2033
原创 Geode 发布应用JARS到Geode members
部署JAR文件可以动态的部署应用jar文件到指定的members或所有的members。Geode自动追踪jar文件的版本,自动加载部署的jar文件到classpath,并自动加载jar文件中的functions。 可以同时部署一个或多个jar文件到一个分组或多个分组当中,可指定一个jar文件也可以指定一个目录,但不能两个同时用。部署functions.jar到所有的m
2017-04-12 13:36:22
582
原创 Geode 创建并使用集群配置
创建集群配置1. 创建一个工作目录,并进入该目录,该目录将会保存集群的配置2. 进gfsh命令行 $ gfsh 3. 启动一个locator,该命令会返回消息,提示集群配置服务已经启动并在运行,如果有错误信息就去查看locator日志,日志文件目录在返回消息中的Log File: /path…./locator*.log gfsh> start locato
2017-04-12 13:33:34
1581
原创 Scala进阶
Scala进阶定义类class User{ //类成员必须初使化, var name:String=null @BeanProperty var alias:String="caspar" private[this] var age=null //println将作为主构建器中的一部分,在创建对象时被执行 println("constructing
2017-04-09 11:04:07
1373
原创 Scala快速入门
Scala快速入门变量定义val hello="Hello Scala"val hello:String="Hello Scala"val hello:java.lang.String="Hello Scala"lazy val hello="Hello Scala"val hello="Hello Scala"val x=0x29 //十六进制定义整数val x
2017-04-08 17:26:17
13862
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人