自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

江南、董少

沉默是金、涛声依旧

原创 Redis(开发与运维):63---info命令总结

info命令的格式有3种: info:部分Redis系统状态统计信息 info all:全部Redis系统状态统计信息,一次性打印下面所有section的内容 info section:某一块的系统状态统计信息。info命令所有的section如下所示 下面对各个section...

2020-06-05 12:29:34 17 0

原创 Redis(开发与运维):62---开发运维的陷阱之(寻找热点key)

热门新闻事件或商品通常会给系统带来巨大的流量,对存储这类信息的 Redis来说却是一个巨大的挑战。以Redis Cluster为例,它会造成整体流量的 不均衡,个别节点出现OPS过大的情况,极端情况下热点key甚至会超过 Redis本身能够承受的OPS,因此寻找热点key对于开发和运维人员非常重 ...

2020-06-05 12:11:43 16 0

原创 Redis(开发与运维):61---开发运维的陷阱之(处理bigkey)

bigkey是指key对应的value所占的内存空间比较大 如果按照数据结构来细分的话,一般分为字符串类型和非字符串类型: 字符串类型:体现在单个value值很大,一般认为超过10KB就是bigkey,但这个值和具体的OPS相关。例如一个字符串类型的value可以最大存到512MB 非字符...

2020-06-05 11:29:03 16 0

原创 Redis(开发与运维):60---开发运维的陷阱之(安全控制:redis密码机制、rename-command、bind、protected-mode等)

一、redis攻击演示案例 2015年11月,全球数万个Redis节点遭受到了攻击,所有数据都被清除 了,只有一个叫crackit的键存在,这个键的值很像一个公钥,如下所示: 127.0.0.1:6379> get crackit "\n\n\nssh-rsa AAAAB3Nz...

2020-06-05 10:57:30 18 0

原创 Redis(开发与运维):59---开发运维的陷阱之(flushall/flushdb误操作:AOF、RDB恢复数据)

Redis的flushall/flushdb命令可以做数据清除,对于Redis的开发和运维人员有一定帮助,然而一旦误操作,它的破坏性也是很明显的。怎么才能快速恢复数据,让损失达到最小呢?本文我们将结合之前学习的Redis相关知识进行分析,最后给出一个合理的方案 注意:为了方便说明,下文中除了AO...

2020-06-05 09:40:26 20 0

原创 Redis(开发与运维):58---开发运维的陷阱之(Linux配置优化:内存分配控制(overcommit、swappiness)、THP、OOM killer、NTP、TCP backlog

通常来看,Redis开发和运维人员更加关注的是Redis本身的一些配置优 化,例如AOF和RDB的配置优化、数据结构的配置优化等,但是对于操作系 统是否需要针对Redis做一些配置优化不甚了解或者不太关心。然而事实证 明一个良好的系统操作配置能够为Redis服务良好运行保驾护航 一、内存分配控制 ...

2020-06-04 22:10:08 52 0

原创 Redis(开发与运维):57---缓存设计之(热点key重建优化)

开发人员使用“缓存+过期时间”的策略既可以加速数据读写,又保证数据的定期更新,这种模式基本能够满足绝大部分需求。但是有两个问题如果同时出现,可能就会对应用造成致命的危害: 当前key是一个热点key(例如一个热门的娱乐新闻),并发量非常 大 重建缓存不能在短时间完成,可能是一个复杂计算,例如...

2020-06-04 18:45:05 36 0

原创 Redis(开发与运维):56---缓存设计之(雪崩问题及优化)

一、雪崩问题概述 下图描述了什么是缓存雪崩:由于缓存层承载着大量请求,有效地保护了存储层,但是如果缓存层由于某些原因不能提供服务,于是所有的请 求都会达到存储层,存储层的调用量会暴增,造成存储层也会级联宕机的情况 缓存雪崩的英文原意是stampeding herd(奔逃的野牛),指的是缓存层...

2020-06-04 16:09:15 41 0

原创 Redis(开发与运维):55---缓存设计之(无底洞问题及优化)

一、无底洞问题 2010年,Facebook的Memcache节点已经达到了3000个,承载着TB级别的缓存数据。但开发和运维人员发现了一个问题,为了满足业务要求添加了大量新Memcache节点,但是发现性能不但没有好转反而下降了,当时将这 种现象称为缓存的“无底洞”现象。 那么为什么会产生这...

2020-06-04 15:36:20 35 0

原创 Redis(开发与运维):54---缓存设计之(缓存穿透问题及优化)

一、什么是缓存穿透 缓存穿透是指查询一个根本不存在的数据,缓存层和存储层都不会命中,通常出于容错的考虑,如果从存储层查不到数据则不写入缓存层,下图整个过程分为如下3步: 1)缓存层不命中 2)存储层不命中,不将空结果写回缓存 3)返回空结果 缓存穿透带来的问题: ①缓存穿...

2020-06-04 15:08:30 40 0

原创 Redis(开发与运维):53---缓存设计之(缓存的收益和成本、缓存更新策略(剔除算法、超时剔除、主动更新)、缓存粒度控制)

一、缓存的收益和成本 下图左侧为客户端直接调用存储层的架构,右侧为比较典型的缓存层+存储层架构,下面分析一下缓存加入后带来的收益和成本 收益如下: 加速读写:因为缓存通常都是全内存的(例如Redis、Memcache),而 存储层通常读写性能不够强悍(例如MySQL),通过缓存的使用可以...

2020-06-04 15:08:15 38 0

原创 Redis(开发与运维):52---集群之(集群运维:集群完整性、带宽消耗、Pub/Sub广播问题、集群倾斜、集群读写分离、手动故障转移、数据迁移)

Redis集群由于自身的分布式特性,相比单机场景在开发和运维方面存 在一些差异。本文我们关注于常见的问题进行分析定位

2020-06-04 15:07:06 33 0

原创 Redis(开发与运维):51---集群之(故障转移:故障发现、故障恢复、故障转移时间、故障转移演示案例)

Redis集群自身实现了高可用。高可用首先需要解决集群部分失败的场景:当集群内少量节点出现故障时通过自动故障转移保证集群可以正常对外提供服务。本文介绍故障转移的细节,分析故障发现和替换故障节点的过程 一、故障发现 当集群内某个节点出现问题时,需要通过一种健壮的方式保证识别出节点是否发生了故障。R...

2020-06-04 14:47:43 35 0

原创 Redis(开发与运维):50---集群之(请求路由:请求重定向(MOVED)、ASK重定向)

一、请求重定向 关于“CLUSTER KEYLOST命令、MOVED错误”的设计与实现可以参阅:https://blog.csdn.net/qq_41453285/article/details/103394429 MOVED重定向 概念:在集群模式下,Redis接收任何键相关命令时首先计算...

2020-05-31 23:46:05 126 0

原创 Redis(开发与运维):49---集群之(集群伸缩:伸缩原理、集群扩容、集群收缩)

一、伸缩原理 Redis集群提供了灵活的节点扩容和收缩方案。在不影响集群对外服务的情况下,可以为集群添加节点进行扩容也可以下线部分节点进行缩容,如下图所示: 从上图看出,Redis集群可以实现对节点的灵活上下线控制。其中原理可抽象为槽和对应数据在不同节点之间灵活移动。首先来看我们之前搭建的集...

2020-05-31 19:58:52 107 0

原创 Redis(开发与运维):48---集群之(集群通信:通信流程、Gossip消息、节点选择)

关于集群通信的“设计与实现”还可以参阅:https://blog.csdn.net/qq_41453285/article/details/103456179 一、通信流程 在分布式存储中需要提供维护节点元数据信息的机制,所谓元数据是指:节点负责哪些数据,是否出现故障等状态信息 常见的元数据维...

2020-05-31 15:29:48 93 0

原创 Redis(开发与运维):47---集群之(搭建集群:准备节点、节点握手、分配槽)

一、准备节点 Redis集群一般由多个节点组成,节点数量至少为6个才能保证组成完整高可用的集群。每个节点需要开启配置cluster-enabled yes,让Redis运行在集群模式下 建议为集群内所有节点统一目录,一般划分三个目录:conf、 data、log,分别存放配置、数据和日志相关文...

2020-05-31 10:36:12 145 0

原创 Linux(服务器编程):34---聊聊各种中间件的使用场景

中间件是什么 中间件是介于应用系统和系统软件之间的一类软件,它使用系统软件所提供的基础服务(功能),衔接网络上应用系统的各个部分或不同的应用,能够达到资源共享、功能共享的目的 例如MySQL、Redis、MongoDB、ZeroMQ、dfs(分布式文件系统)等都是中间件 例如,下图是一个软件...

2020-05-30 20:02:57 118 0

原创 C++(数据结构与算法)88:---布隆过滤器

一、什么是布隆过滤器 布隆过滤器(Bloom Filter)是1970年由布隆提出的 它实际上是一个很长的二进制向量和一系列随机映射函数。布隆过滤器可以用于检索一个元素是否在一个集合中 优点: 可以高效地进行查询,可以用来告诉你“某样东西一定不存在或者可能存在” 可以高效的进行插入 ...

2020-05-29 15:47:54 230 0

原创 Linux(服务器编程):33---同步HTTP请求、异步HTTP请求

一、同步HTTP请求 待续 二、异步HTTP请求

2020-05-29 11:31:24 158 0

原创 Redis(开发与运维):46---集群之(数据分布理论、Redis数据分区方法(槽)、Redis集群功能限制)

一、Redis集群功能的发展 Redis Cluster是Redis的分布式解决方案,在3.0版本正式推出,有效地解决了Redis分布式方面的需求。当遇到单机内存、并发、流量等瓶颈时,可以采用Cluster架构方案达到负载均衡的目的 在Redis 3.0之前,Redis分布式方案一般有两种: ...

2020-05-29 10:18:54 112 0

原创 Redis(开发与运维):45---Sentinel之(开发与运维中的问题:故障转移日志、节点运维(节点下线/上线/配置)、高可用读写分离)

一、故障转移日志 本次故障转移的分析使用下面的拓扑和配置进行说明: 开始故障转移测试,模拟故障的方法有很多,比较典型的方法有以下几种: 方法一,强制杀掉对应节点的进程号,这样可以模拟出宕机的效果 方法二,使用Redis的debug sleep命令,让节点进入睡眠状态,这样可 以模拟阻...

2020-05-29 09:58:49 256 0

原创 Redis(开发与运维):44---Sentinel之(哨兵实现原理:三个定时监控任务、主观下线和客观下线、领导者节点选举、故障转移)

一、三个定时监控任务 一套合理的监控机制是Sentinel节点判定节点不可达的重要保证,Redis Sentinel通过三个定时监控任务完成对各个节点发现和监控 ①每隔10秒 每隔10秒,每个Sentinel节点会向主节点和从节点发送info命令获取最新的拓扑结构,如下图所示 例如下面就...

2020-05-29 08:52:25 161 0

原创 Redis(开发与运维):43---Sentinel之(哨兵的安装与部署、哨兵配置参数、部署技巧、哨兵API)

一、哨兵的安装与部署 上一篇文章介绍了Redis Sentinel的基本架构,下面将介绍如何安装和部署Redis Sentinel 下面以3个Sentinel节点、1个主节点、2个从节点组成一个Redis Sentinel进行说明,拓扑结构如下图所示 ①部署主节点 主节点的地址为127...

2020-05-27 15:24:35 195 0

原创 Redis(开发与运维):42---Sentinel之(哨兵介绍、高可用性)

一、基本概念 由于对Redis的许多概念都有不同的名词解释,所以在介绍Redis Sentinel之前,先对几个名词进行说明,这样便于在后面的介绍中达成一 致,如下图所示 Redis Sentinel是Redis的高可用实现方案,在实际的生产环境中,对提高整个系统的高可用性是非常有帮助的 二...

2020-05-27 12:22:44 169 0

原创 Redis(开发与运维):41---内存之(内存优化:redisObject对象、缩减键值对象、共享对象池、字符串优化、编码优化、控制键的数量)

一、redisObject对象 关于redisObject的设计与实现还可以参阅:https://blog.csdn.net/qq_41453285/article/details/103224875 Redis存储的所有值对象在内部定义为redisObject结构体,内部结构如下图所示: ...

2020-05-26 23:58:12 386 0

原创 Nginx(语法):14---反向代理之(非HTTP型上游服务器:Mecached、FastCGI、SCGI、uWSGI)

待续

2020-05-25 17:48:15 175 0

原创 Nginx(语法):13---反向代理之(负载均衡:upstream模块(代理多个上游服务器))

一、复杂均衡概述 负载均衡也是 Nginx 常用的一个功能,负载均衡其意思就是分摊到多个操作单元上进行 执行,例如 Web 服务器、FTP 服务器、企业关键应用服务器和其它关键任务服务器等,从而 共同完成工作任务。简单而言就是当有 2 台或以上服务器时,根据规则随机的将请求分发到 指定的服务器上...

2020-05-25 17:20:04 178 0

原创 Nginx(语法):12---反向代理之(代理模块,代理单个上游服务器)

一、反向代理介绍 反向代理应该是 Nginx 做的最多的一件事了,什么是反向代理呢,反向代理(Reverse Proxy)方 式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器, 并将从服务器上得到的结果返回给 internet 上请求连接的客户端,此时代理...

2020-05-25 15:42:57 304 0

原创 Nginx(语法):11---Nginx运行FastCGI程序(fcgi库与spwan-fcgi程序)

待续

2020-05-25 14:57:58 145 0

原创 Nginx(语法):10---HTTP模块之(其他语法与指令)

一、变量 配置文件也支持使用变量,你可以使用set、map或geo指令自定义变量。当然系统也提供了许多预定义的变量,如核心HTTP变量 变量是在运行时计算的值,作用指令的参数 注意事项: 一个变量名由$符号开头 系统预定义变量是不允许重新定义的,如果重新定义那么会产生下面的错误: ...

2020-05-24 21:57:24 177 0

原创 Nginx(语法):09---HTTP模块之(URI请求与重定向:location模块)

一、location模块介绍 location指令可以用在虚拟服务器server部分,并且意味着提供来自客户端URI或者内部重定向访问。除少数情况外,location也可以被嵌套使用,它们被作为特定的配置尽可能地处理请求 格式 location会尝试根据用户请求中的URI来匹配,如果可以匹配...

2020-05-24 13:03:06 210 0

原创 Nginx(语法):08---HTTP模块之(虚拟服务器:server模块)

一、虚拟服务器(server模块) Nginx配置文件必须至少包含一个服务器指令来定义虚拟服务器。 当Nginx处理请求时, 它首先选择提供请求的虚拟服务器,这些虚拟服务器响应HTTP请求,因此它们都包含在http模块中 虚拟服务器由http模块中的server模块来定义,一个http模块中可...

2020-05-24 11:58:44 186 0

原创 Nginx(语法):07---HTTP模块之(http模块概述、http模块核心指令)

一、Nginx的系统架构 在正式提供服务的产品环境下,部署Nginx时都是使用一个master进程来管理多个worker进程,一般情况下,worker进程的数量与服务器上的CPU核心数相等。每一个worker进程都是繁忙的,它们在真正地提供互联网服务,master进程则很“清闲”,只负责监控管理...

2020-05-24 10:33:03 166 0

原创 UNIX(网络编程-IO操作):17---非阻塞accept

待续

2020-05-23 22:19:10 180 0

原创 Linux(服务器编程):32---Nginx概述与代理/静态资源访问等演示案例

一、Nginx可以作为代理/网关 工作原理: 在一个局域网中,Nginx与其他server一起工作,但是Nginx可以作为这些server的代理 当有外部数据到达路由器时,路由器通过地址映射将外部数据映射到nginx服务器上(映射方法有:路由器的公有地址是112.73.116.78:80...

2020-05-23 18:20:40 180 0

原创 Nginx(语法):06---Nginx全局配置指令

一、Nginx全局配置指令 全局配置部分被用于配置对整个server都有效的参数 一些重要的全局配置指令如下: 例如,下面是一个简单的配置文件 user www; worker_processes 12; error_log /var/log/nginx/error.log pid...

2020-05-23 14:52:20 203 0

原创 Nginx(语法):05---Nginx配置文件语法

配置文件由“配置块”和“配置项”组成。格式如下: <section> { <directive> <parameters>; <section> { <directive> <parameters&...

2020-05-23 13:22:34 165 0

原创 Nginx(语法):04---Nginx的命令行控制

在默认的情况下: Nginx安装在/usr/local/nginx/下 可执行的Nginx文件为/usr/local/nginx//sbin/nginx 默认的配置文件为/usr/local/nginx/conf/nginx.conf 一、Nginx启动的几种方式 ①默认启动方式...

2020-05-23 08:51:51 196 0

原创 Nginx(语法):03---使用源码包编译安装Nginx

Nginx 代码提供了两种独立的下载分支一一开发版与稳定版。开发分支是个正处于 积极开发状态的版本。在这个版本中,会有一些新功能被集成到其中,在稳定版中是找不到这些功能的。当发布 个“开发”版时,它会经历同样的 QA 和作为稳定版的一组类似 功能测试。因此,无论哪 个分支都可以用于生产环境中。两者...

2020-05-23 08:21:21 169 0

提示
确定要删除当前文章?
取消 删除