1 基本概念1.1 常见考点1、Redis 为何这么快?1)基于内存;2)单线程减少上下文切换,同时保证原子性;3)IO多路复用;4)高级数据结构(如 SDS、Hash以及跳表等)。2、为何使用单线程?官方答案因为 Redis 是基于内存的操作,CPU 不会成为 Redis 的瓶颈,而最有可能是机器内存的大小或者网络带宽。既然单线程容易实现,而且 CPU 不会成为瓶颈,那就顺理成章地采用单线程的方            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-09-19 19:23:25
                            
                                118阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            Redis的快速很多人都知道是因为基于内存,但这只是一方面,其实redis在底层是一套很完善的多路复用事件处理机制来保证执行的高效的线程模型 redis内部使用文件事件处理器file event handler,它包含如下几个部分多个socketIO多路复用程序文件事件分派器事件处理器(连接应答处理器,命令请求处理器,命令回复处理器)之所以说redis是单线程其实是指这个文件事件处理器是单线程的,            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-05-15 08:43:03
                            
                                38阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            Redis 简介Redis 是一个开源,高级的键值存储和一个适用的解决方案,用于构建高性能,可扩展的 Web 应用程序。Redis 也被作者戏称为 数据结构服务器 ,这意味着使用者可以通过一些命令,基于带有 TCP 套接字的简单 服务器-客户端 协议来访问一组 可变数据结构 。(在 Redis 中都采用键值对的方式,只            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-08-11 15:07:53
                            
                                145阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            # Redis 底层原理实现指南
Redis 是一个开源的内存数据结构存储系统,它广泛用于缓存、会话存储等场景。了解其底层原理不仅能帮助你更好地利用 Redis,还能让你在进行系统设计时做出更明智的决策。本文将详细阐述 Redis 的底层原理,并提供实现流程。让我们开始吧!
## 流程概览
下面是实现 Redis 底层原理的基本流程:
| 步骤 | 描述            
                
         
            
            
            
            # Redis底层原理解析
## 概述
在开始讲解Redis底层原理之前,我们需要了解Redis是什么,它的主要特点以及它的应用场景。Redis(REmote DIctionary Server)是一个开源的高性能键值存储系统,它支持多种数据结构(如字符串、哈希表、列表等),并提供了丰富的操作命令,可用于构建各种应用场景,如缓存、消息队列、计数器等。
Redis的底层原理主要包括以下几个方面:            
                
                    
                        
                                                            
                                                                        
                                                                                        原创
                                                                                    
                            2023-07-22 04:16:31
                            
                                67阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            Redis的数据结构,可以在两个不同的层面来讨论它,第一个层面,是从使用者的角度。比如:string、list、hash、set、zset(sorted set)五种数据类型,这一层面也是Redis暴露给外部的调用接口。第二个层面,就是这五种数据类型的内部实现结构,属于更底层的实现。比如:dict(字典)、sds(simple dynamic string简单动态字符串)、intset(整数集合)            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-08-14 11:03:38
                            
                                190阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            一、redisObject在redis中基本的结构对象我们称之为RedisObject,其源码如下:typedef struct redisObject {
unsigned type:4;
unsigned encoding:4;
unsigned lru:LRU_BITS;
int refcount;
void *ptr;
} robj;其中:type:表示值的数据类型。encoding:值的            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-06-21 22:27:02
                            
                                356阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            Redis 哨兵机制以及底层原理深入解析,这次终于搞清楚了31 人赞同了该文章前面我们基于实际案例搭建了缓存高可用方案(分布式缓存高可用方案,我们都是这么干的)同时提到了redis主从架构下是如何保证高可用的,讲到了它是通过redis sentinel的机制来实现的。今天我们就来看看redis sentinel即哨兵机制的相关底层原理以及我们在生产中需要避的坑。什么是redis sentinel哨            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-08-12 20:41:57
                            
                                27阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            Redis 底层是用C语言进行编写的,常用的数据结构为动态字符串(SDS),InSet,Dict,ZipList QuikList SkipList动态字符串优点:1.动态字符串避开了传统字符串的缺点,不可进行改变,它是可以改变的;2.时间复杂度为O(1),时间复杂度小,性能好;3.支持动态扩容;4.减少内存分配次数;5.二进制安全;inset优点1.有序唯一的元素存储;2.类型升级机制,节省内存            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-07-04 17:54:43
                            
                                103阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            1.Redisson简介Redis 是最流行的 NoSQL 数据库解决方案之一,而 Java 是世界上最流行(注意,我没有说“最好”)的编程语言之一。虽然两者看起来很自然地在一起“工作”,但是要知道,Redis 其实并没有对 Java 提供原生支持。相反,作为 Java 开发人员,我们若想在程序中集成 Redis,必须使用 Redis 的第三方库。而 Redisson 就是用于在 Java 程序中            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-08-20 16:22:56
                            
                                60阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            一致性Hash原理和实现一、算法背景二、应用场景三、使用Hash算法四、一致性Hash的基本概念五、一致性Hash算法的容错性和可扩展性 一、算法背景一致性哈希算法在1997年由麻省理工学院的Karger等人在解决分布式Cache中提出的,设计目标是为了解决因特网中的热点(Hot spot)问题,初衷和CARP十分类似。一致性哈希修正了CARP使用的简单哈希算法带来的问题,使得DHT可以在P2P            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-07-12 15:50:54
                            
                                89阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            底层数据结构一共有 6 种,分别是简单动态字符串、双向链表、压缩列表、哈希表、跳表和整数数组。它们和数据类型的对应关系如下图所示: 为了实现从键到值的快速访问,Redis 使用了一个哈希表来保存所有键值对。一个哈希表,其实就是一个数组,数组的每个元素称为一个哈希桶。哈希桶中的元素保存的并不是值本身,而是指向具体值的指针。哈希表保存了所有的键值对,所以,我也把它称为全局哈希表。哈希表的最大            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-08-07 22:20:20
                            
                                169阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            前言Redis是一种基于键值对(Key-Value)的NoSQL数据库,Redis的Value可以由String,hash,list,set,zset,Bitmaps,HyperLogLog等多种数据结构和算法组成。Redis还提供了键过期,发布订阅,事务,Lua脚本,哨兵,Cluster等功能。Redis执行命令的速度非常快,根据官方给的性能可以达到10w+qps。那么本文主要介绍到底Redis            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-10-10 21:55:59
                            
                                38阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            一、Redis的两层数据结构简介        redis的性能高的原因之一是它每种数据结构都是经过专门设计的,并都有一种或多种数据结构来支持,依赖这些灵活的数据结构,来提升读取和写入的性能。如果要了解redis的数据结构,可以从两个不同的层面来讨论它:(1)第一个层面,是从使用者的角度,这一层面也是Redis暴露给外            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-09-14 16:32:51
                            
                                1060阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            set 基本使用Redis 的 Set 是 String 类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据。集合对象的编码可以是 intset 或者 hashtable。如果是 intset 那么它是 经过升序排序的。序号命令及描述1SADD key member1 [member2] 向集合添加一个或多个成员2SCARD key获取集合的成员数3SDIFF key1 [key            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-08-30 08:18:05
                            
                                49阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            sds(simple dynamic string),是可以修改的字符串。它类似于Java中的ArrayList,它采用预分配冗余空间的方式来减少内存的频繁分配。如图中所示,内部为当前字符串实际分配的空间 。其中capacity是最大容量,len是实际长度,一般要高于实际字符串长度 len。当字符串长度小于 1M 时,扩容都是加倍现有的空间,如果超过 1M,扩容时一次只会多扩 1M 的空间。(字符            
                
         
            
            
            
            # 实现"redis incr"底层原理
## 整体流程
首先我们需要明确一下"redis incr"的功能,它是用来对一个key对应的value进行自增操作的。在底层原理实现中,主要包括以下几个步骤:
1. 检查key是否存在,如果不存在则创建并初始化为0;
2. 将key对应的value进行自增操作;
3. 返回自增后的value。
接下来我将逐步教你如何实现这个功能。
## 代码实            
                
                    
                        
                                                            
                                                                        
                                                                                        原创
                                                                                    
                            2024-02-23 07:13:49
                            
                                206阅读
                            
                                                                             
                 
                
                             
         
            
            
            
               预先知识1:Redis的数据都是存在内存中的。2:Redis是以键值对的形式存储数据,键只能是字符串对象,而值对应着五种常见的数据结构:string,list,hash,set,sorted-set。3:Redis支持主从同步,哨兵模式,Redis集群来保证高可用。4:Redis支持持久化技术,删除策略,Lua脚本,事务等功能。  图中的Re            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-07-09 15:24:14
                            
                                58阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            目录一、认识Redis二、Redis 5大数据类型三、Redis SDS底层数据结构解析四、链表数据结构解析五、列表数据结构1、压缩列表2、快速列表六、Redis字典七、Redis整数集合八、Redis跳表九、Redis对象十、Redis使用场景一、认识Redis最近入门学习Redis数据库,从最简单的内容学习,然后总结记录于此,以备忘记,也与大家共享!Windows安装如图:下载地址:Windo            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-10-25 15:55:43
                            
                                59阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            目录一、什么是Redis二、数据类型1)String(字符串)2)List(列表)3)Hash(字典或哈希)4) Set(集合)5)Zset(sorted set:有序集合)三、Redis的持久化机制1)RDBRDB优势RDB劣势RDB持久化配置2)AOFAOF的优势AOF的劣势AOF持久化配置RDB与AOF如何选择四、Redis三种集群模式1)主从模式1、特点2、工作机制3、优点4、缺点5、主从            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-05-26 14:25:28
                            
                                102阅读
                            
                                                                             
                 
                
                                
                    