
cache
追寻北极
没有月亮的晚上,我们相信星光。没有路可走的时候,我们相信远方.--
展开
-
Sentinel-Redis高可用方案(一):主从复制
引言大概是因为Redis是个人开发的产品,所以Redis的高可用方案是被分成了几块来实现:主从复制、主从切换以及虚拟IP或客户端方案。从Redis 2.8开始加入对Sentinel机制从而实现了服务器端的主从切换,但目前尚未发现实现虚拟IP或客户端切换方案。主从复制研究wget http://download.redis.io/releases/redis-2.8.转载 2015-07-16 15:28:31 · 424 阅读 · 0 评论 -
Redis 主从 Replication 的配置
概述Redis的replication机制允许slave从master那里通过网络传输拷贝到完整的数据备份。具有以下特点:异步复制。从2.8版本开始,slave能不时地从master那里获取到数据。允许单个master配置多个slaveslave允许其它slave连接到自己。一个slave除了可以连接master外,它还可以连接其它的slave。形成一个图状的架构。转载 2015-07-17 15:46:33 · 584 阅读 · 0 评论 -
centos下sentinel主从监控配置
1,设置密码127.0.0.1:6379> config get requirepass1) "requirepass"2) ""127.0.0.1:6379> config set requirepass joeyonOK127.0.0.1:6379> auth joeyonOK127.0.0.1:6379> config get requirepass1) "requirep原创 2015-07-17 15:26:16 · 1784 阅读 · 0 评论 -
linux中内核的一个不错的参数somaxconn
在linux中,/proc/sys/net/core/somaxconn这个参数,linux中内核的一个不错的参数somaxconn 看下其解析: 对于一个TCP连接,Server与Client需要通过三次握手来建立网络连接.当三次握手成功后, 我们可以看到端口的状态由LISTEN转变为ESTABLISHED,接着这条链路上就可以开始传送数据了. 每转载 2015-07-17 15:30:32 · 1321 阅读 · 0 评论 -
基于Redis Sentinel的Redis集群(主从&Sharding)高可用方案
本文主要介绍一种通过Jedis&Sentinel实现Redis集群高可用方案,该方案需要使用Jedis2.2.2及以上版本(强制),Redis2.8及以上版本(可选,Sentinel最早出现在Redis2.4中,Redis2.8中Sentinel更加稳定),Redis集群是以分片(Sharding)加主从的方式搭建,满足可扩展性的要求; Redis Sentinel介绍Redi转载 2015-07-17 16:18:16 · 672 阅读 · 0 评论 -
Redis 字典结构实现分析
字典是 Redis 的核心数据结构之一,在 Redis 中,每个数据库本身也是一个字典,而且字典也是 Redis 的 Hash 类型的底层实现。 本文通过分析 Redis 源码里的 dict.h 和 dict.c 文件,了解字典结构的详细实现,籍此加深对 Redis 的理解。 由于字典(哈希表)是一种非常常见的数据结构,而 dict.c 中使用的 separate chaini转载 2015-07-30 10:23:15 · 741 阅读 · 0 评论 -
redis 学习笔记(4)-HA高可用方案Sentinel配置
在最小配置:master、slave各一个节点的情况下,不管是master还是slave down掉一个,“完整的”读/写功能都将受影响,这在生产环境中显然不能接受。幸好redis提供了sentinel(哨兵)机制,通过sentinel模式启动redis后,自动监控master/slave的运行状态,基本原理是:心跳机制+投票裁决每个sentinel会向其它sentinal、master、转载 2015-07-17 15:31:59 · 868 阅读 · 0 评论 -
Nginx在CDN加速之后,获取用户真实IP做并发访问限制的方法
网站被攻击是一个永恒不变的话题,网站攻击的方式也是一个永恒不变的老套路。找几百个电脑(肉鸡),控制这些电脑同时访问你的网站,超过你网站的最大承载能力,然后你就瘫了。方法虽然老土,但却一直都很管用,就像怎么打败美帝国主义,最简单的方法就是 13 亿中国人都移民去美帝,吃他的、用他的、花他的,直接能让美帝破产,压根不需要用武力。土方法,自然解决这个问题的方法也土,就是设置一个海关,控制进入的人口数量,转载 2015-08-03 11:28:16 · 4235 阅读 · 1 评论 -
nginx限制连接数ngx_http_limit_conn_module模块
一. 前言我们经常会遇到这种情况,服务器流量异常,负载过大等等。对于大流量恶意的攻击访问,会带来带宽的浪费,服务器压力,影响业务,往往考虑对同一个ip的连接数,并发数进行限制。下面说说ngx_http_limit_conn_module 模块来实现该需求。该模块可以根据定义的键来限制每个键值的连接数,如同一个IP来源的连接数。并不是所有的连接都会被该模块计数,只有那些正在被处理的请求(转载 2015-08-03 11:28:53 · 896 阅读 · 0 评论 -
Transparent Huge Pages相关概念及对mysql的影响
之前在弄tokudb的时候,在centos 6上面,需要执行 echo never > /sys/kernel/mm/redhat_transparent_hugepage/enabled关闭Transparent Huge Pages,当时未作深究,现在重新翻出来看看。说Transparent Huge Pages之前,首先说说Huge Pages。一般而言,内存管理的最小块级单转载 2015-07-22 10:09:53 · 1663 阅读 · 0 评论 -
Mysql及MongoDB并发测试对比
我在前面的文章内说过,准备做一个MongoDB与Mysql的并发对比测试,经过近一周的测试,已经完成,结果如下:MongoDB与Mysql的并发对比测试曲线图:我们大致总结一下:通过数据和图表可以看到,在并发测试下,MongoDB对Mysql的优势没有在单用户那么大.了(可参考本空间前面的测试文章)。Mongodb的insert及update性能大约是Mysql的2转载 2015-07-23 10:25:01 · 2754 阅读 · 0 评论 -
节约内存:Instagram的Redis实践
Instagram可以说是网拍App的始祖级应用,也是当前最火热的拍照App之一,Instagram的照片数量已经达到3亿,而在Instagram里,我们需要知道每一张照片的作者是谁,下面就是Instagram团队如何使用Redis来解决这个问题并进行内存优化的。首先,这个通过图片ID反查用户UID的应用有以下几点需求:查询速度要足够快数据要能全部放到内存里,最好是一台EC转载 2015-07-23 12:30:43 · 563 阅读 · 0 评论 -
SQUID与ATS (Apache Traffic Server) 压力测试
SQUID与ATS (Apache Traffic Server) 压力测试一.测试环境 1.CPU:双核 Intel(R) Core(TM)2 Duo CPU E7500 @ 2.93GHz2.内存:2G3.系统版本:CentOS release 6.2 (2.6.32-220.el6.x86_64)4.磁盘读写速度:disk re转载 2015-08-04 10:19:57 · 3408 阅读 · 0 评论 -
nginx中的内存池
http://www.cnblogs.com/sld666666/archive/2010/06/27/1766255.html1.为什么需要内存池 为什么需要内存池?a. 在大量的小块内存的申请和释放的时候,能更快地进行内存分配(对比malloc和free)b.减少内存碎片,防止内存泄露。2.内存池的原理 内存池的原理非常简单,用申转载 2015-08-04 11:31:50 · 2164 阅读 · 0 评论 -
Redis代理twemproxy安装,配置,使用
Twemproxy(nutcracker)是一个memcache、redis协议的轻量级代理。它的主要作用是减少后端缓存服务器的连接数;它支持作为多个后端服务器的代理,并对数据进行sharding分片存储到多个服务器;能够暂时移除后端不可用的服务器节点。(一)安装1、安装libtoolyum -y install libtool (解决运行autoconf 缺少 acloc转载 2016-03-24 10:53:45 · 656 阅读 · 0 评论 -
memcached内存分配及回收初探
mc简介:mc是由LiveJournal技术团队开发的一套分布式对象缓存系统,基于c语言,目前应用十分广泛,它可以应对任意多个连接,使用非阻塞的网络I/O。它的使用非常简单和方便,最常用的功能不超过5个方法(set,get,delete...)。目前pconline的网站群基本上都是使用mc做缓存服务 mc在很多时候都是作为数据库前端缓冲使用的。因为它比数据库少了SQL解析、磁转载 2015-07-22 14:59:57 · 606 阅读 · 0 评论 -
jemalloc和内存管里
netty的buffer引入了缓冲池。该缓冲池实现使用了jemalloc的思想。为了看懂这块代码学写了内容分配的知识。这里讲的内存分配是堆的内存分配,其他内容本文不会涉及。 内存分配是面向虚拟内存的而言的,以页为单位进行管理的,页的大小一般为4kb,当在堆里创建一个对象时(小于4kb),会分配一个页,当再次创建一个对象时会判断该页剩余大小是否够,够的话使用该页剩余的内存,减少系统调用。真实转载 2015-07-22 14:42:37 · 2030 阅读 · 0 评论 -
nginx limit_req限速设置
WIKI:http://wiki.nginx.org/HttpLimitReqModule漏桶原理(leaky bucket):http://en.wikipedia.org/wiki/Leaky_bucket实例:#以用户二进制IP地址,定义三个漏桶,滴落速率1-3req/sec,桶空间1m,1M能保持大约16000个(IP)状态limit_req_zone转载 2015-08-03 14:11:09 · 867 阅读 · 0 评论 -
linux sysctl.conf中相关重要设定的详细说明
$ /proc/sys/net/core/wmem_max最大socket写buffer,可参考的优化值:873200$ /proc/sys/net/core/rmem_max最大socket读buffer,可参考的优化值:873200$ /proc/sys/net/ipv4/tcp_wmemTCP写buffer,可参考的优化值: 8192 436600 873200转载 2015-07-17 15:31:30 · 684 阅读 · 0 评论 -
Redis+Keepalived高可用方案详细分析
上一篇简单的了解了一下redis官方自带的HA方案sentinel,试用发现还是不错的,但是由于还没有合并进稳定分支中,所以在生产环境也不敢使用,还有一个就是需求还暂时不能完全满足,所以就尝试一下redis+keepalived方案,毕竟keepalived现在还是很稳定的,而且资料也充足。实验环境 ubuntu12.04 10.20.112.26 默认的master转载 2015-07-17 16:23:03 · 855 阅读 · 0 评论 -
Redis深入之内存回收和对象共享
内存回收C语言并不具备自动内存回收功能,Redis在自己的对象系统中构建了一个引用计数技术实现的内存回收机制,通过这一机制,程序可以通过跟踪对象的引用计数信息,在适当的时候自动释放对象并进行内存回收。每个对象的引用计数信息由redis对象结构的refcount属性记录,创建一个新对象时,引用计数值会初始化为1;对象被一个新程序使用时,它的引用计数值会被增1;不再被一个程序使用时,减1;引用转载 2015-07-30 10:48:40 · 1769 阅读 · 0 评论 -
redis内存管理代码注释
zmalloc.h[cpp] view plaincopy/* zmalloc - total amount of allocated memory aware version of malloc() * * Copyright (c) 2009-2010, Salvatore Sanfilippo * All right转载 2015-07-30 11:19:31 · 613 阅读 · 0 评论 -
Redis源码分析(二十五)--- zmalloc内存分配实现
时间过的很快,经过快1个月的时间学习,本人对Redis源代码的分析已经超过了一半,上几次的学习,我主要的是对于Redis工具类的代码进行了学习。后面的几天我将会学习Redis代码中的一些封装类的实现,这些封装类在整个Redis系统中都可能普遍用到。比如说我马上要分析的在zmalloc的内存封装的实现。先抛开Redis的内存函数库不说,在纯粹的C语言中,内存分配的函数有malloc,free,rel转载 2015-07-30 11:18:55 · 585 阅读 · 0 评论 -
Redis的内存碎片
Redis默认使用jemalloc分配内存,根据fast'14的最佳论文的说法,当遇到变长key-value负载时,会出现碎片问题:内存利用率低,实际分配的内存比所需要的内存多。因此我用YCSB对Redis的内存进行了测试。实验的第1阶段:向Redis插入100万条记录,key为20字节,value为100字节,皆为定长,理论上的有效数据大约是120MB。阶段2:产生90万个update请转载 2015-07-21 10:49:20 · 3290 阅读 · 0 评论 -
redis删除数据后内存释放问题
这不是Redis本身的问题,Redis本身确实已经调用free释放这些内存。这应该是使用的底层C运行时的问题。就glibc来说,在分配大于128k的内存时使用mmap,而使用brk/sbrk在heap中分配小内存。通过mmap申请的内存在调用free后能马上返还给系统,而heap中的内存就不一定,除非释放的内存是heap中连续的大块。Redis本身没有内存管理机制,只有一个使用量的原创 2015-07-22 14:46:11 · 7162 阅读 · 0 评论 -
redis内存泄露问题
Memory allocationTo store user keys, Redis allocates at most as much memory as the maxmemory setting enables (however there are small extra allocations possible).The exact value can be set in the转载 2015-07-22 16:01:04 · 5047 阅读 · 0 评论 -
Ehcache 整合Spring 使用页面、对象缓存
Ehcache在很多项目中都出现过,用法也比较简单。一般的加些配置就可以了,而且Ehcache可以对页面、对象、数据进行缓存,同时支持集群/分布式缓存。如果整合Spring、Hibernate也非常的简单,Spring对Ehcache的支持也非常好。EHCache支持内存和磁盘的缓存,支持LRU、LFU和FIFO多种淘汰算法,支持分布式的Cache,可以作为Hibernate的缓存插件。同时它也能转载 2016-03-24 18:21:14 · 490 阅读 · 0 评论 -
MemCached介绍
Memcached是danga.com(运营LiveJournal的技术团队)开发的一套分布式内存对象缓存系统,用于在动态系统中减少数据库 负载,提升性能。特点协议简单基于libevent的事件处理内置内存存储方式memcached不互相通信的分布式Memcached处理的原子是每一个(key,value)对(以下简称kv对),key会通过一个hash算法转化成ha转载 2014-01-03 16:09:07 · 727 阅读 · 0 评论 -
Guava缓存器源码分析——LocalCache
上图为缓存器所涉及的大致类图,与缓存器配置相关的参数都封装进了CacheBuilder中,与缓存器载入数据相关的操作都封装进了CacheLoader中,并将CacheLoader设计为抽象类,数据载入方法由用户自己实现。因此,用户可以有两种方式来创建缓存器: 1、配置完参数后,直接创建 Cache build() build函数内部,通过调用new转载 2014-10-20 16:44:33 · 1107 阅读 · 0 评论 -
Guava缓存器源码分析——CacheBuilder
CacheBuilder作为LoadingCache 与 Cache实例的创建者,具有以下特征: 1、自动载入键值至缓存; 2、当缓存器溢出时,采用最近最少使用原则进行替换。 3、过期规则可基于最后读写时间。 4、设置键值引用级别。 5、元素移出通知。 6、缓存访问统计。转载 2014-10-20 16:34:23 · 855 阅读 · 0 评论 -
memcached协议
memcached协议旧版:http://code.sixapart.com/svn/memcached/trunk/server/doc/protocol.txt新版:https://github.com/memcached/memcached/blob/master/doc/protocol.txt一、协议 memcached的客户端使用TCP连接转载 2015-01-30 16:18:39 · 703 阅读 · 0 评论 -
Apache Tomcat 5.5
转载:http://www.iteedu.com/webtech/j2ee/tomcat/tomcatcn/ssl-howto.php转载 2015-02-02 15:13:41 · 551 阅读 · 0 评论 -
使用Simple-Spring-Memcached注解做缓存操作
之前自己写过一个通过注解和AOP来实现缓存的代码,当时这段代码写得比较简单,之后重构时发现之前的功能实现有很大的局限。主要问题在于:key的生成规则update 与 query 的参数不一样,如何让其生成一样的key列表缓存如何定义key及失效最近同事推荐了一个开源项目:Simple-Spring-Memcached,它也是一个通过Annatation与AOP来完成缓存数据操作的开转载 2015-01-15 17:50:00 · 998 阅读 · 0 评论 -
memcached集群负载均衡
memcached是针对数据库的缓存软件 能有效降低数据库的负载下面是何如将多个memcached做成集群负载均衡,让memcached变的更高可用一、安装步骤:1、编译安装libevent:1234tar zxvf libevent-1.4.9-stable.tar.gzcd libevent-1.4.9-stable/./conf转载 2015-01-15 17:51:25 · 646 阅读 · 0 评论 -
超简单使用MemCached
阅读本文的前提是,你已经安装或者使用了MemCached,或具有相关的基本知识。今天要介绍的是Simple-Spring-Memcached,它封装了对MemCached的调用,使MemCached的客户端开发变得超乎寻常的简单,只要一行代码就行:@ReadThroughAssignCache(assignedKey = "VETS", expiration = 300, name转载 2015-01-15 17:37:56 · 617 阅读 · 0 评论 -
[原]nginx折腾记(HTTP性能能测试,与Apache对比)
话说nginx在大压力的环境中比apache的表现要好,于是下载了一个来折腾一下。下载并编译安装,我的编译过程有点特别:1。去除调试信息,修改$nginx_setup_path/auto/cc/gcc这个文件,将 CFLAGS="$CFLAGS -g" 这一行注释掉。2。由于仅测试WEB服务器的性能,所以不安装FastCGI。12转载 2015-03-31 13:59:20 · 903 阅读 · 0 评论 -
linux下memcached的启动/结束的方式
当前项目中,linux下memcached的启动/结束的方式默认情况下memcached安装到/usr/local/bin下。进入安装目录,启动memcached:/usr/local/memcached/bin/memcached -d -c 10240 -m 1024 -u root获取运行状态:echo stats | nc localhost 11211(可原创 2014-10-27 09:51:40 · 589 阅读 · 0 评论 -
Tokyo Tyrant(TTServer)介绍和安装 以及配置
Tokyo Cabinet 是日本人Mikio Hirabayashi 开发的一款DBM 数据库,该数据库读写非常快,哈希模式写入100 万条数据只需0.643 秒,读取100 万条数据只需0.773 秒,是Berkeley DB 等DBM 的几倍。Tokyo Tyrant 是由同一作者开发的Tokyo Cabinet 数据库网络接口。它拥有Memcached兼容协议,也可以通过HTTP 协议转载 2014-08-25 16:42:52 · 1338 阅读 · 0 评论 -
分布式session
与分布式缓存在高并发和高可用下所要解决问题差不多。一.图示: 二.高并发下分布式Session需解决的问题:透明处理存储介质的故障转移动态增删节点,减小“缓存颠簸”问题保证数据在各个节点的分布均衡Session 序列化和反序列化 三.保证“基本可用 Basically Available”的分布式Session方案:Eric A. Brewer 在 19转载 2014-08-22 09:34:09 · 1192 阅读 · 0 评论 -
IO开销简单展示
IO开销 花费cpu时钟周期cpu cache L1 3cpu cache L2 14 ram 250 disk 41000000 net 240000000结论: disk是net 6倍原创 2014-06-17 09:30:30 · 2144 阅读 · 0 评论