redis
文章平均质量分 88
newbei5862
一切皆函数,一切皆方程,世上每一个思想和灵魂都是拟合出来的。
展开
-
Redis主节点的Key已过期,但从节点依然读到过期数据....
我们知道,大部分的业务场景都是读多写少,为了利用好这个特性,提升Redis集群系统的吞吐能力,通常会采用主从架构、读写分离如上图所示:其中Master节点:负责业务的写操作Slave节点:实时同步Master节点的数据,提供读能力为了提高吞吐量,采用一主多从的架构,将业务的读压力分摊到多台服务器上一、拉取过期数据Redis性能高主要得益于纯内存操作,但内存存储介质的成本过高,所以数据的存储有一定的约束。通常会设置过期时间,对于一些使用不是很频繁的数据,会定期删除,提高资源的利用率。删除转载 2021-11-13 21:08:52 · 364 阅读 · 0 评论 -
一致性Hash原理与实现
前言互联网公司中,绝大部分都没有马爸爸系列的公司那样财大气粗,他们即没有强劲的服务器、也没有钱去购买昂贵的海量数据库。那他们是怎么应对大数据量高并发的业务场景的呢?这个和当前的开源技术、海量数据架构都有着不可分割的关系。比如通过mysql、nginx等开源软件,通过架构和低成本的服务器搭建千万级别的用户访问系统。怎么样搭建一个好的系统架构,这个话题我们能聊上个七天七夜。这里我主要结合Redis集群来讲一下一致性Hash的相关问题。Redis集群的使用我们在使用Redis的过程中,为了保证Re转载 2020-11-17 00:12:34 · 104 阅读 · 0 评论 -
图解Gossip:可能是最有趣的一致性协议
Gossip是什么Gossip协议是一个通信协议,一种传播消息的方式,灵感来自于:瘟疫、社交网络等。使用Gossip协议的有:Redis Cluster、Consul、Apache Cassandra等。六度分隔理论说到社交网络,就不得不提著名的六度分隔理论。1967年,哈佛大学的心理学教授Stanley Milgram想要描绘一个连结人与社区的人际连系网。做过一次连锁信实验,结果发现了“六度分隔”现象。简单地说:“你和任何一个陌生人之间所间隔的人不会超过六个,也就是说,最多通过六个人你就能够认转载 2020-08-04 21:54:14 · 260 阅读 · 0 评论 -
Redis数据结构--跳跃表
前言#跳跃表是一种有序的数据结构,它通过在每个节点中维持多个指向其他节点的指针,从而达到快速访问节点的目的。这么说,我们可能很难理解,我们可以先回忆一下链表。一、复习跳跃表#1.1 什么是跳跃表#对于一个单链表来讲,即便链表中存储的数据是有序的,如果我们要想在其中查找某个数据,也只能从头到尾遍历链表。这样查找效率就会很低,时间复杂度会很高,是 O(n)。如果我们想要提高其查找效率,可以考虑在链表上建索引的方式。每两个结点提取一个结点到上一级,我们把抽出来的...转载 2020-08-01 07:50:40 · 117 阅读 · 0 评论 -
Redis中 Hash的原理
基本介绍Hash 也可以用来存储用户信息,和 String 不同的是 Hash 可以对用户信息的每个字段单独存储,String 则需要序列化用户的所有字段后存储.并且 String 需要以整个字符串的形式获取用户,而 hash可以只获取部分数据,从而节约网络流量.不过 hash内存占用要大于 String,这是 hash 的缺点.> hset books JAVA "Effective java"(integer) 1> hset books golang "concurrenc.转载 2020-07-26 20:02:28 · 655 阅读 · 0 评论 -
使用Visual Studio2013调试Redis源码
使用Visual Studio2013调试Redis源码Redis是一款C语言编写Key-Value存储系统,基于BSD协议开放源码,其源码托管在github上,大概有三万行。源码地址:https://github.com/microsoftarchive/redis注意:branch3.0 分支使用Visual Studio Community 的版本为2013版,笔者用VS2019打开编译有很多报错。msvs目录下为VS的工程文件,双击点击RedisServer.sln用VS打开。原创 2020-07-25 20:21:00 · 653 阅读 · 0 评论 -
redis源码分析(八):集群--cluster
edis源码分析(八):集群--clusterredis集群我们可以使用sentinel的模式(详情点击这里),这个模式有几个缺点1.sentinel是用来监控redis的,这个进程本该对客户端隐藏,但是sentinel模式下,master如果down了,某个slave成为master后,客户端无法感知,因此需要客户端还需要连接sentinel来获取master的地址。 2.sentinel部署方式本质还是一主多从的模式,master的压力比较大。redis官方还提供了另一种集群的方式 -- c转载 2020-07-12 23:47:02 · 180 阅读 · 0 评论 -
redis源码分析(七):集群--哨兵模式
redis在启动时,如果进程名是"redis-sentinel",或者参数中带了"--sentinel",这时redis便以哨兵的方式运行。一个sentinel可以监控多个master。sentinel的配置如下// 当前Sentinel节点监控 127.0.0.1:6379 这个主节点// 2代表判断主节点失败至少需要2个Sentinel节点节点同意// mymaster是主节点的别名sentinel monitor mymaster 127.0.0.1 6379 2//每个Se.转载 2020-07-12 23:45:36 · 220 阅读 · 0 评论 -
redis源码分析(六):主从复制
主从数据库配置用来降低单个redis的压力(主要是master的读压力)。通常的方案是master用做数据写入,slave用做数据读取。下面看看主从复制的功能是如何实现的,首先需要在slave服务上配置master的ip端口(slaveof host port),可选项数据库密码(masterauth)。也可以起一个客户端连接slave发送slaveof host port 命令,相应的取消命令是slaveof no one。一个slave接收到slaveof命令以后经历一下过程。 1.与原有转载 2020-07-12 23:44:04 · 309 阅读 · 0 评论 -
redis源码分析(五):数据持久化
redis 是基于内存读写的数据库,所有数据都存储在内存中,所以存储的数据大小受到了限制。但redis依然提供了固化功能,与mysql,leveldb等数据库不同的是,redis的存储功能只是用做备份,恢复的功能,全量数据还是存储在内存中。redis内部提供了两种固化数据的方式,aof 和rdb。1.aof数据写入aof全称appendOnlyFile,要让redis支持aof方式,需要将配置文件的appendonly配置为"yes",并配置appendfsync 为everysec/alwa转载 2020-07-12 23:43:36 · 243 阅读 · 2 评论 -
redis源码分析(四):数据读写相关操作
数据存储是一个数据库的核心功能,对于redis来说,最重要的任务是缓存,redis默认有16个数据库,首次连接使用的是db0,可以用select语句来选择其他编号的数据库和客户端绑定。存储格式redisDb的数据结构以及重要的成员变量结构如下:typedef struct redisDb { // 数据库键空间,保存着数据库中的所有键值对 dict *dict; /* The keyspace for this DB */ // 键的转载 2020-07-12 23:42:42 · 419 阅读 · 0 评论 -
redis源码分析(三):基本数据结构
redis中使用的数据结构有: dict 字典,就是个哈希表,实现和HashMap类似,不做阐述;不同的是在哈希表resize()的时候是分步执行的,后续篇幅再说明。 sds 很多项目都对自己的字符串进行了封装,作用类似于leveldb的slice。 linkedlist 双端链表,迭代器的实现是通过链表的pre和next实现的,是个BidirctionalIterator。代码中只实现了ForwardIterator的功能。 zipmap 已不再使用了 ins转载 2020-07-12 23:41:23 · 135 阅读 · 1 评论 -
redis源码分析(二):启动流程
redis是单线程运行的存储服务,所以启动流程相对是比较好分析的,直接main函数走下来就可以了。1.读取配置,redis的配置项来源有3种方式,(1)从配置文件里面读取,可以用 ./redis-server reds.conf 来读取redis的配置。(2)通过 --param value 的方式来配置单项属性。(3)如果在(1),(2)两种方式都没有配置的使用默认配置。常见的配置项作用如下:masterauth 如果master启用了密码,需要在slave上配置密码,才能连上mast.转载 2020-07-12 23:39:02 · 149 阅读 · 0 评论 -
redis源码分析(一):搭建调试环境
源码的获取方式就不说了,推荐一个带注释的3.x版本:https://github.com/huangz1990/redis-3.0-annotated拿到源码以后,可以看到其目录结构,JjdeMacBook-Pro:redis-3.0-annotated-unstable jjchen$ ls00-RELEASENOTES COPYING Makefile deps runtest-cluster srcBUGS转载 2020-07-12 23:31:53 · 793 阅读 · 0 评论