首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏二进制文集

    Redis 源码简洁剖析 10 - aeEventLoop 及事件

    aeEventLoop IO 事件处理 IO 事件创建 读事件处理 写事件处理 时间事件处理 时间事件定义 时间事件创建 时间事件回调函数 时间事件的触发处理 参考链接 Redis 源码简洁剖析系列 aeApiAddEvent 函数源码如下: static int aeApiAddEvent(aeEventLoop *eventLoop, int fd, int mask) { aeApiState 之后客户端有请求发送到 Redis server,框架就会回调 readQueryFromClient 函数处理请求。 事件驱动框架(下):Redis 有哪些事件? Redis 源码简洁剖析系列 最简洁的 Redis 源码剖析系列文章 Java 编程思想-最全思维导图-GitHub 下载链接,需要的小伙伴可以自取~ 原创不易,希望大家转载时请先联系我,并标注原文链接

    58430编辑于 2022-03-24
  • 来自专栏浪浪山下那个村

    Redis源码Redis 6 ACL源码详解

    简介 本文主要是讲解Redis 6的ACL的实现原理。基本使用详见:Redis 6.0新特性——ACLs,以及Redis启动过程分析。 启动初始化 初始化默认用户 ACL子模块在Redis启动过程中初始化,下面代码主要是初始化ACL的结构: /* * 初始化ACL子系统 * */ void ACLInit(void) { Redis ACL配置信息主要有两种方式: 在redis.conf文件中通过user 配置项配置的ACL信息。 比如:user worker +@list +@connection ~jobs:* on >ffa9203c493aa99 在redis.conf中配置aclfile所配置的文件中。 格式如下图所示: 通过user方式 通过加载redis.conf配置文件中读取user配置项加载ACL信息。

    80730编辑于 2022-08-26
  • 来自专栏C++小白

    Redis使用及源码剖析-10.Redis数据库-2021-1-27

    的数据库文件进行简要介绍,包括数据库的选择,键的新建更新删除、Redis过期策略以及事件通知等。 一、数据库概念简介 1.数据库定义 Redisredis.h中定义了数据库结构redisDb ,如下所示: /* Redis database representation. set wyl 520 expire wyl 10 ttl 10 persist wyl ttl -1 数据库中所有键的过期时间均保存在redisDb 的词典expires中,示意图如下: 5.过期删除策略 Redis过期删除策略包括惰性删除策略和定期删除策略两种。 6.数据库通知 Redis客户端可以订阅给定的频道或者模式,来从数据库获取通知。数据库通知分为两种,键空间通知和键事件通知。

    47220编辑于 2022-02-22
  • 来自专栏浪浪山下那个村

    Redis源码Redis事件监听

    简介 Redis服务器是典型的事件驱动程序,而事件又分为文件事件(socket的可读可写事件)与时间事件(定时任务)两大类。 有多个定时任务,因此理论上应该有多个时间事件,多个时间事件形成链表, timeEventHead即为时间事件链表头节点;Redis服务器需要阻塞等待文件事件的发生,进程阻塞之前会调用beforesleep Redis底层可以使用4种I/O多路复用模型(kqueue、epoll等), apidata是对这4种模型的进一步封装。 文件监听事件 Redis客户端通过TCP socket与服务端交互,文件事件指的就是socket的可读可写事件。socket读写操作有阻塞与非阻塞之分。 Redis创建时间事件节点的函数为aeCreateTimeEvent,内部实现非常简单,只是创建时间事件并添加到时间事件链表。

    82130编辑于 2022-08-26
  • 来自专栏技术杂记

    Redis 复制10

    要想重启后依然生效,得修改配置文件[root@m2 tmp]# grep slave-read-only redisnew.confslave-read-only no[root@m2 tmp]# ----连接认证redis requirepass 配置一下简单的认证127.0.0.1:6379> CONFIG GET requ*1) "requirepass"2) ""127.0.0.1:6379> exit[root@m1 ~]# redis-cli

    36710编辑于 2022-07-09
  • 来自专栏PHPer 进击

    跟着大彬读源码 - Redis 10 - 对象编码之整数集合

    整数集合是 Redis 集合键的底层实现之一。当一个集合只包含整数值元素,并且元素数量不多时,Redis 就会使用整数集合作为集合键的底层实现。 1 整数集合的实现 整数集合是 Redis 用于保存整数值的集合抽象数据结构。它可以保存类型为 int16_t、int32_t、int64_t 的整数值,并且保证集合中不会出现重复元素。 整个升级操作源码如下: // intset.c/intsetUpgradeAndAdd() /* Upgrades the intset to a larger encoding and inserts 4 交、并、差集算法 Redis 中的集合实现了交、并、差等操作,相关操作可参加 t_set.c,其中 sinterGenericCommand() 实现交集,sunionDiffGenericCommand 如果选择了第一种算法,那么在执行该算法之前,Redis的实现中对于第二个集合之后的所有集合,按照元素个数由多到少进行了排序。这个排序有利于以更大的概率查找到元素,从而更快地结束查找。

    81820发布于 2019-08-14
  • 来自专栏weixuqin 的专栏

    redis 学习(10)-- redis 慢查询

    redis 慢查询 什么是慢查询 MySQL会记录下查询超过指定时间的语句,我们将超过指定时间的SQL语句查询称为慢查询,都记在慢查询日志里。 redis 的生命周期 客户端向Redis服务器发送命令 命令请求在请求队列中排队等待处理 执行命令 返回命令结果 ? redis 慢查询 慢查询发生在生命周期的第三阶段,是指仅仅执行命令阶段比较慢被称为慢查询。 客户端超时不一定是慢查询,但是慢查询时是客户端超时的一个可能因素。 redis 慢查询相关配置 1. slowlog-max-len 它决定了慢查询日志最多能保存多少条日志,slow log本身是一个内存中的FIFO队列,当队列大小超过slowlog-max-len时, 获取慢查询列表中的慢查询信息 2. slowlog len 含义:获取慢查询队列长度 slowlog reset 含义:清空慢查询队列 慢查询运维经验 slowlog-max-len 不要设置过大,默认10ms

    1.2K40发布于 2019-06-02
  • 来自专栏歪歪梯Club

    Redis源码阅读

    zipmap redis旧版小hash使用的数据结构,紧密数组存储结构 用1字节存储总节点数(如果1字节满了,代表需要遍历到底才知道有多少节点) 每个节点存储自己占用的内存空间,修改删除后,标记为闲置空间 adlist 环形双端链表,没啥好说的 dict 这里比较特别的是一个字典里会有最多两个hash表同时存在,目的是rehash的时候可以做渐进式hash table的结构是个数组,每个元素是一条链表,redis rehash 不在进行时,值为 -1 int rehashidx; /* rehashing not in progress if rehashidx == -1 */ } dict; scan算法 redis size/2) % size 比如size是8,缩容后就是4,所以对size为8的遍历就是 0->4 1->5 2->6 3->7 基于idx与idx + size/2这个公式得到的bucket 源码里把这用一个数学公式体现

    56920发布于 2021-10-11
  • 来自专栏编程从踩坑到跳坑

    源码-调试Redis

    # 源码-调试Redis 在阅读源码的时候,通过debug调试的方式逐行去理解代码的意思,不免是一个好的方式。 第一步: 在src目录下新建一个文件learn.h,在这里面定义入口 #ifndef REDIS_LEARN_H #define REDIS_LEARN_H int learn(); #endif str[i]; randomStr(str, i); zslInsert(zsl, i, sdsnew(str)); } // zslInsert(zsl, 10 , sdsnew("10")); // zslInsert(zsl, 17, sdsnew("17")); // zslInsert(zsl, 500, sdsnew("500")); // = NULL) redis_check_rdb_main(argc,argv,NULL); else if (strstr(argv[0],"redis-check-aof")

    42020编辑于 2023-10-21
  • 来自专栏用户6296428的专栏

    Redis源码解析

    redis的底层实现是十分简单的,核心源码也仅有几万行。本文就带大家来领略,小小的redis是如何实现这些复杂功能的。 *注:本文介绍的源码redis 5.0.14版本 * 二、字符串 C语言存储字符串的问题: 二进制安全 C语言中表示字符串结尾的符号是'\0',如果字符串本身就具有'\0'字符,就会被截断,即非二进制安全 渐进式rehash源码: int dictRehash(dict *d, int n) { int empty_visits = n*10; /* 最大访问的空桶的数量,n*10 */ 源码注解的例子。 工作中我们也常常使用redis进行各种逻辑的处理,而了解其源码可以避免踩很多坑。

    2K20编辑于 2022-04-06
  • 来自专栏技术博文

    redis源码安装

    bin的目录,里面包括了以下文件: redis-benchmark redis-check-aof redis-check-dump redis-cli redis-server redis-server :Redis服务器的daemon启动程序 redis-cli:Redis命令行操作工具。 redis #将报以下错误: redis服务不支持chkconfig #为此,我们需要更改redis脚本。 /redis/bin/redis-cli #将redis配置文件拷贝到/etc/redis/${REDISPORT}.conf mkdir /etc/redis cp /data/tgz/redis -3.0.7/redis.conf /etc/redis/6379.conf cp /data/tgz/redis-3.0.7/redis.conf /data/apps/redis/bin/redis.conf

    1.1K60发布于 2018-04-16
  • 来自专栏全栈程序员必看

    redis源码 -ziplist

    使用14个bit表示长度,字符串长度小于2的14次方 - 1,总共占用2个字节 * |10______|qqqqqqqq|rrrrrrrr|ssssssss|tttttttt| - 5 bytes * String value with length greater than or equal to 16384 bytes. 5个字节表示长度,前一个字节的前两位10表示后面 字节的字符串 #define ZIP_STR_06B (0 << 6) // 01xx xxxx 14位,2的14次方 - 1个字节的字符串 #define ZIP_STR_14B (1 << 6) // 10 entry的数量 ZIPLIST_LENGTH(zl) = 0; // 结束字节 zl[bytes-1] = ZIP_END; return zl; } resize的源码

    39420编辑于 2022-07-25
  • 来自专栏浪浪山下那个村

    Redis源码Redis命令执行过程

    简介 需要了解Redis命令执行过程,请先了解Redis启动过程和Redis事件监听。 Redis启动过程分析 Redis事件监听 在Redis事件监听中我们了解到在创建文件监听事件的时候 acceptTcpHandler就是的执行函数。 创建Redis连接。 listLength(server.ready_keys)) handleClientsBlockedOnKeys(); } return C_OK; } 命令表详见:《Redis

    57120编辑于 2022-08-26
  • 来自专栏浪浪山下那个村

    Redis源码Redis Set命令详解

    我们知道,Redis在解析命令行参数时,会将各个参数解析成robj类型,当expire值不为NULL则表示需要设置key的超时时间。 sdslen(s)); decrRefCount(o); return emb; } if (o->encoding == OBJ_ENCODING_RAW && sdsavail(s) > len/10 Redis key的超时时间实际存储的是当前key的到期毫秒时间戳,所以在指定超时时间单位为秒时,需要将时间值乘以1000来转化为毫秒数,将当前时间加上超时毫秒数的结果就是key的超时毫秒时间戳。 Redis将所有含有超时时间的key存储到redisDb的expire字典内,ttl命令可以快速确定key的超时秒数,就是通过查找这个字典实现的。 通过以上4个步骤已经成功地将一个key-value设置到Redis的数据库中。

    1.9K20编辑于 2022-08-26
  • 来自专栏兜兜毛毛

    Redis 持久化(10

    为了实现重启后数据不丢失,Redis提供了两种持久化的方案,一种是RDB快照(RedisDataBase),一种是AOF(AppendOnlyFile)。 RDB RDB是Redis默认的持久化方案。 save 900 1 // 900秒内至少有一个key被修改(包括添加) save 300 10 //400秒内至少有10个key被修改 save 60 10000 //60秒内至少有10000个key Redis提供了两条命令: 命令 说明 save save在生成快照的时候会阻塞当前Redis服务器,Redis不能处理其他命令。如果内存中的数据比较多,会造成Redis长时间的阻塞。 为了解决这个问题,Redis新增了重写机制,当AOF文件的大小超过所设定的阈值时,Redis就会启动AOF文件的内容压缩,只保留可以恢复数据的最小指令集。 如果是no,用户必须手动redis-check-aof修复AOF文件才可以。默认值为yes。 AOF数据恢复 重启Redis之后就会进行AOF文件的恢复。

    76720发布于 2020-03-19
  • 来自专栏各类技术文章~

    Redis学习(10)更正

    Redis的操作命令 1 基础命令 获得符合规则的键名称 keys 表达式(?,* ,[],\?)。 其中,?:匹配任意一个字符;*:匹配0个或者多个任意字符;[]:匹配括号间的任一字符;\? exists key 删除键 del key del key1 key2 获得键值的数据类型type 返回值可能是这五种类型(string,hash,list,set,sorted set) 注意:Redis

    20800发布于 2021-09-18
  • 来自专栏波波烤鸭

    Redis教程10(事务)

    redis是NOSQL数据库,所以也存在事务,只是此事务和关系型数据库的事务是有区别的。 事务实例 Redis中事务的使用其实非常简单,通过MULTI命令即可。 如下 127.0.0.1:6379> exec 1) OK 2) OK 3) OK 4) OK 5) "bbb" 事务异常 事务中的异常有两种情况: 进入队列之前发生错误 比较常见的命令错误,此类异常redis (error) ERR syntax error # 执行命令的时候错误提示 4) OK 127.0.0.1:6379> keys kk* 1) "kk1" 2) "kk2" 3) "kk4" 注意 redis 执行exec命令后发生的异常 对于这种情况,redis中也不会做特别的处理。 因为不需要对回滚进行支持,所以 Redis 的内部可以保持简单且快速 Watch watch命令可以监控一个或多个键,一旦其中有一个键被修改(或删除),之后的事务就不会执行。

    43640发布于 2019-04-02
  • 来自专栏CSDN搜“看,未来”

    redis源码分析】redis cluster 集群实现

    文章目录 redis集群概述 客户端重定向 槽位迁移 redis cluster 的运行流程 redis集群概述 哨兵、主从、集群,一串下来。 redis cluster 主要作用如下(虽然是显而易见了): 数据分片,流量分发。 cluster 将不同的数据分发给不同的节点,不过没有使用一致性hash算法,而是引入了Hash槽位的概念。 所以本文的重心也就很明确了:redis集群是如何实现通信及数据分片、流量分发的 关于实操:【redis】闲得无聊,来聊聊当下爆火的 redis集群,顺便搭一个玩玩呗 客户端重定向 如果cluster中的某个节点收到客户端请求 the base case. */ if (error_code) *error_code = CLUSTER_REDIR_NONE; /* Modules can turn off Redis "writing" : "reading")); return; } redis cluster 的运行流程 这个启动过程我就不放代码了,和前面的主从、哨兵有很多相似之处。

    73430编辑于 2022-01-10
  • 来自专栏浪浪山下那个村

    Redis源码Redis 启动过程分析

    简介 由于本人目前是华为FusionInsight HD 中Redis组件的Owner,所以要对Redis进行深入的了解,这对于C语言水平不咋地的我来讲还是有点难度的,于是我决定先从Redis的启动开始看 配置初始化 Redis服务启动首先做的第一步就是初始化配置。Redis初始化配置主要包括初始化命令表和加载配置两部分。 初始化ACL 权限信息 主要是通过加载redis.conf配置文件里面的配置信息,用于控制登录用户执行命令的权限,仔细详见:Redis 6 ACL源码详解 初始化命令表 在函数populateCommandTable ()/redis_check_aof_main()检查RDB/AOF文件的完整性。 这个设计就是以Redis启动时多消耗一些时间为代价,换取运行的更小的延迟。

    81150编辑于 2022-08-26
  • 来自专栏浪浪山下那个村

    Redis源码】setrange命令

    与append命令一样,原key在Redis中不存在时,Redis会创建一个robj对象,并将robj先设置到数据库;当key在Redis中存在时,会要求原值必须为string类型,并且由于Redis的限制

    44120编辑于 2022-08-26
领券