您现在的位置:首页 --> 查看专题: Redis
Redis 是一个性能非常高效的内存 Key-Value 存储服务, 同时它还具有两个非常重要的特性: 1. 持久化; 2. Value 数据结构. 这两个特性让它在不少场景轻松击败了 Memcached 和 Casandra 等. Redis 的持久化在两种方式: Snapshotting(快照) 和 Append-only file(aof). 在一个采用了 aof 模式的 Redis 服务器上, 当执行 bgrewriteaof 对 aof 进行归并优化时, 出现了 Redis 被阻塞的问题, 此时, Redis 无法提供任何读取和写入操作. 按字面理解, bgrewriteaof 是在后台进行操作, 不应该影响 Redis 的正常服务. 原理也确实是这样的, Redis 首先 fork 一个子进程, 并在该子进程里进行归并和写持久化存储设备(如硬盘)的.
最近忙着用Redis实现一个消息通知系统,今天大概总结了一下技术细节,其中演示代码如果没有特殊说明,使用的都是PhpRedis扩展来实现的。
从Redis官方路线图来看,估计会在Redis3.0左右正式支持Cluster。不过即便是乐观的估计,至少也得等上个把月的时间,为了让我的应用在这段时间内能保持高可用性,我以主从服务器为基础实现了一个Failover过渡方案。 从理论上解释,一旦主服务器下线,可以在从服务器里挑选出新的主服务器,同时重新设置主从关系,并且当下线服务器重新上线后能自动加入到主从关系中去,内容如下:
网上大家都在流传 如何更好的实现一个 12306 ,作为一个技术人员,碰到如此难得的机会,忍不住也想跟着忽悠一把。 纯粹从技术角度出发,来设计一个架构和实现方案是非常容易的。但我相信,真实的 12306 的架构师,需要考虑的不仅仅是技术实现,还有数不清的历史包袱,现实约束,甚至人为限制。所以,这里的描述,只是技术人员关起们来,自己的 YY ,大家姑且看看就行,别太当真。 12306 当前的问题,无非是僧多粥少加定时放票引起...
Strings Strings 数据结构是简单的key-value类型,value其实不仅是String,也可以是数字。使用Strings类型,你可以完全实现目前 Memcached 的功能,并且效率更高。还可以享受Redis的定时持久化,操作日志及 Replication等功能。除了提供与 Memcached 一样的get、set、incr、decr 等操作外,Redis还提供了下面一些操作:... [[ This is a content summary only. Visit my website for full links, other content, and more! ]] ...
一直有打算写篇关于redis源代码分析的文章,一直很忙,还好最近公司终于闲了一点,总算有点时间学习了,于是终于可以兑现承诺了,废话就到此吧,开始我们的源代码分析,在文章的开头我们把所有服务端文件列出来,并且标示出其作用: adlist.c //双向链表 ae.c //事件驱动 ae_epoll.c //epoll接口, linux用 ae_kqueue.c //kqueue接口, freebsd用 ae_select.c //select接口, windows用 anet.c //网络处理 aof.c //处理AO...
本文按照作者自己的理解对比了一下 tt server 和 redis 这两个产品从线程模型,存储方式,持久化,性能等进行了一些比较,得出一些启发,个人之言,希望能帮助更多人理解 tt server 和 redis 这两个产品。
redis是个内存全集的kv数据库,不存在部分数据在磁盘部分数据在内存里的情况,所以提前预估和节约内存非常重要.本文将以最常用的string和zipmap两类数据结构在jemalloc内存分配器下的内存容量预估和节约内存的方法. 先说说jemalloc,传说中解决firefox内存问题freebsd的默认malloc分配器,area,thread-cache功能和tmalloc非常的相识.在2.4版本被redis引入,在antirez的博文中提到内节约30%的内存使用.相比glibc的malloc需要在每个内存外...
丰富的数据结构使得redis的设计非常的有趣。不像关系型数据库那样,DEV和DBA需要深度沟通,review每行sql语句,也不像memcached那样,不需要DBA的参与。redis的DBA需要熟悉数据结构,并能了解使用场景。 下面举一些常见适合kv数据库的例子来谈谈键值的设计,并与关系型数据库做一个对比,发现关系型的不足之处。 用户登录系统 记录用户登录信息的一个系统, 我们简化业务后只留下一张表。
我们跟踪一个普通的get命令来遍历几个关键函数,熟悉协议处理的过程。 你可以通过telnet或者redis_cli、利用lib库发送请求给redis server。前者的是一种裸协议的请求发送到服务端,而后两者会对键入的请求进行协议组装帮助更好的解析(常见的是长度放到前头,还有添加阿协议类型)。 Requests格式 *参数的个数 CRLF $第一个参数的长度CRLF 第一个参数CRLF ... $第N个参数的长度CRLF 第N个参数CRLF 例如在redis_cli里键入get a,经...
Tumblr是世界上最流行的轻博客服务,其用户量在最近的一次统计中已经达到2090万,超过了全球最大的博客服务WordPress。而我们今天要介绍的是Tumblr通知系统的架构,其通知系统由一个叫Staircar的轻量级HTTP服务器和其下层的大规模Redis集群组成。
TCMalloc(Thread-Caching Malloc)是google开发的开源工具──“google-perftools”中的成员。与标准的glibc库的malloc相比,TCMalloc在内存的分配上效率和速度要高得多,可以在很大程度上提高MySQL服务器在高并发情况下的性能,降低系统负载。
redis的复制方法和机制都比较简单。 slaveof masterip port 在slave端键入命令之后,就开启了从master到slave的复制。一个master可以有多个slave,master有变化的时候会主动的把命令传播给每个slave。slave同时可以作为其他的slave的master,前提条件是这个slave已经处于稳定状态(REDIS_REPL_CONNECTED)。slave在复制的开始阶段处于阻塞状态(sync_readline)无法对外提供服务。 数据的有向图会让redis的运维很有搞头。
redis有全量(save/bgsave)和增量(aof)的持久化命令。 全量的原理就是遍历里所有的DB,在每个bucket,读取链表的key和value并写入dump.rdb文件(rdb.c 405)。 save命令直接调度rdbSave函数,这会阻塞主线程的工作,通常我们使用bgsave。 bgsave命令调度rdbSaveBackground函数启动了一个子进程然后调度了rdbSave函数,子进程的退出状态由 serverCron的backgroundSaveDoneHandler来判断,这个在复制这篇文章里讲到过,这里就不罗...
每个cs程序尤其是高并发的网络服务端程序都有自己的网络异步事件处理库,redis不例外。 事件库仅仅包括ae.c、ae.h,还有3个不同的多路复用(本文仅描述epoll)的wrapper文件,事件库封装了框架调用的主循环函数,暴露了时间、文件事件注册和销毁函数,典型的依赖反转模式。 网络操作都在networking.c里,封装了常见的socket操作。 我们从redis启动的main函数开始,从用户发出连接键入命令开始遍历网络事件库所涉及的函数,unix套接...
hashtable的实现有很多,redis的dict.c 是其中之一。 dict 包含了2个dictht hashtable ht[0], ht[1]。 client版本的dict是没有dictht的概念。加入dictht的概念存在2个ht的目的是为了在rehash的时候可以平滑的迁移bucket里的数据,而不像client的dict要把老的hash table里的一次性的全部数据迁移到新的hash table,这在造成一个密集型的操作,在业务高峰期不可取。 ht是hashtable的简称,实际上是一个指针数组,数组的个数由dictht-...
毫无疑问,Redis开创了一种新的数据存储思路,使用Redis,我们不用在面对功能单调的数据库时,把精力放在如何把大象放进冰箱这样的问题上,而是利用Redis灵活多变的数据结构和数据操作,为不同的大象构建不同的冰箱。希望你喜欢这个比喻。
最近在线上实际使用了一些redis服务,总结下运维的相关知识.1:redis的生产机主要为2颗Cpu,8个核心,内存32G,单盘700G的Sata盘.2:存储的数据为博客系统的积分数据.积分代表是用户的发文章积分,发评论积分,登录积分,特点即每天单个用户相关数据至多增加一次,是一个典型的读多写少系统.虽然在这个项目中将redis作为内存系统使用,本质上是落地存储.3:redis版本为2.2.5,使用Hashes存储类型.原先积分系统的后端为memcachedb,对比应用...
Social Graph 高速接口,当前我们使用 Redis 存储。但在实现的过程中,发现了诸多的问题。 48G 内存的机器上部署了 2 个 Redis 进程,一个 Redis 占用超过 21 G 内存后,在快速写入的过程中同时进行一次 bgsave ,就将机器给弄挂了(微博上的直播)。我们对 Redis 的监控远不如对 Mysql 之类的完善,以至于 Redis 机器假死,居然没有触发任何的报警。 在经过几天的 debug 后,终于找到了问题所在,复杂的上线流程:源码 svn 合 tru...
近3天十大热文
- [42] 界面设计速成
- [36] Oracle MTS模式下 进程地址与会话信
- [34] 视觉调整-设计师 vs. 逻辑
- [32] 如何拿下简短的域名
- [32] IOS安全–浅谈关于IOS加固的几种方法
- [31] 图书馆的世界纪录
- [31] 程序员技术练级攻略
- [30] 【社会化设计】自我(self)部分――欢迎区
- [29] android 开发入门
- [27] 读书笔记-壹百度:百度十年千倍的29条法则
赞助商广告