自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(46)
  • 收藏
  • 关注

原创 Redis GEO

GEO是什么?地理位置信息:存储经纬度、计算两地距离、范围计算等。GEOADD key longitude latitude member [longitude latitude member …] # 增加地理位置信息GEOPOS key member [member …] # 获取地理位置信息GEODIST key member1 member2 [unit] # 获取两个地理位置的...

2018-12-24 11:02:55 1082 1

原创 Redis HyperLogLog

基于HyperLogLog的算法:极小空间完成独立数量统计本质还是字符串三个APIPFADD key element [element …]:向HyperLogLog中添加元素PFCOUNT key [key …]:计算HyperLogLog的独立总数PFMERGE destkey sourcekey [sourcekey …]:合并多个HyperLogLog使用经验1)是否能容忍错...

2018-12-24 10:46:17 335

原创 大并发服务器的优化(Nginx\内核)

    对于高性能网站 ,请求量大,如何支撑?1: 减少请求 ---- 对于开发人员----合并css, 背景图片, 减少mysql查询等.2: 对于运维---- nginx的expires ,利用浏览器缓存等,减少查询.3: 利用cdn来响应请求4: 最终剩下的,不可避免的请求----服务器集群+负载均衡来支撑.    所以,来到第4步后,就不要再考虑减少请求这个方向了,而是思考如何...

2018-12-20 08:49:27 281

原创 Nginx之反向代理与负载均衡

转:http://blog.csdn.net/Daybreak1209/article/details/515490311、什么是代理服务器    客户机在发送请求时,不会直接发送给目的主机,而是先发送给代理服务器;代理服务接受客户机请求之后,再向主机发出,并接收目的主机返回的数据,存放在代理服务器的硬盘中,再发送给客户机。2、再谈“反向代理”:    当客户机向站点发出请求时,请求将转...

2018-12-18 14:29:11 4575

原创 Nginx之expires缓存提高网站负载

引言因为关心到过期时间,所以服务器的日期要准确,时间不准确,一切设置都是“白扯”。 ⇒ ⇒ ⇒ 修改系统时间:  date -s ‘2018-10-01 16:33:44’  clock -w # 写入配置文件expires 缓存    expires,译为过期,使用 expires 设置多长时间后过期,而不是立即过期。对 nginx 来说,实现的方法很简单,只要在locati...

2018-12-17 18:49:40 687 2

原创 Nginx之gzip压缩提升网站速度

Syntax: gzip on | off;Default: gzip off;Context: http, server, location, if in locationgzip on|off # 是否开启gzipgzip_min_length 200 # 开始压缩的最小长度(再小就不要压缩了,意义不大)gzip_buffers 32 4K | 16 8K # 缓冲(压缩在内存...

2018-12-17 17:46:11 173 1

原创 Nginx之详解 rewrite URI重写

more conf/fastcgi.conf 相关的内置变量rewrite功能:使用nginx提供的全局变量或自己设置的变量,结合正则表达式和标志位实现url重写以及重定向。rewrite只能放在server{},location{},if{}中,并且只能对域名后边的除去传递的参数外的字符串起作用,例如 http://seanlook.com/a/we/index.php?id=1&u=...

2018-12-17 12:38:58 5109

原创 Nginx之详解 location 匹配

  location之精准匹配    locate有“定位”的意思,根据URI来进行不同的定位,在虚拟机的配置中,是必不可少的,location可以把网站的不同部分,定位到不同的处理方式上。比如:碰到.php,如何调用PHP解释器?这时就需要location。location的语法: location [ = | ~ | ~* | ^ ~ ] patt {}    中括弧{}可以不写任何参...

2018-12-14 20:50:15 1146 2

原创 Nginx配置中的log_format(设置详细的日志格式)

一般是运维工作人员负责Nginx日志管理。观察nginx的server段,可以看到如下的信息:access_log logs/host.access.log main;这说明该server,它的访问日志的文件是 logs/host.access.log,使用的格式是 main 格式。其中,main格式见下面:注解:除了 main 格式,也可以自定义格式。Q:main格式是什么?A...

2018-12-14 18:27:54 2761

原创 Nginx虚拟主机配置nginx.conf

配置文件:/usr/local/nginx/conf/nginx.conf#user nobody;worker_processes 1; # worker process的个数,一般设置为CPU数*核数 #error_log logs/error.log;#error_log logs/error.log notice;#error_log logs/error...

2018-12-14 17:06:49 346

原创 图解HTTP请求响应报文

HTTP报文格式常见的回写客户端的数据的类型普通文件:text/plain; charset=ios-8859-1*.html:text/html; charset=ios-8859-1*.jpg : image/jpeg*.gif : image/gif*.png : image/png*.wav : video/x-msvideo*.mov : video/quicktime...

2018-12-14 15:20:18 416

原创 nginx的介绍、安装、启动

nginx是什么?  服务器:http服务器、反向代理服务器、虚拟主机。  http服务器    是什么?是web服务器的一种,它是基于超文本传输协议HTTP的服务器。    能干嘛?HTTP服务器会等待浏览器发送的请求,接收到URL请求后从中提取有用信息作出处理,最后将 处理结果返回给客户端。  反向代理服务器    是什么?代理服务器    ...

2018-12-14 14:34:45 216

原创 Linux定时任务crontab

定时任务的创建:crontab -e 进入任务编辑状态* 代表所有的取值范围内的数字/ 代表每的意思,/5表示每5个单位- 代表从某个数字到某个数字, 分开几个离散的数字 * * * * * 命令分 时 日 月 周 0 4 1 1 * 1月1日早上4点 0 */2 * * * 每2个小时 0 23-7/2 * * * 晚上11点到早上7点之间每两个小...

2018-12-14 12:03:33 167

原创 Memcached之永久数据被踢现象

网上有人反馈为“明明已经将memcached数据设置为永久有效,但是永久数据还是会被莫名其妙的踢除”。 分析原因,如图所示:官方解决方案:永久数据、非永久数据分开存放...

2018-12-14 10:20:06 369

原创 Memcached之无底洞现象

背景以及概念无底洞现象是facebook的工作人员反应的,facebook在2010年左右,memcached已经达到3000个,存储着数千G的缓存。他们发现一个问题:memcached连接频繁,效率下降了,于是加memcached服务器节点,添加后发现因为连接频率导致的问题仍然存在,并没有好转 ===> 称之为“无底洞效应”。原文见:Facebook’s Memcached Mult...

2018-12-13 21:49:22 269

原创 Memcached之缓存雪崩、缓存穿透、缓存预热

缓存雪崩现象case1:一般是由于某个memcached节点失效,导致其他节点的缓存命中率下降,缓存中缺失的数据就需要去数据库中查询,短时间内,频繁的访问数据库导致数据库服务器承受不住那么大的请求压力而崩溃(换句话说,就是缓存失效导致短时间内访问数据库,数据库承受不住如此大的压力而被一下压垮)重启后,因为缓存为空,数据库服务器再次被压垮,但是会向缓存中写入一些数据;数据库服务器反复多次重启,...

2018-12-13 20:42:16 435

原创 一文看懂《一致性哈希算法》

注解:本文绝大部分参考左程云《程序员代码面试指南:IT名企算法与数据结构题目最优解》。前言memcached服务器本身不提供分布式cache的移植性,而是由客户端来提供,即假设有60台memcached服务器,要想实现负载均衡,需要自己对数据进行分配。因此,一个好的负载均衡的分布式算法是多么的重要。1、分布式算法之取模算法[1] 实现原理工程师经常使用多台服务器集群来设计和实现数据缓存...

2018-12-13 19:27:49 600

原创 Memcached之惰性删除机制

惰性失效机制优点:节省了CPU每隔几秒钟检查值是否过期带来的时间开销当某个值过期之后,并没有从内存删除,因此stats统计时,cur_item有其信息当get其值时,先判断得知已经过期,返回空并且将该值从内存删除如果之前没有get过该值,将不会自动删除,cur_item一直不变当有一个新值去占用该值的位置时,则将新值直接替换该过期值的位置总结:当且仅当 get过期值 或者 新值替换过...

2018-12-13 15:44:35 837

原创 Memcached之Slab内存分配机制

如果你有动手习惯,可以现在就把电脑中的内存条拆开看下,发现内存条上有一个一个的单元格,嘻嘻~,每个单元格都是一个小房子,都能存放东西。memcached的内存分配默认是采用了Slab Allocator的机制分配、管理内,在该机制出现以前,内存的分配是通过对所有记录简单地进行malloc和free来进行的。 但是,这种方式会导致内存碎片,加重操作系统内存管理器的负担,最坏的情况下, 会导致操作...

2018-12-13 15:11:58 1139

原创 Memcached之增删改查、incr/decr、stats、flush_all

add 添加注意:如果memcached中有<key>,那么再次add该<key>,将添加失败add <key> <flags> <exptime> <bytes&a

2018-12-11 21:55:16 247

原创 Memcached命令语法格式

<command> <key> <flags> <exptime> <bytes> \r\n<datablock> \r\n&a

2018-12-11 21:30:30 285

原创 滑动窗口与流量控制机制、拥塞控制

1、利用滑动窗口实现流量控制如果发送方把数据发送得过快,接收方可能会来不及接收,这就会造成数据的丢失。所谓流量控制就是让发送方的发送速率不要太快,要让接收方来得及接收。 ⇒ 利用滑动窗口机制可以很方便地在TCP连接上实现对发送方的流量控制。流量控制:指点对点通信量的控制,是端到端的问题。流量控制所要做的就是抑制发送端发送数据的速率,以便使接收端来得及接收。2、拥塞控制拥塞控制:防止过多的...

2018-12-11 14:38:20 2132

原创 详解RST、RST攻击

复位报文段RST: flags [R.]1、什么是RST?接收到RST后,将会执行什么操作?在TCP协议中RST表示复位,用来异常的关闭连接,在TCP的设计中它是不可或缺的。2、出现RST分节的情况可以在三种情况下发生,在连接建立时、在中间发送数据时、在连接关闭时。① 访问/connect一个不存在的端口服务器程序端口未打开,而客户端来连接② 向处于TIME_WAIT状态的端口发起连...

2018-12-11 12:25:32 8842

原创 TCP的11种状态、三次握手/四次挥手、TIME_WAIT/CLOSE_WAIT

查看TCP状态:netstat -nap三次握手服务器调用listen系统函数,进入LISTEN状态客户端向服务器发送SYN段请求连接后,进入SYN_SEND状态一旦监听到某个连接请求(受到SYN段),就将该连接放入内核等待队列种,并向客户端发送SYN+ACK,此时服务器处于SYN_RECV状态客户端发送ACK给服务器&&服务器接收到客户端发来的ACK后,二者都进入E...

2018-12-11 10:38:28 1120

原创 TCP的四种计时器

TCP共使用以下四种计时器,即重传计时器、坚持计时器、保活计时器和时间等待计时器。这几个计时器的主要特点如下:1、重传计时器目的:防止数据丢失,丢失了就重传TCP每发送一个报文段,就对此报文段设置一个超时重传计时器。可能发生两种情况:(1)若在计时器截止时间到(通常是60秒)之前收到了对此特定报文段的确认,则撤销此计时器。(2)若在收到了对此特定报文段的确认之前计时器截止期到,则重传此报...

2018-12-11 10:02:38 2013

原创 TIMEWAIT状态

TIMEWAIT是友好的修改内核参数/proc/sys/net/ipv4/tcp_tw_recycle来快速回收被关闭的socket,使得TCP连接根本就不进入TIME_WAIT状态客户端在接收到服务器发送的FIN段后,没有立即进入CLOSED状态,而是进入TIME_WAIT状态;在TIME_WAIT状态,客户端连接要等待一段长为2MSL的时间才能完全关闭。TIME_WAIT状态存在的原因有...

2018-12-11 09:17:12 8600

原创 socket[可读\可写\异常]3种条件的发生

一、下列四个条件中的任何一个满足时,socket准备好读:socket接收缓冲区中已经接收的数据的字节数大于等于socket接收缓冲区低潮限度的当前值;对这样的socket的读操作不会阻塞,并返回一个大于0的值(即:准备好读入的数据的字节数)。注解:可以用socket选项SO_RCVLOWAT来设置此低潮限度,对于TCP和UDPsocket,其缺省值为1。socket是一个用于监听的soc...

2018-12-10 20:49:35 930

原创 Nagle算法、TCP确认延迟机制、TCP_CORK

两种类型的TCP报文段简介成块数据、交互数据1、在TCP传输数据流中,存在两种类型的TCP报文段,一种包含成块数据(通常是满长度的,携带一个报文段最多容纳的字节数),另一种则包含交互数据(通常只有携带几个字节数据)。2、举例说明什么样的数据是“交互数据”? ==> 从键盘输入的一个字符,占用一个字节,可能在传输上造成41字节的包,其中包括1字节的有用信息和40字节的首部数据。这种情况转...

2018-12-10 19:43:14 590

原创 linux中可重入函数、不可重入函数

1、结论:可重入函数必然是线程安全函数和异步信号安全函数; 线程安全函数不一定是可重入函数。例如:strtok是既不可重入的,也不是线程安全的;加锁的strtok不是可重入的,但线程安全。2、不可重入导致死锁的案例① 假设函数func()在执行过程中需要访问某个共享资源,因此为了实现线程安全,在使用该资源前加锁,在不需要资源解锁。② 假设该函数在某次执行过程中,在已经获得资源锁之后,突然有...

2018-12-10 16:39:14 2052

原创 C++11之Lambda

Lambda表达式的语法通过下图来介绍:① [ ]中的=、&分别表示传递参数时以值传递、引用传递② 形参列表③ Mutable 标识④ 异常标识⑤ 返回值类型:使用C++11新增的返回类型后置语法⑥ 函数体,也就是lambda表达式需要进行的实际操作[](double x,double y)->double{return x-y;}1、函数指针、仿函数、Lambd...

2018-12-06 16:41:56 180

原创 c++11 继承控制关键字:final和override

= final1、用途:① 阻止了从类继承;② 阻止一个虚函数的重载class A final {};class B : public A { //“B”: 无法从“A”继承,因为它已被声明为“final”};class A{public: virtual void func() final;};class B : public A{public: void func...

2018-12-06 15:28:29 753

原创 C++11之右值引用、移动语义

本文涉及的概念:1. 右值引用2. std::move3. 移动构造函数、移动赋值函数右值引用的主要目的之一是实现移动语义。1、为什么使用移动语义?避免拷贝带来的开销2、std::move功能:将参数从左值变成右值,使得参数为左值时调用移动语义的函数来避免开销详细解释:因为传递的参数如果是左值,将会调用拷贝构造、拷贝赋值函数,但是使用std::move将参数转换成右值后,将会调...

2018-12-06 14:24:22 182 1

原创 C++11几个常用关键字auto、decltype、追踪返回类型、using

auto1、auto关键字(1)auto的作用是让编译器自动推断变量的类型,而不需要显式指定类型。这种隐式类型的推导发生在编译期。(2)auto并不能代表实际的类型声明,只是一个类型声明的“占位符”(3)auto声明的变量必须马上初始化,以让编译器推断出它的实际类型。2、auto的限制(1)auto不能用于函数参数。如果需要泛型参数,可借助于模板(2)auto不能用于非静态成员变量...

2018-12-06 10:50:14 581

原创 C++11之 std::bind | std::function

头文件 #include <functional>命名空间 std、std::placeholders1、bind与function使用示例代码:void showAll(int a, double b, const std::string& c){ std::cout &amp

2018-12-05 18:41:38 1662

原创 C++智能指针之weak_ptr

https://blog.csdn.net/albertsh/article/details/82286999前言weak_ptr这个指针天生一副“小弟”的模样,也是在C++11的时候引入的标准库,它的出现完全是为了弥补它老大shared_ptr天生有缺陷的问题,其实相比于上一代的智能指针auto_ptr来说,新进老大shared_ptr可以说近乎完美,但是通过引用计数实现的它,虽然解决了指针...

2018-12-05 13:31:28 752

原创 C++智能指针之shared_ptr

shared_ptr是一个引用计数智能指针,用于共享对象的所有权。它可以从一个裸指针、另一个shared_ptr、一个auto_ptr、或者一个weak_ptr构造。1、shared_ptr的构造函数(1) 这个构造函数获得给定指针p的所有权。参数p必须是指向T的有效指针。构造后引用计数设为1。template <class T> explicit shared_ptr(T* ...

2018-12-05 12:33:22 507

原创 C++智能指针之unique_ptr

从C++智能指针之auto_ptr一文中得知:在使用auto_ptr时,可能会不经意的将多个auto_ptr指向同一块内存,造成auto_ptr销毁释放时多次释放同一块内存。为了解决该问题,本文引出了unique_ptr。顾名思义,unique是唯一的意思。说明它跟auto_ptr有点类似,就是同时只能有一个智能指针对象指向某块内存,与auto_ptr不同,unique_ptr还有些其他特性:...

2018-12-05 10:29:17 308

原创 C++智能指针之auto_ptr

头文件auto_ptr不能初始化为指向非动态内存(原因很简单,delete 表达式会被应用在不是动态分配的指针上这将导致未定义的程序行为)。对象通过初始化只能指向由new创建的动态内存,它是这块内存的拥有者。构造auto_ptr对象示例代码// 直接构造智能指针auto_ptr<int> p(new int(1));//推荐// 将已存在的指向动态内存的普通指针作为参数...

2018-12-05 10:02:26 315

原创 C/C++混合编程--extern “C” 使用方法详解

1. 首先要明白:被extern “C”修饰的变量和函数是按照C语言方式编译和链接的(1) 首先看看C++中对类似C的函数是怎样编译的。C++支持函数重载,而过程式语言C则不支持。函数被C++编译后在符号库中的名字与C语言的不同。例如,假设某个函数的原型为:void foo( int x, int y );该函数被C编译器编译后在符号库中的名字为_foo,而C++编译器则会产生像_foo...

2018-12-04 21:29:31 306

原创 muduo之当析构函数遇见线程安全

一、当析构函数遇到多线程当一个对象能被多个线程同时看到时,那么对象的销毁时机就会变得模糊不清,可能出现多种竞态条件:① 在即将析构一个对象时,如何知道此时是否有别的线程正在执行该对象的成员函数?② 如何保证在执行成员函数期间,对象不会被另一个线程析构?③ 在调用某个对象的成员函数之前,如何得知该对象还活着?它的析构函数会不会碰巧执行到一半?二、对象的销毁太难2.1 作为数据成员的mut...

2018-12-04 19:19:32 660

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

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