
redis
文章平均质量分 93
主要描述redis使用以及其原理
路飞H
这个作者很懒,什么都没留下…
展开
-
redis实现分布式延时队列
延时队列是一种特殊的消息队列,它允许将消息在一定的延迟时间后再进行消费。延时队列的主要特点是可以延迟消息的处理时间,以满足定时任务或者定时事件的需求。总之,延时队列通过延迟消息的消费时间,提供了一种方便、可靠的方式来处理定时任务和定时事件。它在分布式系统中具有重要的作用,能够提高系统的可靠性和性能。延时队列的实现方式可以有多种,本文介绍一种redis实现的分布式延时队列。原创 2023-10-29 21:55:36 · 2163 阅读 · 2 评论 -
redis6.0源码分析:跳表skiplist
太长不看版跳跃表是有序集合zset的底层实现之一, 除此之外它在 Redis 中没有其他应用。每个跳跃表节点的层高都是 1 至 64 之间的随机数。层高越高出现的概率越低,层高为i的概率为跳跃表中,分值可以重复, 但对象成员唯一。分值相同时,节点按照成员对象的大小进行排序。本篇解析基于redis5.0.0版本,本篇涉及源码文件为t_zset.c,server.h。跳表是一个随机化的数据结构,实质就是一种可以进行二分查找的有序链表。原创 2023-10-29 09:49:16 · 291 阅读 · 0 评论 -
redis6.0源码分析:简单动态字符串sds
Redis 面试中大概率会提及相关的数据结构,SDS 的八股文大部分人倒背如流,可是没有读过源码,知其然不知其所以然,这可万万使不得呀!!原创 2023-10-28 16:52:03 · 387 阅读 · 0 评论 -
redis6.0源码分析:字典扩容与渐进式rehash
扩容状态码0// 成功1# define DICT_OK 0 // 成功 # define DICT_ERR 1 // 失败哈希表初始值4# define DICT_HT_INITIAL_SIZE 4 // 哈希表 (ht) size 的初始值扩容安全阈值。原创 2023-10-28 11:45:15 · 505 阅读 · 0 评论 -
redis高可用
1、高可用是分布式的概念。Redis的高可用性是指在Redis集群中,当主节点宕机了,通过切换备用节点顶替它继续运行,保持系统正常运行且数据可靠性不受影响。1)避免单点故障:通过配置和设置多个Redis节点,如果其中一个节点发生故障,其他节点可以接替工作,避免了单点故障对整个系统的影响。2)数据冗余和复制:通过数据的复制和持久化备份,Redis能够在主节点出现故障时,自动切换到备用节点,并恢复数据,确保数据的持久性和可用性。原创 2023-10-26 23:47:02 · 220 阅读 · 0 评论 -
redis主从复制
Redis有三种集群模式,分别是:主从模式、哨兵模式、Cluster模式主从模式是三种模式中最简单的,在主从复制中分为主数据库(master)和从数据库(slave),若master出现宕机,需要手动配置slave转为master。后来为了高可用提出来哨兵模式,可以选择出slave转为master,提升可用性,但不能动态扩充。后来又有了cluster集群模式。本文介绍主从模式,以及如何数据同步。原创 2023-10-26 22:20:54 · 123 阅读 · 0 评论 -
redis淘汰策略
2)键的空闲时间(空转时长):redis每次操作value时,会记录操作的时间戳和统计对key-value的操作次数。volatile-ttl:从设置了过期时间的键中,选择剩余时间最短(最近就要过期)的键进行删除。volatile-lru:从设置了过期时间的键中,选择最近最少使用(Least Recently Used)(最长时间没有使用)的键进行删除。volatile-lfu:从设置了过期时间的键中,选择最少使用次数的键进行删除。allkeys-lfu,从所有的键中,选择最少使用次数的键进行删除。原创 2023-10-25 21:29:05 · 89 阅读 · 0 评论 -
redis7.0源码阅读:redis的基本存储结构
哈希冲突:当哈希表中数据增加,新增的数据 key 哈希计算出的哈希值和老数据 key 的哈希值会在同一个哈希桶中,也就是说多个 key 对应同一个哈希桶。链式哈希会产生一个问题,随着哈希表数据越来越多,哈希冲突越来越多,单个哈希桶链表上数据越来越多。next中存储的是哈希值相同的key/val对(出现哈希冲突),使用拉链法,通过链表串起来。可以通过设置自定义函数,使得dict的key和value能够存储任何类型的数据。dictType中是一个存放函数的结构体,定义了一些函数指针。原创 2023-10-25 21:07:14 · 275 阅读 · 0 评论 -
redis持久化
若在期间内,主线程执行写操作,发生写时复制,被修改的文件生成副本,子进程把副本数据写入新的 RDB 文件,主进程仍可以直接修改原来的数据。子进程共享主进程副本数据,以只读的方式读取 Redis 数据,并逐一把内存数据的键值对转换成相应的命令,再将命令写入重写日志(新的 AOF 文件)。AOF 重写机制是在重写时,读取当前数据库中的所有键值对,然后将每一个键值对用一条命令记录到新的 AOF 文件,等到全部记录完后,就将新的 AOF 文件替换掉现有的 AOF 文件。但是若主节点宕机,数据就会丢失,主从不一致。原创 2023-10-25 20:47:33 · 86 阅读 · 0 评论 -
redis中的io多线程(线程池)
一次事件循环中不会出现同名 fd,不同的 fd 分配到每个 io 线程各自的队列中,避免了多个 io 线程同时从全局队列中取数据,因此,不需要加锁操作。接下来,子线程和主线程都可以从自己的专属任务队列中获得该任务,执行 encode 和 send 的业务逻辑处理 writeToClient。:将任务队列中的任务 添加 到不同的线程消费队列中去,每个线程就可以从当前线程的消费队列中取任务就行了。这样做的好处是,避免加锁。每个io线程都有一把锁,如果主线程拿了,那么io线程就会阻塞等待,也就是停止了IO线程。原创 2023-10-24 23:24:40 · 932 阅读 · 0 评论 -
redis协议与异步方式(redis网络层、pipeline、事务、lua脚本、ACID特性、发布订阅、hiredis实现同步连接与异步连接)
文章目录redis网络层redis pipelineredis事务lua脚本ACID特性分析redis发布订阅使用hiredis同步连接hiredis异步方式实现redis网络层这里我们只讨论宏观的、直接的,即忽略其他流程,只关注数据包处理流程。对于redis连接来说,哪一条连接先构成一个完整的数据包,哪一条连接就会先得到redis的处理1、一个数据包可能由多个读事件才能组装成(因为一次可能不能读到一个完整的数据包)2、管道就是连接3、人推车相当于网络线程(redis中网络线程就一个)red原创 2023-10-11 15:21:21 · 487 阅读 · 0 评论 -
redis基本操作、数据结构以及应用
Redis 是Remote Dictionary Service 的简称;也是远程字典服务;Redis 是内存数据库,KV 数据库,数据结构数据库;Redis 应用非常广泛,如Twitter、暴雪娱乐、Github、Stack Overflow、腾讯、阿里巴巴、京东、华为、新浪微博等,很多中小型公司也在使用;redis命令手册。原创 2023-10-09 16:35:38 · 178 阅读 · 0 评论