Redis
文章平均质量分 80
Redis(Remote Dictionary Server ),即远程字典服务,是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。从2010年3月15日起,Redis的开发工作由VMware主持。从2013年5月开始,R
肥叔菌
本博客主要用于记录学习过程中的笔记,每隔一段时间,博主将会将精华内容整合发到知乎、简书上。欢迎关注博主肥叔菌在其他平台上的账号,谢谢。
B站:https://space.bilibili.com/456254145
segmentfault:https://segmentfault.com/u/feishujun/articles
简书:https://www.jianshu.com/u/67bab078551a
展开
-
Redis数据库网络层——关闭普通客户端
一个普通客户端可以因为多种原因而被关闭:如果客户端进程退出或者被杀死,那么客户端与服务器之间的网络连接将被关闭,从而造成客户端被关闭如果客户端向服务器发送了带有不符合协议格式的命令请求,那么这个客户端也会被服务器关闭如果客户端成为了CLIENT KILL命令的目标,那么它也会被关闭如果用户为服务器设置了timeout配置选项,那么当客户端的空转时间超过timeout选项设置的值时,客户端将被关闭。不过timeout选项有一些例外情况:如果客户端是主服务器(打开了REDIS_MASTER标志),从服原创 2022-03-27 11:41:52 · 906 阅读 · 0 评论 -
Redis数据库网络层——单线程Reactor模式
main src/server.c |-- initServer src/server.c | -- server.el = aeCreateEventLoop(server.maxclients+REDIS_EVENTLOOP_FDSET_INCR) | -- aeApiCreate(eventLoop) | -- Open listening socket ..原创 2022-03-26 11:45:02 · 1316 阅读 · 0 评论 -
Redis三种集群方案概括
在开发测试环境中,我们一般搭建Redis的单实例来应对开发测试需求,但是在生产环境,如果对可用性、可靠性要求较高,则需要引入Redis的集群方案。虽然现在各大云平台有提供缓存服务可以直接使用,但了解一下其背后的实现与原理总还是有些必要(比如面试), 本文就一起来学习一下Redis的几种集群方案。Redis支持三种集群方案:主从复制模式、Sentinel(哨兵)模式、Cluster模式。主从复制模式基本原理主从复制模式中包含一个主数据库实例(master)与一个或多个从数据库实例(slave),如下图原创 2021-05-22 22:30:57 · 238 阅读 · 0 评论 -
K8s使用ConfigMap配置Redis
按照下面的步骤,使用 ConfigMap 中的数据来配置 Redis 缓存。首先创建一个配置模块为空的 ConfigMap:cat <<EOF >./example-redis-config.yamlapiVersion: v1kind: ConfigMapmetadata: name: example-redis-configdata: redis-config: ""EOF应用上面创建的 ConfigMap 以及 Redis pod 清单:kubectl a原创 2021-05-18 22:47:12 · 1605 阅读 · 0 评论 -
小米Redis的K8s容器化部署实践
本文讲述了小米是如何将Redis Cluster部署在K8S上提供高质量的服务的背景小米的Redis使用规模很大,现在有数万个实例,并且每天有百万亿次的访问频率,支撑了几乎所有的产品线和生态链公司。之前所有的Redis都部署在物理机上,也没有做资源隔离,给管理治理带来了很大的困难。我们的运维人员工作压力很大,机器宕机网络抖动导致的Redis节点下线都经常需要人工介入处理。由于没有做CPU的资源隔离,slave节点打RDB或者由于流量突增导致节点QPS升高造成的节点CPU使用率升高,都可能对本集群或其他集转载 2021-05-18 21:55:55 · 553 阅读 · 0 评论 -
Redis 3.0源码分析-数据结构与对象 SDS LIST DICT
SDSRedis定义的简单动态字符串(SDS)struct sdshdr { // buf 中已占用空间的长度 int len; // buf 中剩余可用空间的长度 int free; // 数据空间 char buf[];};从下面的测试中可以看出,该结构的大小为8字节。len指定buf数组中已使用字节的数量等于SDS所保存字符串的长度...原创 2019-05-29 15:10:45 · 9213 阅读 · 0 评论 -
Redis 3.0源码分析-事件
Redis服务器是一个事件驱动程序,服务器需要处理以下两类事件:文件事件和时间事件。文件事件(file event):Redis服务器通过套接字与客户端(或者其他Redis服务器)进行连接,而文件事件就是服务器对套接字操作的抽象。服务器与客户端(或者其他服务器)的通信会产生相应的文件事件,而服务器则通过监听并处理这些事件来完成一系列网络通信操作。Redis基于Reactor模式开发了自己的网络事...原创 2019-06-04 09:47:22 · 9563 阅读 · 0 评论 -
Redis 3.0源码分析-客户端
Redis服务器状态结构的clients属性是一个链表,这个链表保存了所有与服务器连接的客户端的状态结构,对客户端执行批量操作,或者查找某个指定的客户端,都可以通过遍历clients链表来完成。/* With multiplexing we need to take per-client state. * Clients are taken in a liked list. * * 因为...原创 2019-06-04 15:29:46 · 9106 阅读 · 0 评论 -
Redis 3.0源码分析-服务器初始化与命令执行
redis的main函数在redis.c文件的最后(3933行)。一个Redis服务器从启动到能够接受客户端的命令请求,需要经过一系列的初始化和设置过程,比如初始化服务器状态,接受用户指定的服务器配置,创建相应的数据结构和网络连接等等。通过分析main函数我们可以了解这些流程。下面我们就简要分析一下Redis服务器启动流程。int main(int argc, char **argv) { ...原创 2019-06-04 16:19:55 · 9466 阅读 · 0 评论 -
Redis入门一:Redis实战读书笔记
Redis提供5种不同类型的数据结构,并存储键与5种不同类型的值之间的映射,各式各样的问题都可以自然地映射到这些数据结构上。通过复制、持久化和客户端分片等特性,可以将存储在内存的键值对数据持久化到硬盘,可以使用复制特性来扩展读性能,还可以使用客户端分片来扩展写性能,用户可以很方便地将Redis扩展成一个能够包含数百GB数据、每秒处理上百万次请求的系统。(分片是一种将数据划分为多个部分的方法,对数据...原创 2019-05-30 14:25:32 · 10849 阅读 · 0 评论 -
Redis 3.0源码分析-数据结构与对象 对象
前面几篇简介了Redis用到的所有主要数据结构,比如简单动态字符串、双端链表、字典、压缩列表、整数集合等等。Redis并没有直接使用这些数据结构来实现键值对数据库,而是基于这些数据结构创建了一个对象系统,这个系统包含字符串对象、列表对象、哈希对象、集合对象和有序集合对象这五种类型的对象。Redis使用对象来表示数据库中的键和值,每次当我们在Redis的数据库中新创建一个键值对时,至少会创建两个对...原创 2019-05-31 09:14:03 · 9285 阅读 · 0 评论 -
Redis 3.0源码分析-服务器serverCron函数
Redis服务器中的serverCron函数默认每隔100毫秒执行一次,这个函数负责管理服务器的资源,并保持服务器自身的良好运行。在initServer函数中为serverCron创建时间事件,下面将对serverCron函数执行的操作进行完整介绍。/* This is our timer interrupt, called server.hz times per second. * *...原创 2019-06-04 21:06:23 · 9496 阅读 · 0 评论 -
Redis 3.0源码分析-内存分配zmalloc
Redis默认的内存分配器采用jemalloc,可选的分配器还有:glibc、tcmalloc。内存分配器为了更好地管理和重复利用内存,分配内存策略一般采用固定范围的内存块进行分配。例如jemalloc在64位系统中将内存空间划分为:小、大、巨大三个范围。每个范围内又划分为多个小的内存单元,如下所示:小:[8 byte],[16 byte, 32 byte, 48 byte, …, 128 b...原创 2019-06-05 11:32:38 · 9173 阅读 · 0 评论 -
Redis入门二:redhat 6.5安装使用
Redis服务器Redis目录下都会有一个redis.conf配置文件,里面就是Redis的默认配置,通常来讲我们会在一台机器上启动多个Redis,并且将配置集中管理在指定目录下,而且配置不是完全手写的,而是将redis.conf作为模板进行修改。使用配置文件启动:redis-server redis.conf的路径/redis.confRedis命令行客户端https://www.c...原创 2019-05-31 09:15:23 · 9950 阅读 · 0 评论 -
Redis 3.0源码分析-数据结构与对象 skiplist intset ziplist
跳跃表 skiplist跳跃表由redis.h/zskiplistNode和redis.h/zskiplist两个结构定义,其中zskiplistNode结构用于表示跳跃表节点,而zskiplist结构用于保存跳跃表节点的相关信息。节点的分值是一个double类型的浮点数,跳跃表中的所有节点都按分值从小到大来排序。分值相同的节点将按照成员对象在字典序中的大小来进行排序,成员对象较小的节点会...原创 2019-05-30 14:23:02 · 9341 阅读 · 0 评论 -
ubuntu 16.04 安装redis 5.0.8
上一个博客我给Ubuntu 16.04安装了SSH服务器,这篇博客主要展示在该系统上安装最新的redis 5.0.8,redis官方的地址为https://redis.io/download。在Linux安装软件通常有两种方式,第一种是通过各个操作系统的软件管理软件进行安装,例如CentOS有yum管理工具,Ubuntu有apt。但是由于Redis的更新速度相对较快,而这些管理工具不一定能更新到最...原创 2020-04-21 22:06:04 · 8947 阅读 · 1 评论 -
Redis 3.0源码分析-数据库
Redis服务器将所有数据库都保存在服务器状态redis.h/redisServer结构的db数组中,db数组的每一项都是一个redis.h/redisDb结构。由redisServer结构的成员dbnum属性决定创建多少个数据库。在服务器内部,客户端状态redisClient结构的db属性记录了客户端当前的目标数据库。数据库键空间Redis是一个键值对数据库服务器,服务器中的每个数据库都由...原创 2019-06-04 21:08:58 · 9501 阅读 · 0 评论 -
Redhat 7下安装PostgreSQL 10
通过源码编译安装下载源码在PostgreSQL官方主页https://www.postgresql.org/ftp/latest下载区选择所需格式的源代码包下载:wget https://ftp.postgresql.org/pub/source/v10.0/postgresql-10.0.tar.gz解压:tar -xvf postgresql-10.0.tar.gz安装依赖包依赖包用途readline命令行编辑支持库zlib数据压缩支持库flex词法分析原创 2020-06-01 21:35:05 · 8568 阅读 · 0 评论