自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

四年

hello darkness, my old friend

  • 博客(120)
  • 资源 (1)
  • 收藏
  • 关注

转载 微信红包实现原理

微信红包实现原理以下内容来源于QCon某高可用架构群聊天记录整理 背景:有某个朋友咨询微信红包的架构,在官方或非官方同学的解释和讨论中得出以下讨论内容,在此期间有多个同学发红包做现网算法测试。抢红包过程当有人在群里发了一个N人的红包,总金额M元,后台大概发生的事情如下:一、发红包后台操作:在数据库中增加一条红包记录,存储到CKV,设置过期时间;在Cache(可能是腾讯内部k

2015-05-05 14:37:04 7785 8

转载 共享内存原理

共享内存区域是被多个进程共享的一部分物理内存。如果多个进程都把该内存区域映射到自己的虚拟地址空间,则这些进程就都可以直接访问该共享内存区域,从而可以通过该区域进行通信。共享内存是进程间共享数据的一种最快的方法,一个进程向共享内存区域写入了数据,共享这个内存区域的所有进程就可以立刻看到其中的内容。这块共享虚拟内存的页面,出现在每一个共享该页面的进程的页表中。但是它不需要在所有进程的虚拟内存中都有相同

2015-04-08 22:54:12 3573

转载 深入理解Redis中的主键失效及其实现机制

作为一种定期清理无效数据的重要机制,主键失效存在于大多数缓存系统中,Reids也不例外。在Redis提供的诸多命令中,EXPIRE、EXPIREAT、PEXPIRE、PEXPIREAT以及SETEX和PSETEX均可以用来设置一条Key-Value对的失效时间,而一条Key-Value对一旦被关联了失效时间就会在到期后自动删除(或者说变得无法访问更为准确)。可以说,主键失效这个概念还是比较容易理解

2015-04-08 22:51:25 680

转载 Buffer和Cache的区别(转)

今天, 又在公司内听到大家争论 Buffer 与 Cache的差异了, 虽然差不多1个月前, 我们就已经在群组里面进行过激烈的争论, 我在网上搜索了下, buffer 与 Cache 区别, 找到下面这个链接, 给出的解释比较接近为维基百科上的说法, 抄录如下, 以为记.什么是Cache? 什么是Buffer? 二者的区别是什么?http://wenda.tianya.cn/wenda

2015-04-08 22:50:45 573

原创 UNIX环境高级编程(十)信号

10.2信号概念产生信号的条件:1.当用户按某些终端键shi

2015-04-08 22:48:20 638

转载 关于中断上下文为什么不能睡眠?

这个问题有很多人问过,我看了下Linux得内核代码,原因如下:(当然我不能保证一定对,如果有牛人理解得更好,欢迎指正)1、 中断处理的时候,不应该发生进程切换,因为在中断context中,唯一能打断当前中断handler的只有更高优先级的中断,它不会被进程打断,如果在 中断context中休眠,则没有办法唤醒它,因为所有的wake_up_xxx都是针对某个进程而言的,而在中断context

2015-04-08 22:46:14 684

转载 malloc原理

如何查看进程发生缺页中断的次数?         用ps -o majflt,minflt -C program命令查看。          majflt代表major fault,中文名叫大错误,minflt代表minor fault,中文名叫小错误。          这两个数值表示一个进程自启动以来所发生的缺页中断的次数。发成缺页中断后,执行了那些操作?

2015-02-24 23:00:34 654

转载 Linux vmstat命令实战详解

vmstat命令是最常见的Linux/Unix监控工具,可以展现给定时间间隔的服务器的状态值,包括服务器的CPU使用率,内存使用,虚拟内存交换情况,IO读写情况。这个命令是我查看Linux/Unix最喜爱的命令,一个是Linux/Unix都支持,二是相比top,我可以看到整个机器的CPU,内存,IO的使用情况,而不是单单看到各个进程的CPU使用率和内存使用率(使用场景不一样)。一般vmstat

2015-02-23 22:55:52 379

转载 平均负载

有时候我们会觉得系统响应很慢,但是又找不到原因,这时就要查平均负载了,看它是否有大量的进程在排队等待。查看Linux系统的平均负载1.平均负载的概念有时候我们会觉得系统响应很慢,但是又找不到原因,这时就要查平均负载了,看它是否有大量的进程在排队等待。特定的时间间隔内运行队列中的平均进程数可以反映系统的繁忙程度,所以我们通常会在自己的网站或系统变慢时第一时间查系统的负载,即CPU的平均负

2015-02-23 22:16:27 612

转载 服务端为什么需要心跳(保活)机制

如果没有特意的设置某些选项或者实现应用层心跳包,TCP空闲的时候是不会发送任何数据包。也就是说,当一个TCP的socket,客户端与服务端谁也不发送数据,会一直保持着连接。这其中如果有一方异常掉线(例如死机、路由被破坏、防火墙切断连接等),另一端如果没有发送数据,永远也不可能知道。这对于一些服务型的程序来说,是灾难性的后果,将会导致服务端socket资源耗尽。  所以为了保证连接的有效性、及时

2015-02-19 19:55:21 4603

转载 sdt:bind用法

bind - boost头文件: boost/bind.hppbind 是一组重载的函数模板.用来向一个函数(或函数对象)绑定某些参数. bind的返回值是一个函数对象. 它的源文件太长了. 看不下去. 这里只记下它的用法: 9.1 对于普通函数假如有函数 fun() 如下:  void fun(int x, int y) {  cout  }现在我们看

2015-02-16 17:57:26 574

转载 并发和并行

并发和并行的区别:一个处理器同时处理多个任务和多个处理器或者是多核的处理器同时处理多个不同的任务。并发和并行的区别就是一个处理器同时处理多个任务和多个处理器或者是多核的处理器同时处理多个不同的任务。前者是逻辑上的同时发生(simultaneous),而后者是物理上的同时发生.并发性(concurrency),又称共行性,是指能处理多个同时性活动的能力,并发事件之间不一定要同一时刻发

2014-12-21 19:28:31 553

转载 闭包

在函数编程中经常用到闭包。闭包是什么,它是怎么产生的及用来解决什么问题呢。给出字面的定义先:闭包是由函数及其相关的引用环境组合而成的实体(即:闭包=函数+引用环境)。这个从字面上很难理解,特别对于一直使用命令式语言进行编程的程序员们。本文将结合实例代码进行解释。函数是什么地球人都知道:函数只是一段可执行代码,编译后就“固化”了,每个函数在内存中只有一份实例,得到函数的入口点便可以执行函数了

2014-11-06 18:41:17 729

原创 正向代理和反向代理

代理服务器的作用主要是将客户端的qi

2014-11-05 22:25:09 1112

转载 tbnet源码

2014-11-02 19:37:25 812

转载 IT博客

团队技术博客淘宝UED淘宝用户体验团队淘宝核心系统淘宝核心系统团队博客阿里巴巴数据库团队专注数据库管理开发运维淘宝通用产品专注JAVA技术淘宝QA致力于做测试的行业标准淘宝搜索技术关注技术 关注搜索量子恒道专注大数据统计百度搜索研发关注搜索相关技术EMC中国研究院关注于云计算和大数据贰号楼肆层阿里巴巴平台技术部阿里数据平台阿里巴巴数据平台百度技术分享交流百度的互联网技术编码者说腾讯滴技术团

2014-11-02 14:24:09 751

转载 enable_shared_from_this实现分析

使用情景:当类对象被 shared_ptr 管理时,需要在类自己定义的函数里把当前类对象作为参数传给其他函数时,这时需要传递一个 shared_ptr ,否则就不能保持 shared_ptr 管理这个类对象的语义(因为有一个 raw pointer 指向这个类对象,而 shared_ptr 对类对象的这个引用没有计数,很有可能 shared_ptr 已经把类对象资源释放了,而那个调用函数还在使

2014-10-28 22:18:02 896

转载 std::tr1::function

使用std::tr1::function对象代替虑函数在 C++的TR1中(Technology Report)中包含一个function模板类和bind模板函数,使用它们可以实现类似函数指针的功能,但却却比函数指针更加灵活,特别是函数指向类的非静态成员函数时。可以参考Scott Meyers. >. Item 35.下面具体说明其使用方法。1. 指向全局函数或静态成员函数时

2014-10-22 20:26:53 602

原创 Redis 数据淘汰策略

在 redis 中,允许用户设置最大使用内存大小 server.maxmemory,redis 内存数据集大小达到设置的最大使用内存大小后,就会施行数据淘汰策略。redis 提供 6种数据淘汰策: # MAXMEMORY POLICY: how Redis will select what to remove when maxmemory # is reached? You can sel

2014-10-08 15:51:31 3148

原创 Redis 主从复制

Redis 支持简单且易用的主从复制(master-slave replication)功能,该功能可以让从服务器 (slave server)成为主服务器 (master server) 的精确复制品 以下是关于 Redis 复制功能的几个重要方面: • Redis 使用异步复制。从 Redis 2.8 开始,从服务器会以每秒一次的频率向主服务器报告复制流(replication

2014-10-06 22:43:56 8004

原创 Redis AOF持久化

AOF持久化记录所有服务器对数据库的写操作,并在服务器启动时,用这些命令来还原数据集。AOF文件中的命令都以Redis协议的格式来记录,新命令会被追加到文件的末尾。Redis还支持后台对AOF文件进行重写,防止其超过AOF文件限制的大小 AOF持久化的优缺点 优点 ·使用AOF持久化使Redis变得更耐久你可以设置不同的 fsync 策略,比如无 fsync ,每秒钟一次 fsyn

2014-09-29 22:21:16 3085 1

转载 Linux smaps接口文件结构

在Linux内核 2.6.16中引入了一个系统内存接口特性,这个接口位于/proc/$pid/目录下的smaps文件中 ,一看内容发现是进程内存映像信息,比同一目录下的maps文件更详细些400df000-4048c000 r--s 00000000 1f:05 286 /data/dalvik-cache/system@[email protected]@classes.de

2014-09-27 16:32:19 718

原创 Redis RDB持久化

在运行的情况下,redis将数据以数据结构的形式保存在内存中,为了让数据在redis重启之后仍然可用,Redis提供了RDB和AOF两种持久化方式,本篇讲解RDB持久化的工作方式 在运行时,redis将内存中的数据库以快照的方式存储到磁盘中,在重启后读取磁盘中RDB文件来将redis恢复到原来的状态 RDB的优缺点 优点 ·RDB是一个非常紧凑的文件,它保存了redis在某个时间点上的数据

2014-09-27 14:41:15 2459

原创 Redis事务机制(二)

事务中可能出现的错误 执行事务机制时可能会出现以下两种错误: • 事务在执行EXEC 之前,入队的命令可能会出错。比如说,命令可能会产生语法错误(参数数量错误,参数名错误,等等),或者其他更严重的错误,比如内存不足(如果服务器使用 maxmemory 设置了最大内存限制的话) • 命令可能在EXEC 调用之后失败。举个例子,事务中的命令可能处理了错误类型的键,比如将列表命令用在了字符串键上

2014-09-26 15:45:35 1076

原创 Redis 事务机制实现

事务提供了一种“将多个命令打包,然后一次性、按顺序地执行”的机制,它提供两个保证: • 事务是一个单独的隔离操作:事务中的所有命令都会序列化、按顺序地执行。事务在执行的过程中,不会被其他客户端发送来的命令请求所打断 • 事务是一个原子操作:事务中的命令要么全部被执行,要么全部都不执行 MULTI,EXEC,DISCARD,WATCH 四个命令是 redis 事务的四个基础命令。其中:

2014-09-26 11:37:10 4612

原创 Redis 数据类型

redis的键可以保存不同类型的值,那么在对键进行操作时就必须直到键的类型和其上可以执行的操作,所以Redis 必须让每个键都带有类型信息,使得程序可以检查键的类型,并为它选择合适的处理方式。另外,在前面介绍各个底层数据结构时有提到,Redis 的每一种数据类型,比如字符串、列表、有序集,它们都拥有不只一种底层实现(Redis 内部称之编码,encoding),这说明,每当对某种数据类型的键进行操

2014-09-24 22:12:54 910

原创 Redis inset内部结构

ntset 和 dict 都是 sadd 命令的底层数据结构,当添加的所有数据都是整数时,会使用前者;否则使用后者。特别的,当遇到添加数据为字符串,即不能表示为整数时,redis 会把数据结构转换为 dict,即把 intset 中的数据全部搬迁到 dict。 整数集合的应用 Intset 是set的底层实现之一,如果一个集合: 1. 只保存着整数元素; 2. 元素的数量不多;

2014-09-24 11:18:20 1381

转载 Redis ziplist内部结构

ziplist是用一个字符串来实现的双向链表结构,顾名思义,使用ziplist可以减少双向链表的存储空间,主要是节省了链表指针的存储,如果存储指向上一个链表结点和指向下一个链表结点的指针需要8个字节,而转化成存储上一个结点长度和当前结点长度在大多数情况下可以节省很多空间(最好的情况下只需2个字节)。但是每次向链表增加元素都需要重新分配内存。 ziplist中的结构体 typedef struc

2014-09-24 10:39:11 754

转载 跳跃表skiplist

跳表是平衡树的一种替代的数据结构,但是和红黑树不相同的是,跳表对于树的平衡的实现是基于一种随机化的算法的,这样也就是说跳表的插入和删除的工作是比较简单的。下面来研究一下跳表的核心思想:先从链表开始,如果是一个简单的链表,那么我们知道在链表中查找一个元素I的话,需要将整个链表遍历一次。  如果是说链表是排序的,并且节点中还存储了指向前面第二个节点的指针的话,那么在查找

2014-09-22 20:12:42 528

原创 Redis核心结构字典

Redis 是支持多key-value数据库,并用 RedisDb 来表示一个key-value数据库. redisServer 中有一个 redisDb *db成员变量, RedisServer 在初始化时,会根据配置文件的 db 数量来创建一个 redisDb 数组. 客户端在连接后,通过 SELECT 指令来选择一个 reidsDb,如果不指定,则缺省是redisDb数组的第1个(即下标是

2014-09-20 12:52:27 626

原创 Redis事件驱动库

redis 内部有一个小型的事件驱动ae,它和 libevent 网络库的事件驱动一样,都是依托 I/O 多路复用 利用 I/O 多路复用技术,监听感兴趣的文件 I/O 事件,例如读事件,写事件等,同时也要维护一个以文件描述符为主键,数据为某个预设函数的事件表,这里其实就是一个数组或者链表 。当事件触发时,比如某个文件描述符可读,系统会返回文件描述符值,用这个值在事件表中找到相应的数据项,从而实

2014-09-19 23:38:36 921

转载 Redis运行流程解析

概述Redis通过定义一个 struct redisServer 类型的全局变量server 来保存服务器的相关信息(比如:配置信息,统计信息,服务器状态等等)。启动时通过读取配置文件里边的信息对server进行初始化(如果没有指定配置文件,将使用默认值对sever进行初始化),初始化的内容有:起监听端口,绑定有新连接时的回调函数,绑定服务器的定时函数,虚拟内存初始化,log初始化等等

2014-09-19 20:40:40 2687

转载 进程内核栈、用户栈

1.进程的堆栈     内核在创建进程的时候,在创建task_struct的同事,会为进程创建相应的堆栈。每个进程会有两个栈,一个用户栈,存在于用户空间,一个内核栈,存在于内核空间。当进程在用户空间运行时,cpu堆栈指针寄存器里面的内容是用户堆栈地址,使用用户栈;当进程在内核空间时,cpu堆栈指针寄存器里面的内容是内核栈空间地址,使用内核栈。2.进程用户栈和内核栈的切换    当进程因

2014-09-15 22:42:03 527

转载 C++中智能指针的设计和使用

智能指针(smart pointer)是存储指向动态分配(堆)对象指针的类,用于生存期控制,能够确保自动正确的销毁动态分配的对象,防止内存泄露。它的一种通用实现技术是使用引用计数(reference count)。智能指针类将一个计数器与类指向的对象相关联,引用计数跟踪该类有多少个对象共享同一指针。每次创建类的新对象时,初始化指针并将引用计数置为1;当对象作为另一对象的副本而创建时,拷贝构造函数拷

2014-09-12 00:09:28 559

原创 Linux环境变量设置总结

可用 export 命令查看PATH值[root@localhost u-boot-sh4]# export

2014-08-31 22:25:01 506

转载 Linux下动态库(.so)和静态库(.a)

linux下有两种库:动态库和静态库(共享库)二者的不同点在于代码被载入的时刻不同。静态库的代码在编译过程中已经被载入可执行程序,因此体积比较大。动态库(共享库)的代码在可执行程序运行时才载入内存,在编译过程中仅简单的引用,因此代码体积比较小。不同的应用程序如果调用相同的库,那么在内存中只需要有一份该动态库(共享库)的实例。静态库和动态库的最大区别,静态情况

2014-08-31 21:35:34 553

原创 Linux守护进程(daemon)编程规则

在编写守护程序时需要遵循一些基本的规则

2014-08-31 10:57:55 1736

转载 /dev/console,/dev/null,/dev/tty

UNIX和Linux中比较重要的三个设备文件是:/dev/console,/dev/tty和/dev/null。 0 :  /dev/console 这个设备代表的是系统控制台,错误信息和诊断信息通常会被发送到这个设备。 每个UNIX系统都会有一个指定 的终端或显示屏用来接收控制台信息。 1 : /dev/tty 如果一个进程有控制终端的话,那么 /dev/tty就是这个控

2014-08-31 10:51:08 991

原创 epoll与select区别

区别(epoll相对select优点)主要有三:1.select的句柄数目受限,在linux/posix_types.h头文件有这样的声明:#define __FD_SETSIZE    1024  表示select最多同时监听1024个fd。而epoll没有,它的限制是最大的打开文件句柄数目。2.epoll的最大好处是不会随着FD的数目增长而降低效率,在selec中采用轮询处理,

2014-08-26 12:33:36 1204

转载 Epoll在LT和ET模式下的读写方式

在一个非阻塞的socket上调用read/write函数, 返回EAGAIN或者EWOULDBLOCK(注: EAGAIN就是EWOULDBLOCK)从字面上看, 意思是:EAGAIN: 再试一次,EWOULDBLOCK: 如果这是一个阻塞socket, 操作将被block,perror输出: Resource temporarily unavailable总结:这个错误表示资源暂

2014-08-25 12:52:45 663

c语言程序设计(谭浩强)

pdf格式,精简又实用,是学习c语言的经典图书也不可缺少

2012-10-27

空空如也

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

TA关注的人

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