Redis
文章平均质量分 72
Redis应用
带鱼兄
爱在新空气,快乐每一天
展开
-
twemproxy安装与简单应用
twemproxy可用于redis分片代理。github:https://github.com/twitter/twemproxy1、从github下载源码包,安装:cd twemproxyautoreconf -fvi./configuremakesudo make install2、查看帮助手册:nutcracker -v原创 2017-08-01 23:21:04 · 1079 阅读 · 0 评论 -
redis3.0.7源码阅读(十三)main函数
版本:3.0.7源码:redis.c/* * main函数 */int main(int argc, char **argv) { struct timeval tv; /* We need to initialize our libraries, and the server configuration. */ // 初始化库#ifdef原创 2017-01-08 21:32:54 · 1138 阅读 · 0 评论 -
redis3.0.7源码阅读(十二)redis事件处理
版本:3.0.71.源码ae.hae.cae_epoll.cae_evport.cae_kqueue.cae_select.c2.数据结构/* * 文件事件结构 *//* File event structure */typedef struct aeFileEvent { // 监听事件类型掩码 int mask;原创 2017-01-08 21:18:23 · 502 阅读 · 0 评论 -
redis3.0.7源码阅读(十一)redis数据库rdb
版本:3.0.71.源码rdb.hrdb.c2.文件结构大写字母:常量小写字母:变量下图展示了含有两个非空db 0 1的持久化文件的结构3.一些特性3.1 rdb文件会将过期时间同时记录原文出自:End;原创 2017-01-08 21:13:57 · 374 阅读 · 0 评论 -
redis3.0.7源码阅读(十)redis数据库
版本:3.0.71.源文件redis.hdb.c2.数据结构/** 客户端*/typedef struct redisClient {...// 当时连接使用的数据库redisDb *db;...} redisClient;/** 服务器*/struct redisServer原创 2017-01-08 20:49:29 · 416 阅读 · 0 评论 -
redis3.0.7源码阅读(九)redis对象
版本:3.0.71.源文件redis.hobject.ct_hash.ct_list.ct_set.ct_string.ct_zset.c2.数据结构redis使用对象来表示数据库中的键和值(k/v),每创建一个键值对时,至少会创建两个对象,分别用于k/v,redis的键(k)总是字符串,值(v)则可以是字符串对象/列表对象/集合对象/有原创 2017-01-08 20:47:13 · 387 阅读 · 0 评论 -
redis3.0.7源码阅读(八)redis压缩表
版本:3.0.71.源文件ziplist.hziplist.c2.博主没看懂,占个坑先原创 2017-01-08 20:45:42 · 346 阅读 · 0 评论 -
redis3.0.7源码阅读(七)redis跳跃表
版本:3.0.71.源文件redis.ht_zset.c2.跳跃表数据结构/** 跳跃表节点*//* ZSETs use a specialized version of Skiplists */typedef struct zskiplistNode {// 成员对象robj *obj;// 分值double原创 2017-01-08 20:42:05 · 331 阅读 · 0 评论 -
redis3.0.7源码阅读(五)redis字典
版本:3.0.71.源文件dict.hdict.c2.字典数据结构/** 哈希表节点*/typedef struct dictEntry {// 键void *key;// 值union {void *val;uint64_t u64;int64_t s64;double d;} v;// 下一原创 2017-01-08 20:31:01 · 359 阅读 · 0 评论 -
redis3.0.7源码阅读(四)redis双端链表
版本:3.0.71.源文件adlist.hadlist.c2.双端链表数据结构/** 双端链表节点*/typedef struct listNode {// 前节点struct listNode *prev;// 后节点struct listNode *next;// 节点值void *value;} list原创 2017-01-08 20:27:44 · 346 阅读 · 0 评论 -
redis3.0.7源码阅读(三)redis动态字符串
版本:3.0.71.源文件sds.hsds.c2.动态字符串数据结构/** 类型别名*/typedef char *sds;/** 保存字符串对象的结构*/struct sdshdr {//buf已用长度unsigned int len;//buf剩余长度unsigned int free;原创 2017-01-08 20:25:16 · 428 阅读 · 0 评论 -
redis3.0.7源码阅读(二)源码文件归类
版本:3.0.7目录:src#1.数据结构sds.h #SDS数据结构实现sds.c #SDS数据结构实现adlist.h #双端链表实现adlist.c #双端链表实现dict.h #字典实现dict.c #字典实现#2.内存编码数据结构inset.h #整数集合实现inset.c #整数集合实现zi原创 2017-01-08 20:21:57 · 396 阅读 · 0 评论 -
redis3.0.7源码阅读(一)源码文件
版本:redis 3.0.7目录:src.gitignore #adlist.h #双端链表实现adlist.c #双端链表实现ae.h #事件处理器ae.c #事件处理器ae_epoll.c #事件处理器ae_evport.c #事件处理器ae_kqueue.c #事件处理器ae_select.c #事件处理器anet.h #异步网络框原创 2017-01-08 20:19:47 · 536 阅读 · 0 评论 -
关于redis的单线程与后台线程的源码分析
前言:通常大家都会说redis是单线程的,这个理解其实也没错。redis的命令处理基本上都是单线程处理的,除了个别任务会fork子进程进行处理。其实redis是个多线程进程,如下图:redis的另外两个线程的作用是什么?另外两个线程用于一些异步操作,通过条件变量控制任务,主要用于close(2),fsync(2)的操作,因为close(2)一个文件句原创 2016-12-28 12:40:22 · 1933 阅读 · 3 评论 -
redis3.0 INFO命令详解
官网:https://redis.io/commands/infoinfo all表示列出所有项,否则只列出默认项127.0.0.1:6379>info all# Server(服务器信息)redis_version:3.0.6 #版本redis_git_sha1:00000000 #git sha1redis_git_dirty:0 #git dirty原创 2016-12-23 23:09:26 · 1055 阅读 · 0 评论 -
redis和memcached的区别
最近发现一些误导性的文章,文章还是2016年发表的摘文:在Redis中,并不是所有的数据都一直存储在内存中的。这是和Memcached相比一个最大的区别。当物理内存用完时,Redis可以将一些很久没用到的value交换到磁盘。Redis只会缓存所有的key的信息,如果Redis发现内存的使用量超过了某一个阀值,将触发swap的操作,Redis根据“swappability =原创 2016-12-21 14:51:22 · 904 阅读 · 0 评论 -
redis集群故障分析
故障表象:业务层面显示提示查询redis失败集群组成:3主3从,每个节点的数据有8GB机器分布:在同一个机架中,xx.x.xxx.199xx.x.xxx.200xx.x.xxx.301redis-server进程状态:通过命令ps -eo pid,lstart | grep $pid,发现进程已经持续运行了3个月发生故原创 2016-09-10 20:06:23 · 17744 阅读 · 2 评论 -
优酷蓝鲸近千节点的Redis集群运维经验总结
Redis是时下比较流行的Nosql技术。在优酷我们使用Redis Cluster构建了一套内存存储系统,项目代号蓝鲸。到目前为止集群有700+节点,即将达到作者推荐的最大集群规模1000节点。集群从Redis Cluster发布不久就开始运行,到现在已经将近两年时间。在运维集群过程中遇到了很多问题,记录下来希望对他人有所帮助。主从重同步问题问题描述服务器宕机并恢复后,需要转载 2016-08-26 09:44:53 · 2135 阅读 · 0 评论 -
基于Redis实现分布式锁
分布式锁的基本功能:1.同一时刻只能存在一个锁2.需要解决意外死锁问题,也就是锁能超时自动释放3.支持主动释放锁分布式锁解决什么问题:多进程并发执行任务时,需要保证任务的有序性或者唯一性准备:redis版本>=2.6redis是主从+sentinel模式原理:redis2.6之后,SET命令支持超时和key存在检查,这是一个原子操作获取锁原创 2016-06-26 00:09:18 · 7266 阅读 · 6 评论 -
使用redis设计幂等接口
幂等:幂等性是系统的接口对外一种承诺(而不是实现), 承诺只要调用接口成功, 外部多次调用对系统的影响是一致的. 声明为幂等的接口会认为外部调用失败是常态, 并且失败之后必然会有重试举个例子:有一个订单系统,对外提供了一个处理接口,如果有个订单001是要扣除用户的100块钱,那么订单001被多次调用,也只会处理成功一次,也就是只会扣除用户100块。订单的状态:原创 2016-06-25 19:17:26 · 7885 阅读 · 0 评论 -
redis集群设置密码
注意事项:1.如果是使用redis-trib.rb工具构建集群,集群构建完成前不要配置密码,集群构建完毕再通过config set + config rewrite命令逐个机器设置密码2.如果对集群设置密码,那么requirepass和masterauth都需要设置,否则发生主从切换时,就会遇到授权问题,可以模拟并观察日志3.各个节点的密码都必须一致,否则Redirected就会失败原创 2016-06-14 19:40:20 · 24521 阅读 · 6 评论 -
redis集群删除节点
导读:a) 建议仔细阅读官方文档:http://redis.io/topics/cluster-tutorialb) 删除节点的原理比较简单,就是把slot移走,下线节点c) 此文利用redis-trib.rb进行集群缩容,不涉及原理步骤:1.假设已经存在集群,该集群包含四个主节点(8000/8001/8002/8006),四个从原创 2016-06-03 16:57:29 · 1836 阅读 · 0 评论 -
redis集群扩容
导读:a) 此文不介绍集群的部署b) 扩容有两种方式,一种是纵向扩容:修改maxmemory,一种是横向扩容:增加节点,这里只介绍横向扩容c) 此文利用redis-trib.rb进行集群扩容,不涉及扩容的原理d) 建议仔细阅读官方文档:http://redis.io/topics/cluster-tutorial步骤:1.假设已经存在集群,该集群包含三个主节点(80原创 2016-06-03 16:27:50 · 2431 阅读 · 0 评论 -
redis3.0配置调优
导读:a) 此文针对使用过redis或者正要使用redis的读者b) redis单实例部署忽略主从复制和集群部分################################ GENERAL(常规) #####################################a) daemonize no 建议启用守护模式模式:daemonize yesb) p原创 2016-06-03 15:50:15 · 2718 阅读 · 0 评论 -
redis的常规部署模型
基本概念:master:主节点slave:从节点sentinel:哨兵,用于故障转移模式一:单实例模式二:一主一从模式三:一主多从模式四:多主多从模式五:集群原创 2016-06-01 10:23:41 · 1109 阅读 · 0 评论 -
redis全量复制和部分复制简介
基本概念:全量复制和部分复制都是围绕着redis主从复制展开讨论,这里不讨论概念性的理论,只讨论大家比较关心的几个点。有兴趣深入研究的同学,可以参考a) 官网http://redis.io/topics/replicationb) 浅析redis复制1. redis什么时候会发生全量复制?a) redis首启动或者重启后,连接到master时b) r原创 2016-05-30 22:25:20 · 5125 阅读 · 8 评论 -
浅析Redis复制
摘要早期的 RDBMS 被设计为运行在单个CPU之上,读写操作都由经单个数据库实例完成,复制技术使得数据库的读写操作可以分散在运行于不同CPU之上的独立服务器上.Redis作为一个开源的、优秀的key-value缓存及持久化存储解决方案,也提供了复制功能,本文主要介绍Redis的复制原理及特性。Redis复制概论数据库复制指的是发生在不同数据库实例之间,单向的信息传播的行为,通常由转载 2016-05-30 21:55:07 · 1833 阅读 · 0 评论 -
redis3.0配置翻译
# Redis configuration file example.# 如果需要指定配置文件路径,需要在第1个参数指定配置文件路径# Note that in order to read the configuration file, Redis must be# started with the file path as first argument:## ./redis-serve原创 2016-05-19 18:05:33 · 1495 阅读 · 0 评论 -
redis的 rdb 和 aof 持久化的区别
aof,rdb是两种 redis持久化的机制。用于crash后,redis的恢复。rdb的特性如下:Code: fork一个进程,遍历hash table,利用copy on write,把整个db dump保存下来。save, shutdown, slave 命令会触发这个操作。粒度比较大,如果save, shutdown, slave 之前crash了,则中间的操作没办法恢转载 2016-05-16 00:16:49 · 1100 阅读 · 0 评论 -
使用Redis作为LRU缓存
如果你使用redis作为缓存,当添加新数据时,若有内存大小等限制,系统默认会根据一定的规则自动清理旧数据。这种处理方式在开发社区中众所周知,因为它也是非常流行的缓存系统 memcached 的默认处理方式。LRU(LRU全称是Least Recently Used,即最近最久未使用)实际上只是Redis支持转载 2015-12-11 10:23:09 · 1051 阅读 · 0 评论