随笔分类 -  Redis随记

摘要:## Redis做RDB备份时对已过期键的处理 【待验证】执行SAVE和BGSAVE所产生的RDB文件不会包含"已过期键"。 ## Redis做RDB加载时对已过期键的处理 在Redis实例加载RDB时,会先加载"已过期键",如果当前实例为主节点则会通过decrRefCount操作来删除"已过期键" 阅读全文
posted @ 2023-06-06 16:17 TeyGao 阅读(91) 评论(0) 推荐(0) 编辑
摘要:AOF Rewrite触发场景 函数rewriteAppendOnlyFileBackground实现了AOF Rewrite操作,并在下列三种场景中被调用: 执行bgrewriteaof命令触发,通过bgrewriteaofCommand函数来调用。 开启appendonly参数触发,通过star 阅读全文
posted @ 2022-06-06 23:08 TeyGao 阅读(163) 评论(0) 推荐(0) 编辑
摘要:## 查看客户端连接使用内存 ``` ## 执行命令 redis-cli -p 12704 client list |awk '{printf $2" ";for(i=3;i<=NF;i++)if($i~/^omem/)print $i}'|sort -t'=' -r -n -k 3 ## 输出示例 阅读全文
posted @ 2022-02-23 11:59 TeyGao 阅读(337) 评论(0) 推荐(0) 编辑
摘要:AOFRewrite触发场景 AOFRewrite触发场景: 执行BGREWRITEAOF命令重写AOF日志时触发 使用CONFIG SET命令开启AOF日志时触发 当AOF日志超过基准大小的特定百分比时(参数auto-aof-rewrite-percentage控制)时触发。 执行BGREWRIT 阅读全文
posted @ 2021-09-01 11:44 TeyGao 阅读(435) 评论(0) 推荐(0) 编辑
摘要:复制从节点过期键清理 在周期时间事件serverCron-->databasesCron函数中有如下代码: /* This function handles 'background' operations we are required to do * incrementally in Redis 阅读全文
posted @ 2021-08-12 09:48 TeyGao 阅读(212) 评论(0) 推荐(0) 编辑
摘要:哈希冲突问题 Redis使用哈希表来存放键值对数据,在插入新键值对数据时,会先按照”key“来计算哈希值,再根据哈希值和哈希表的sizemask来计算出该”key“在对于哈希数组中的索引值,然后将键值对数据封装成dictEntry对象并放入到索引值对应的哈希数组中。 不同的Key经过相同哈希函数计算 阅读全文
posted @ 2021-08-11 02:21 TeyGao 阅读(985) 评论(0) 推荐(0) 编辑
摘要:Redis过期键删除 在Redis中使用server.dbnum来控制Redis实例包含的DB数量,每个RedisDB结构如下: /* Redis database representation. There are multiple databases identified * by intege 阅读全文
posted @ 2021-08-10 13:17 TeyGao 阅读(179) 评论(0) 推荐(0) 编辑
摘要:慢日志相关代码 在Redis中,使用list来在内存中保存当前实例的慢日志,并使用slowlog_entry_id来记录下一条慢日志的编号,每次新插入慢日志时会slowlog_entry_id值进行加一操作。 struct redisServer { list *slowlog; /* SLOWLO 阅读全文
posted @ 2021-08-09 23:50 TeyGao 阅读(131) 评论(0) 推荐(0) 编辑
摘要:性能测试 同一门课程,会拆分为多个小班进行授课,每个小班会对于一个评分,课程负责人需要获取所有小班的评分并进行排名。 假设100个课程,每个课程有100个小班,模拟100个并发请求课程所有小班评分数据,每个并发循环30000次。 使用阿里云Redis进行压测,实例规格为2G集群版(2节点) 方案1: 阅读全文
posted @ 2021-08-03 11:05 TeyGao 阅读(1173) 评论(0) 推荐(0) 编辑
摘要:学习总结 在redis中使用到缓冲区的功能主要有: 客户端缓冲区 复制积压缓冲区 AOF缓冲区 其中客户端缓冲区指客户端通过TCP连接到redis的输入缓冲区和输出缓存区。 参数client-query-buffer-limit用来控制客户端传递给redis的数据大小,默认为1G,在使用Redis时 阅读全文
posted @ 2021-08-01 12:11 TeyGao 阅读(232) 评论(0) 推荐(0) 编辑
摘要:代码学习 在Redis处理命令过程中,会调用propagate和propagateExpire来将命令写入AOF日志文件feedAppendOnlyFile和传播给从库replicationFeedSlaves。 函数feedAppendOnlyFile只负责将aof日志写入到操作系统缓存,由函数f 阅读全文
posted @ 2021-07-31 20:37 TeyGao 阅读(674) 评论(0) 推荐(0) 编辑
摘要:主从数据同步和AOF日志追加 Redis在命令成功执行后,会先将命令追加到AOF日志中,然后再依次推送给每个从节点。 /* Propagate the specified command (in the context of the specified database id) * to AOF a 阅读全文
posted @ 2021-07-26 19:20 TeyGao 阅读(271) 评论(0) 推荐(0) 编辑
摘要:PUBSUB学习 基础知识 在Redis中可以使用LIST来实现简单的消息队列功能,但基于LIST实现的消息队列无法实现"消息多播"的功能。 Redis单独实现PubSub模块来实现"消息多播"功能,并支持模式订阅 常用命令 PUBSUB:用于检查消息订阅的状态信息。 PUBLIST:将消息传递给特 阅读全文
posted @ 2021-02-28 21:04 TeyGao 阅读(132) 评论(0) 推荐(0) 编辑
摘要:简易版HyperLogLog 实现逻辑: 采用简单调和平均数来计算,去除首尾10%的数据后进行估算。 Python代码: import math import random import uuid import hashlib from bisect import bisect_right HLL_ 阅读全文
posted @ 2021-02-24 23:51 TeyGao 阅读(57) 评论(0) 推荐(0) 编辑
摘要:Lazy Free特性 惰性删除或延迟释放(Lazy Free),指在删除KEY时,采用异步方式延迟释放EKY所使用的内存,将该操作交给单独的子线程BIO(backgroup I/O)进行处理,避免在同步方式删除KEY对Redis主线程的长期占用而影响系统可用性。 在删除超大KEY如单个EKY占用内 阅读全文
posted @ 2021-02-24 23:07 TeyGao 阅读(2077) 评论(0) 推荐(0) 编辑
摘要:Redis Stream ID 基础知识 在Redis Stream数据结构中,Stream ID用来表示流中的特定条目,在XADD时可以指定StreamID,也可以使用参数*来让Redis自动生成一个唯一的StreamID。 自动生成StreamID有两个64位的整数组成,如15269190304 阅读全文
posted @ 2021-02-18 22:31 TeyGao 阅读(659) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示