Redis
文章平均质量分 93
FrozenPenguin
冰冻三尺,非一日之寒;水滴石穿,非一日之功。
展开
-
「 Redis入门 」Redis和MySQL的差异?
Redis和MySQL在多个方面存在明显的差异。Redis适用于需要快速读写操作和较小数据集的场景,如缓存、会话管理和实时排行榜。它以内存存储和多种数据结构支持为特点,具有出色的性能表现。相比之下,MySQL适用于需要处理大量结构化数据、进行复杂查询和支持事务处理的应用程序。它使用磁盘存储数据,并提供了丰富的SQL查询语言和ACID事务支持。无论选择Redis还是MySQL,都应根据具体的需求和应用场景来做出决策。对于需要高性能、灵活的键值对存储和简单查询的场景,Redis是一个优秀的选择。原创 2023-07-12 09:13:28 · 554 阅读 · 1 评论 -
「 Redis 」大key对持久化有什么影响?
当 AOF 写回策略配置了 Always 策略,如果写入是一个大 Key,主线程在执行 fsync() 函数的时候,阻塞的时间会比较久,因为当写入的数据量很大的时候,数据同步到硬盘这个过程是很耗时的。AOF 重写机制和 RDB 快照(bgsave 命令)的过程,都会分别通过fork()函数创建一个子进程来处理任务。创建子进程的途中,由于要复制父进程的页表等数据结构,阻塞的时间跟页表的大小有关,页表越大,阻塞的时间也越长;原创 2023-05-06 17:34:59 · 1026 阅读 · 0 评论 -
「 Redis 」 SkipList 跳表底层实现及应用
跳跃表(skiplist)是一种有序数据结构,它通过在每个节点中维持多个指向其它节点的指针,从而达到快速访问节点的目的。和链表、字典等数据结构被广泛地应用在 Redis 内部不同,Redis 只在两个地方用到了跳跃表,一个是实现有序集合健,另一个是在集群节点中用做内部数据结构,除此之外,跳跃表在 Redis 里没有其它用途。我们来想一下,为啥 Redis 中这两个场景要选择 skiplist?如果该序列用支持随机访问的线性结构(数组)存储,那么我们很容易地用二分查找来做。原创 2023-04-04 07:30:00 · 963 阅读 · 0 评论 -
「 Redis 」缓存过期策略及内存淘汰策略
在计算机科学中,缓存是一种优化技术,用于提高系统的性能。通过将经常访问的数据存储在快速访问的介质(如快速内存)中,可以减少读取慢速存储介质(如硬盘)的次数,从而加快了程序的响应时间。然而,缓存也带来一个问题:缓存中存储的数据可能会过期或变得不再有用。为了解决这个问题,我们需要使用缓存淘汰策略。这些策略控制着缓存中哪些数据应该被删除以及何时删除它们。除了缓存淘汰策略之外,内存淘汰机制也是一个重要的概念。当缓存满了并且新数据需要被添加到缓存中时,缓存中的旧数据必须被替换。原创 2023-04-03 09:13:51 · 1406 阅读 · 1 评论 -
「Redis数据结构」哈希对象(Hash)
Redis中hash对象是一个string类型的field和value的映射表,hash特别适合用于存储对象。作为哈希对象的编码,有二种一是ziplist编码, 二是hashtable编码。在不同情况下编码是可以转换的。在Redis 中每个 hash 可以存储 232 - 1 键值对(40多亿)。都是键值存储都需求根据键获取值键必须唯一区别zset的键是member,值是score;hash的键和值都是任意值zset要根据score排序;hash则无需排序。原创 2022-12-12 10:16:30 · 2898 阅读 · 0 评论 -
「Redis数据结构」有序集合对象(zset)
有序集合对象ZSet也就是SortedSet,其中每一个元素都需要指定一个score值和member值:可以根据score值排序后、member必须唯一、可以根据member查询分数。原创 2022-12-11 09:12:51 · 1947 阅读 · 0 评论 -
「 Redis 」 SkipList 跳表底层实现及应用
跳表(SkipList,全称跳跃表)是用于有序元素序列快速搜索查找的一个数据结构,跳表是一个随机化的数据结构,实质就是一种可以进行二分查找的有序链表。跳表在原有的有序链表上面增加了多级索引,通过索引来实现快速查找。原创 2022-12-09 11:31:13 · 2090 阅读 · 0 评论 -
「Redis数据结构」集合对象(Set)
Set是Redis中的单列集合,其特点为不保证有序性、保证元素唯一、可以求交集、并集、差集。原创 2022-12-08 09:19:14 · 2791 阅读 · 1 评论 -
「Redis数据结构」列表对象(List)
Redis列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。一个列表最多可以包含 232 - 1 个元素 (4294967295, 每个列表超过40亿个元素)。列表对象的编码可以是ziplist或者linkedlist。ziplist编码的列表对象使用压缩列表作为底层实现,每个压缩列表节点(entry)保存了一个列表元素。原创 2022-12-07 09:57:24 · 2192 阅读 · 0 评论 -
「Redis数据结构」字符串对象(String)
字符串数据类型是Redis里最常用的类型,它的键和值都是字符串,使用起来非常的方便。虽然字符串数据类型的值都统称为字符串了,但是在实际存储时会根据值的不同自动选择合适的编码。字符串对象的编码一共有三种:int、raw、embstr。原创 2022-12-06 08:14:04 · 2186 阅读 · 1 评论 -
「Redis数据结构」RedisObject
redisObject对象非常重要,Redis对象的类型、内部编码、内存回收、共享对象等功能,都需要redisObject支持。原创 2022-12-05 07:30:00 · 1504 阅读 · 0 评论 -
「Redis线程模型」Redis的单线程与多线程
Redis 单线程指的是「接收客户端请求->解析请求 ->进行数据读写等操作->发送数据给客户端」这个过程是由一个线程(主线程)来完成的,这也是我们常说 Redis 是单线程的原因。原创 2022-12-01 09:41:52 · 1876 阅读 · 0 评论 -
「Redis数据结构」QuickList
在前面一章,我们已经学习了ZipList压缩列表,ZipList虽然节省内存,但也引发了不少问题。问题1:ZipList虽然节省内存,但申请内存必须是连续空间,如果内存占用较多,申请内存效率很低。怎么办? 答:为了缓解这个问题,我们必须限制ZipList的长度和entry大小。问题2:但是我们要存储大量数据,超出了ZipList最佳的上限该怎么办? 答:我们可以创建多个ZipList来分片存储数据。问题3:数据拆分后比较分散,不方便管理和查找,这多个ZipList如何建立联系?原创 2022-11-19 10:00:00 · 1873 阅读 · 0 评论 -
「Redis数据结构」压缩列表(ZipList)
压缩列表的最大特点,就是它被设计成一种内存紧凑型的数据结构,占用一块连续的内存空间,不仅可以利用 CPU 缓存,而且会针对不同长度的数据,进行相应编码,这种方法可以有效地节省内存开销。但是,压缩列表的缺陷不能保存过多的元素,否则查询效率就会降低;新增或修改某个元素时,压缩列表占用的内存空间需要重新分配,甚至可能引发连锁更新的问题。因此,Redis 对象(List 对象、Hash 对象、Zset 对象)包含的元素数量较少,或者元素值不大的情况才会使用压缩列表作为底层数据结构。原创 2022-11-19 07:45:00 · 3774 阅读 · 0 评论 -
「Redis数据结构」哈希表(Dict)
哈希表中的每一个key 都是独一无二的,程序可以根据 key 查找到与之关联的 value,或者通过 key 来更新 value,又或者根据 key 来删除整个 key-value等等。哈希表优点在于,它能以 O(1) 的复杂度快速查询数据。怎么做到的呢?将 key 通过 Hash 函数的计算,就能定位数据在表中的位置,因为哈希表实际上是数组,所以可以通过索引值快速查询到数据。但是存在的风险也是有,在哈希表大小固定的情况下,随着数据不断增多,那么哈希冲突的可能性也会越高。解决哈希冲突的方式,有很多种。原创 2022-11-18 15:35:40 · 3559 阅读 · 1 评论 -
「Redis数据结构」整数集合(intSet)
IntSet是Redis中set集合的一种实现方式,基于整数数组来实现,并且具备长度可变、有序等特征。当一个 Set 对象只包含整数值元素,并且元素数量不大时,就会使用整数集这个数据结构作为底层实现。原创 2022-11-16 07:30:00 · 1846 阅读 · 0 评论 -
「Redis数据结构」动态字符串(SDS)
我们都知道Redis中保存的Key是字符串,value往往是字符串或者字符串的集合。可见字符串是Redis中最常用的一种数据结构。Redis采用C语言来实现,但并没有使用C语言传统字符串的表示,而是自己构建了一种名为简单动态字符串(simple dynamic string,SDS)的数据结构。原创 2022-11-15 07:15:00 · 1750 阅读 · 0 评论 -
「深入理解」缓存更新策略及缓存不一致问题解决方案
缓存更新是redis为了节约内存而设计出来的一个东西,主要是因为内存数据宝贵,当我们向redis插入太多数据,此时就可能会导致缓存中的数据过多,所以redis会对部分数据进行更新,或者把他叫为淘汰更合适。原创 2022-11-06 06:45:00 · 2177 阅读 · 0 评论 -
「Redis」缓存穿透、缓存击穿、缓存雪崩的场景及解决方案
缓存可以比喻为防弹衣,但如果没有使用好这个防弹衣效果就会适得其反,所以要更好的使用缓存才能发挥出它的作用。本文详细讲解了缓存穿透/击穿/雪崩以及其解决方案。原创 2022-07-23 14:30:00 · 1593 阅读 · 4 评论 -
【应用案例】Redis缓存应用场景实战
Redis底层采用全局哈希表,时间复杂度为常数,性能极高。本文章主要用于分析Redis的各种应用场景。原创 2022-07-09 11:01:36 · 4114 阅读 · 0 评论 -
Docker安装mysql和redis
Docker 分为 CE 和 EE 两大版本。CE 即社区版(免费,支持周期 7 个月),EE 即企业版,强调安全,付费使用,支持周期 24 个月。Docker CE 分为 和 三个更新频道。官方网站上有各种环境下的 安装指南,这里主要介绍 Docker CE 在 CentOS上的安装。Docker CE 支持 64 位版本 CentOS 7,并且要求内核版本不低于 3.10, CentOS 7 满足最低内核的要求,所以我们在CentOS 7安装Docker。卸载(可选)如果之前安装过旧版本的Dock原创 2022-07-03 21:15:48 · 951 阅读 · 0 评论 -
Redis学习笔记
写在前面笔记参考、整理于未名湖畔种千玺、每天进步一點點版权所有狂神说一、Redis入门概述什么是ReidsRedis(Remote Dictionary Server ),即远程字典服务。是一个开源的使用ANSIC语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了maste原创 2022-05-26 17:01:48 · 910 阅读 · 0 评论