
Redis
遇星
我想成为我自己
展开
-
Redis cluster 基于从库自动failover两轮投票的源码修改
目录一、修改源码二、测试环境三、测试结果可以通过从库广播避免二轮投票四、切换过程五、各节点完整日志一、修改源码通过前面分析,从库自动failover需要两轮投票的根本原因是,从库认为主库客观下线时,并不广播,无法通知负责投票的存活主库也修改挂掉主库的flgas。各个节点为一个主库所维护的clusterNode->flags是相互独立的。本文测试目的,是通过修改源码,在从库认为主库客观下线时,也将fail信息广播给其他节点,正常网络情况下可以认为其他节点可以同时收到广原创 2020-06-13 17:59:31 · 866 阅读 · 0 评论 -
Redis cluster gossip
目录一、通信节点选择1.每0.1秒,如果发现有其他节点连不上,则尝试重连2.每1秒,从5个随机节点中,选出一个其中最久没有通信的节点,进行ping3.每0.1秒,如果发现有超过cluster-node-time/2没有通信成功的节点,则向这个节点发送ping二、gossip ping 所发送的信息1.节点自身的信息2.附带1/10的其他节点信息,如果1/10少于3,那么至少附带3个其他节点的信息一、通信节点选择通过clusterCron() /* This i...原创 2020-06-13 17:48:34 · 821 阅读 · 0 评论 -
Redis cluster 从库自动failover需要两轮投票的分析
从库自动failover,有三种情况1.由存活的主节点判断挂掉的主节点为客观下线(fail),即其他主节点抢先收集够了pfail数,然后广播fail信息到从库,从库clusterCron检查到挂掉主库的fail并发起投票时,其他主节点会正常投票从库的日志是:76803:S 09 Jun 12:21:09.240 * FAIL message received from bb7664a96fc83d3f31c2649ec37894a4944ed38b about 64cdc10096644b5bc362原创 2020-06-13 17:42:22 · 1054 阅读 · 0 评论 -
Redis cluster 从库自动failover机制
目录一、每个节点维护的信息二、故障发现(主观下线)三、客观下线1.下线报告链表2.pfail到fail的转变四、从库通过clusterCron发起自动切换五、主库投票六、从库执行切换七、纪元更新一、每个节点维护的信息每个节点内的clusterState结构保存集群信息,从库自身视角所维护的一些信息。结构关键属性如下:在cluster.h文件中:typedef struct clusterState {clusterNode *myself; .原创 2020-06-13 17:31:39 · 2074 阅读 · 0 评论 -
Redis 免阻塞删除大list
vi delete_list.sh#!/bin/bash#循环删除listlist_len=redis-cli -p 6379 llen key_namewhile true;doif [ $list_len -ge 3000 ];thenredis-cli -p 6379 ltrim key_name 0 -3000sleep 0.5list_len=redis-cli -p ...原创 2020-03-31 15:37:35 · 667 阅读 · 0 评论 -
redis-trib.rb 关于ruby的一些问题
/usr/bin/env: ruby: No such file or directory原因是没安装ruby下意识的解决方法就是yum install ruby -ygem install redis但是也会遇到报错:ERROR: Error installing redis: redis requires Ruby version >= 2.3.0.这是因为ce...原创 2020-01-07 11:19:24 · 740 阅读 · 0 评论 -
Redis 指定目录安装
一般Redis的安装方式:tar -zxvf redis-4.0.14.tar.gzcd redis-4.0.14makemake install这种源码编译方式默认是将Redis安装至/usr/lcoal/bin目录下,如果想要自定义安装目录,例如想要将Redis安装在/usr/local/redis目录下,可以将make install替换成:make PREFIX=/usr/l...原创 2019-12-13 10:31:17 · 5777 阅读 · 1 评论 -
Redis 从库对于键过期的处理,源码
我们都知道对于单实例或者主库实例中,带有过期属性的键,在过期后会有主动删除和惰性删除两种策略来处理。但是在从库,键过期以后,也会采用同样的方式来处理吗?先看一下官方的解释:How expires are handled in the replication link and AOF fileIn order to obtain a correct behavior without sacri...原创 2019-12-11 10:41:24 · 945 阅读 · 0 评论 -
Redis 键过期处理策略
Redis可以给一个key设置过期时间,当key过期以后,并不会马上自动释放。Redis对于过期键的处理,分为被动删除和主动删除两种方式。1.被动删除当客户端访问到一个已经过期的键但尚未删除,Redis就会主动把它删除。2.主动删除Redis每秒会循环10次以下操作:随机抽取20个具有过期时间的键;删除其中已经过期的键;如果这次操作删除了超过5个过期键,则马上再做一次循环。Red...原创 2019-10-12 16:26:29 · 324 阅读 · 0 评论 -
Redis 内存回收策略
Redis可以通过maxmemory设置最大可用内存,如果数据量已经达到maxmemory的限制,不加大maxmemory,就必须将现有数据所占有的一部分内存回收,才能响应写入请求。当数据量达到maxmemory上限,对于内存回收,Redis有几种不同的策略。1.noeviction新写入请求会报错Redis不主动回收内存空间,新写入请求会报错2.allkeys-lru针对当前所有数据,...原创 2019-10-12 15:53:11 · 280 阅读 · 0 评论 -
Redis set类型键相关命令整理
1.SADDSADD key member [member ...]将member元素加入集合key,可以一次加入多个元素,已存在集合的元素就会忽略。假如 key 不存在,则创建一个只包含 member 元素作成员的集合。返回被添加到集合中的新元素的数量,不包括被忽略的元素。当 key 不是集合类型时,返回一个错误。2.SREMSREM key member [member ...]...原创 2019-04-30 10:11:36 · 310 阅读 · 0 评论 -
Redis sortedset类型键相关命令整理
1.ZADDZADD key score member [[score member] [score member] ...]向有序集key插入一个或多个member元素及score分值。如果member元素已存在key里,则用score更新member元素的分值,并重新插入member元素,使得该元素在有序集中的正确位置上。score值可以是整数或双精度浮点数。如果key不存在,则创建...原创 2019-05-05 17:26:01 · 204 阅读 · 0 评论 -
Redis list类型键相关命令整理
1.LPUSHLPUSH key value [value ...]在列表key的表头依次插入值,可以依次插入多个,例如LPUSH sam-list a b c,得到的列表值为c,b,a。如果 key 不存在,一个空列表会被创建并执行LPUSH 操作。当 key 存在但不是列表类型时,返回一个错误。执行LPUSH 命令后,返回列表的长度。2.LPUSHXLPUSHX key valu...原创 2019-04-29 14:30:02 · 213 阅读 · 0 评论 -
Redis hash类型键相关命令整理
1.HSETHSET key field value将哈希表key的域field设置为value;如果不存在则创建,返回1;如果已存在则覆盖,返回0;127.0.0.1:6379[1]> hset sam-hash sam good(integer) 1127.0.0.1:6379[1]> hset sam-hash sam "good man"(integer) 0...原创 2019-04-29 10:20:34 · 660 阅读 · 0 评论 -
Redis string类型键相关命令整理
字符串类型既可以存储字符,也可以存储数字。可以通过type命令返回string,表示是字符串类型。127.0.0.1:6379> set sam goodOK127.0.0.1:6379> type samstring127.0.0.1:6379> set tom 1OK127.0.0.1:6379> type tomstring以下介绍string类型...原创 2019-04-28 16:48:20 · 181 阅读 · 0 评论 -
Redis5.0.2安装
1.安装$ wget http://download.redis.io/releases/redis-5.0.2.tar.gz$ tar xzf redis-5.0.2.tar.gz$ cd redis-5.0.2$ make$make install2.启动实例[root@redis redis]# redis-server &[1] 6626[root@redis ...原创 2018-12-06 14:14:11 · 875 阅读 · 0 评论 -
Redis 复制及sentinel搭建
采用的架构是1主2从3sentinel。1.redis实例配置文件主:[root@redis conf]# cat redism.conf port 6379daemonize yeslogfile "/usr/local/conf/6379.log"dbfilename "data6379.rdb"dir "/usr/local/conf/&am原创 2018-12-07 18:35:49 · 146 阅读 · 0 评论