![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Nginx+Redis+Tomcat
文章平均质量分 75
仰望星空的尘埃
https://github.com/a422478514
我未曾见过一个早起、勤奋、谨慎、诚实的人抱怨命运不好;良好的品格,优良的习惯,坚强的意志,是不会被假设所谓的命运击败的。
展开
-
Redis 面试 8 连问
1、如何保证Redis高可用和高并发?Redis主从架构,一主多从,可以满足高可用和高并发。出现实例宕机自动进行主备切换,配置读写分离缓解Master读写压力。2、Redis高可用方案具体怎么实施?使用官方推荐的哨兵(sentinel)机制就能实现,当主节点出现故障时,由Sentinel自动完成故障发现和转移,并通知应用方,实现高可用性。它有四个主要功能: 集群监控,负责监控redis master和slave进程是否正常工作。 消息通知,如果某个redis实例有故障,那么哨转载 2020-09-29 10:50:06 · 298 阅读 · 0 评论 -
redis中multi与pipeline介绍分析
背景由于对redis缓存中数据有批量操作,例如预热缓存数据,或者在列表页批量去获取缓存数据,在使用了multi批量提交事务后,发现redis压力高居不下,而使用了pipeline之后压力回落了平常,也因为这个案例,特在此写个分析与笔记。multi简介标记一个事务块的开始。 事务块内的多条命令会按照先后顺序被放进一个队列当中,最后由 EXEC 命令原子性(atomic)地执行。实现原理我用php扩展调起redis服务,执行,代码如下:$redis = new redis();$转载 2020-09-19 15:00:07 · 717 阅读 · 0 评论 -
总在说SpringBoot内置了tomcat启动,那它的原理你说的清楚吗?
前言不得不说SpringBoot的开发者是在为大众程序猿谋福利,把大家都惯成了懒汉,xml不配置了,连tomcat也懒的配置了,典型的一键启动系统,那么tomcat在springboot是怎么启动的呢?内置tomcat开发阶段对我们来说使用内置的tomcat是非常够用了,当然也可以使用jetty。<dependency><groupId>org.springframework.boot</groupId><artifactId>...转载 2020-08-11 15:24:54 · 211 阅读 · 0 评论 -
nginx三种限流方案的实现
nginx限流方案的实现(三种方式)通过查看nginx官方文档,小弟查看到了三种nginx限流方式。1、limit_conn_zone2、limit_req_zone3、ngx_http_upstream_module前两种只能对客户端(即单一ip限流),并且文档也很全,但是经过测试发现,还是无法达到官方文档所说的结果(可能小弟的测试方法有问题)。这里先简单的介绍一下前两种:1、limit_conn_zone1.1nginx配置 1 2 3转载 2020-08-03 09:42:18 · 256 阅读 · 0 评论 -
关于Redis热点key的一些思考
关于Redis热点key的一些思考昨天在和一个已经跳槽的同事聊天时,询问他这段时间面试时碰到的一些问题。自己也想积累一下这方面的知识。其中他说了在面试某赞公司时面试官问他关于热点Key的的解决方案。于是针对这次谈话以及上网查的一些资料后的思考进行一下总结。方便后续自己查阅。什么是热点Key其实对于热点Key,网上一查一大堆,这里我就引用网上的一段话。从基于用户消费的数据远远大于生产的数据的角度来讲,我们平常使用的知乎等软件时,大多数人平常仅仅只是浏览,并不会去提问问题、发表的文章,偶尔会发表转载 2020-07-09 09:28:52 · 215 阅读 · 0 评论 -
nginx如何解决惊群效应
本文主要内容包括惊群效应简介、nginx如何解决惊群和一个仿照nginx避免惊群效应的简单例子惊群效应惊群简单来说就是多个进程或者线程在等待同一个事件,当事件发生时,所有线程和进程都会被内核唤醒。唤醒后通常只有一个进程获得了该事件并进行处理,其他进程发现获取事件失败后又继续进入了等待状态,在一定程度上降低了系统性能。具体来说惊群通常发生在服务器的监听等待调用上,服务器创建监听socket,后fork多个进程,在每个进程中调用accept或者epoll_wait等待终端的连接。accept和e转载 2020-06-09 15:46:51 · 943 阅读 · 0 评论 -
Redis集群的主从切换研究
转载自:https://cloud.tencent.com/developer/article/14032021.前言Redis官方原文:https://redis.io/topics/cluster-spec。另外,从Redis-5.0开始,slave已改叫replica,配置项和部分文档及变量已做改名。Redis集群的主从切换采取选举机制,要求少数服从多数,而参与选举的只能为ma...转载 2020-03-19 11:47:13 · 343 阅读 · 0 评论 -
LRU原理和Redis实现——一个今日头条的面试题
很久前参加过今日头条的面试,遇到一个题,目前半部分是如何实现 LRU,后半部分是 Redis 中如何实现 LRU。我的第一反应是操作系统课程里学过,应该是内存不够的场景下,淘汰旧内容的策略。LRU ... Least Recent Used,淘汰掉最不经常使用的。可以稍微多补充两句,因为计算机体系结构中,最大的最可靠的存储是硬盘,它容量很大,并且内容可以固化,但是访问速度很慢,所以需要把使用的...转载 2020-02-20 10:41:42 · 300 阅读 · 0 评论 -
Redis是单线程还是多线程
Redis是单线程还是多线程?以及处理模型。线程:单线程 处理模型:参考书《Redis 设计与实现》P151-152 ![](https://ws1.sinaimg.cn/large/b35c33e9ly1g1p4dzlbukj20jq08twhg.jpg) ![](https://ws1.sinaimg.cn/large/b35c33e9ly1g1p4eoaqu4j20ju0jztf...原创 2019-11-28 12:30:27 · 462 阅读 · 1 评论 -
Redission分布式锁加锁原理源码解析
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。本文链接:https://blog.csdn.net/weixin_39800144/article/details/100136391追踪一下redission加锁的实现源码,并详细介绍核心加锁代码lua脚本的执行原理和过程。1.获取锁这里是我们自己实现,调用redission的方法,...原创 2019-09-03 14:50:21 · 2343 阅读 · 1 评论 -
十九、Redis的槽位算法
Redis Slot在redis官方给出的集群方案中,数据的分配是按照槽位来进行分配的,每一个数据的键被哈希函数映射到一个槽位,redis-3.0.0规定一共有16384个槽位,当然这个可以根据用户的喜好进行配置。当用户put或者是get一个数据的时候,首先会查找这个数据对应的槽位是多少,然后查找对应的节点,然后才把数据放入这个节点。这样就做到了把数据均匀的分配到集群中的每一个节点上,从而做到...原创 2019-01-07 16:33:17 · 5400 阅读 · 0 评论 -
十八、RedisCluster的槽位、客戶端重定向、重新分片
摘要Redis Cluster本身提供了自动将数据分散到Redis Cluster不同节点的能力,分区实现的关键点问题包括:如何将数据自动地打散到不同的节点,使得不同节点的存储数据相对均匀;如何保证客户端能够访问到正确的节点和数据;如何保证重新分片的过程中不影响正常服务。这篇文章通过了解这些问题来认识Redis Cluster分区实现原理。认识Redis ClusterRedis Cl...原创 2019-01-07 16:32:18 · 1813 阅读 · 1 评论 -
十七、Redis支持的五种数据结构源码
1、zset的结构体定义在server.h中,用到了dict和zskiplist:2、list在redis源码里是quicklist实现的,quicklist是基于双端队列的ziplist,ziplist是特定格式的char数组3、hash结构在redis源码里是zipmap和dict实现的4、set结构在redis源码中是由dict和intset实现的,如果能用数字标...原创 2019-01-07 15:41:43 · 152 阅读 · 0 评论 -
十六、Redis源码简介
Redis简介redis全称REmote DIctionary Server,是一个由Salvatore Sanfilippo写的高性能key-value存储系统,其完全开源免费,遵守BSD协议。Redis与其他key-value缓存产品(如memcache)有以下几个特点。 + Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。 + Redis不...原创 2019-01-07 13:12:18 · 167 阅读 · 0 评论 -
十五、Redis中字符串的实现
摘要Redis不仅仅是一个key-value存储,它更是一个数据结构服务,支持不同类型的值。这意味着在传统的key-value存储中,我们用string的key关联string的value。而在Redis中,我们可以存储的值不受限于string,我们还可以存储复杂的数据结构。string是我们在使用Redis过程中能接触到的最简单的数据类型,也是Memcached中仅有的类型,因此对于Redi...原创 2019-01-07 13:02:44 · 615 阅读 · 0 评论 -
十三、REDIS的数据结构以及应用场景
1、显示最新的项目列表 2、删除与过滤 3、排行榜相关 4、按照用户投票和时间排序 5、处理过期项目 6、计数 7、特定时间内的特定项目 8、实时分析正在发生的情况,用于数据统计与防止垃圾邮件等 9、Pub/Sub 10、队列 11、缓存1. MySql+Memcached架构的问题 实际MySQL是适合进行海量数据存储的,通过Memcached将热点数据加载到cache,加速访...原创 2019-01-07 12:08:28 · 202 阅读 · 0 评论 -
八、Nginx工作线程
nginx是以多进程的方式来工作的nginx是以多进程的方式来工作的。nginx在启动后,会有一个master进程和多个worker进程。 master进程主要用来管理worker进程:包含:1、接收来自外界的信号,向各worker进程发送信号。2、监控worker进程的运行状态,当worker进程退出后(异常情况下),会自动重新启动新的worker进程。而基本的网络事...原创 2018-06-30 19:29:33 · 2003 阅读 · 0 评论 -
九、Nginx+LVS
最初的理解(也可以每个nginx都挂在上所有的应用服务器) nginx大家都在用,估计也很熟悉了,在做负载均衡时很好用,安装简单、配置简单、相关材料也特别多。lvs是国内的章文嵩博士的大作,比nginx被广泛接受还要早7年,并且已经被红帽作为了系统内置软件,可谓很牛了。lvs相对于nginx来说配置上就要相对复杂一些。但是,有时候我们会看到大牛们分享的经验里面是lvs+nginx作为...原创 2018-07-26 21:05:00 · 437 阅读 · 0 评论 -
十、三大主流负载均衡软件对比
LVS:1、抗负载能力强。抗负载能力强、性能高,能达到F5硬件的60%;对内存和cpu资源消耗比较低2、工作在网络4层,通过vrrp协议转发(仅作分发之用),具体的流量由linux内核处理,因此没有流量的产生。2、稳定性、可靠性好,自身有完美的热备方案;(如:LVS+Keepalived)3、应用范围比较广,可以对所有应用做负载均衡;4、不支持正则处理,不能做动静分离。5、支持负载均衡...原创 2018-07-26 21:06:05 · 3922 阅读 · 0 评论 -
一、Tomcat性能优化
一切基于JVM(内存)的优化2.1 32位操作系统与64位操作系统中JVM的对比我们一般的开发人员,基本用的是都是32位的Windows系统,这就导致了一个严重的问题即:32位windows系统对内存限制,下面先来看一个比较的表格: 操作系统 操作系统位数 内存限制 解决办法 Winxp ...原创 2018-05-15 22:24:11 · 209 阅读 · 0 评论 -
五、HTTP/AJP Connector、Bio/Nio/Apr性能对比
Connector初始化/启动的时候,将初始化/启动内部的ProtocolHandler。其实ProtocolHandler只是个接口ProtocolHandler的UML图(以下这些类在org.apache.coyote包下)创建Connector对象时,Connector的构造函数内会根据server.xml的Connector标签的配置创建ProtocolHandler(默为Ht...原创 2018-06-13 12:50:17 · 1385 阅读 · 0 评论 -
六、Tomcat集群
TOMCAT集群 目录 TOMCAT集群 1 1 集群 1 1.1 什么是集群 1 1.2 集群的特性 1 1.3 集群的分类 1 1.4 TOMCAT集群配置的优缺点 2 1.5 APACHE+TOMCAT 2 1.6 环境说明 2 2 软件安装 3 2.1 安装说明 3 2.2 JDK安装 3 2.3 APACHE安装 4 2.4 TOMCAT安装 4 3 集群配置 6 3.1 APACHE+...原创 2018-06-13 13:00:28 · 253 阅读 · 0 评论 -
三、Redis搭建与操作
Redis Cluster 介绍与搭建1. Redis Cluster介绍Redis Cluster是Redis的分布式解决方案,在Redis 3.0版本正式推出的,有效解决了Redis分布式方面的需求。当遇到单机内存、并发、流量等瓶颈时,可以采用Cluster架构达到负载均衡的目的。1.1 数据分布理论分布式数据库首要解决把整个数据集按照分区规则映射到多个节点的问题,即把数据集划...原创 2018-05-27 18:32:23 · 252 阅读 · 0 评论 -
四、REDIS的集群方案
由于Redis出众的性能,其在众多的移动互联网企业中得到广泛的应用。Redis在3.0版本前只支持单实例模式,虽然现在的服务器内存可以到100GB、200GB的规模,但是单实例模式限制了Redis没法满足业务的需求(例如新浪微博就曾经用Redis存储了超过1TB的数据)。Redis的开发者Antirez早在博客上就提出在Redis 3.0版本中加入集群的功能,但3.0版本等到2015年才发布正...原创 2018-05-31 00:01:13 · 1053 阅读 · 0 评论 -
七、REDIS主从复制原理及高可用
redis主从复制过程:当配置好slave后,slave与master建立连接,然后发送sync命令。无论是第一次连接还是重新连接,master都会启动一个后台进程,将 数据库快照保存到文件中,同时master主进程会开始收集新的写命令并缓存。后台进程完成写文件后,master就发送文件给slave,slave将 文件保存到硬盘上,再加载到内存中,接着master就会把缓存的命令转发给slav...原创 2018-06-13 16:58:31 · 115 阅读 · 0 评论 -
十一、Redis的Redisson实现分布式锁
一:前言我在实际环境中遇到了这样一种问题,分布式生成id的问题!因为业务逻辑的问题,我有个生成id的方法,是根据业务标识+id 当做唯一的值! 而uuid是递增生成的,从1开始一直递增,那么在同一台机器上运行代码,加上同步方法(synchronized),这个生成id的方法就是ok!但是因为业务扩展或者说为了安全,项目运行在两台机器上,此时单个的同步方法(synchronized或者Lo...原创 2018-09-04 17:15:30 · 872 阅读 · 0 评论 -
十二、Redis批量删除KEY
在数据库内我们可以通过like关键字、%、*或者REGEX关键字进行模糊匹配。而在Redis内我们如何进行模糊匹配呢?集群情况Redis Cluster的情况是否和单机一致呢?前段时间我对于这个议题进行了调查和研究。单节点的情况Jedis 参考stackoverflow上的解答,在Java内使用Jedis主要有如下2中写法:### 方法1Set<String> key...原创 2018-12-13 15:52:26 · 2121 阅读 · 0 评论 -
八、全文搜索引擎 Elasticsearch 入门教程
全文搜索属于最常见的需求,开源的 Elasticsearch (以下简称 Elastic)是目前全文搜索引擎的首选。它可以快速地储存、搜索和分析海量数据。维基百科、Stack Overflow、Github 都采用它。Elastic 的底层是开源库 Lucene。但是,你没法直接用 Lucene,必须自己写代码去调用它的接口。Elastic 是 Lucene 的封装,提供了 REST ...原创 2018-06-21 14:05:19 · 2105 阅读 · 0 评论 -
二、ES运行报错
ElasticSearch Root身份运行2018年01月02日 17:55:03阅读数:1753如果以root身份运行将会出现以下问题,这个错误,是因为使用root用户启动elasticsearch,elasticsearch是不允许使用root用户启动的[root@iZbp1epx1ncetamddfjnxwZ bin]# ./elasticsearch[2018-01-02...原创 2018-06-21 14:06:20 · 781 阅读 · 0 评论 -
二、Nginx反向代理以及负载均衡配置
项目地址:http://git.oschina.net/miki-long/nginx前提:最近在研究nginx的用法,在windows上小试了一下,由于windows下不支持nginx缓存配置,所以本文主要是讲nginx,以及反向代理与负载均衡。 【一、为什么要使用nginx】 要回答为什么要使用nginx,那就先说说nginx能做些什么。 首先,nginx能做反向代理,...原创 2018-05-27 18:25:36 · 270 阅读 · 0 评论