Redis
文章平均质量分 78
Redis的实战、原理
秋天code
今天学习了吗?今天有开心吗?
展开
-
Redis持久化——AOF
Redis是运行在内存中的数据库,当我们关闭了Redis服务器后,内存中的数据会丢失吗?答案是不会的,因为Redis有持久化功能,能够将内存中的数据保存到磁盘中的文件,以此来实现数据的永久保存。RDB持久化功能,简称RDB快照AOF持久化功能,简称AOF日志关于RDB快照,建议先去看看我的这篇文章Redis持久化——RDB快照_秋天code的博客-CSDN博客。原创 2023-08-17 21:54:25 · 265 阅读 · 0 评论 -
Redis持久化——RDB快照
我们知道Redis是运行在内存中的数据库,那么当我们关闭Redis服务器后,内存中的数据会不会丢失?当然是不会!因为Redis有持久化机制,所谓持久化,就是将内存中的数据保存到磁盘文件上,以此来达到永久保存数据的目的。RDB持久化AOF持久化RDB持久化又叫做RDB快照,简单点说,RDB快照就是记录Redis中此刻这一瞬间的数据到文件中,“对Redis内存数据进行一次抓拍”。RDB快照既可以手动执行,也可以自动定期执行,将此刻时间点上的数据库状态保存到一个RDB文件中。原创 2023-08-17 16:56:25 · 225 阅读 · 0 评论 -
Reis过期删除策略
在Redis中,我们可以为键值对设置有效期,现在面临一个问题,如果一个键值对过期了,那么我们应该怎么删除呢?定时删除:在设置键的过期时间的同时,为此键设置一个定时器timer,定时器在键的过期时间来临时,立即自动执行键的删除。惰性删除:放任键不管,但是每次从获取该键时,都会检查此时的键是否过期,如果过期,则此时删除此键;如果没有过期,则返回。定期删除:每隔一段时间,程序对数据库中所有的键检查一次,删除过期的键。定时删除和定期删除是主动删除,而惰性删除是被动删除。原创 2023-08-16 15:25:54 · 88 阅读 · 0 评论 -
Redis对象类型和结构、内存回收、对象共享
在Redis中,无论是键key还是值value都是一个对象,每次对Redis数据库创建一个新的键值对时,就至少会创建两个对象。当引用计数变量为0时,表示没有程序继续引用此对象了,那么就需要回收此对象占用的内存。对这些对象的操作,在Redis中有对应的命令,这里就不说了。引用计数变量,除了实现内存回收机制外,还有对象共享的作用。在刚创建一个新对象时,引用计数的值会被初始化为1;当一个对象不再被一个程序使用时,引用计数值减1;当对象被一个新程序使用时,引用计数值加1;,用来表示对此对象的引用次数。原创 2023-08-15 16:40:12 · 710 阅读 · 0 评论 -
Redis数据结构——压缩列表ziplist
压缩列表ziplist是Redis中列表和哈希键的底层实现方式之一。当一个列表只包含少量列表项,并且每个列表项要么是小整数值,要么是较短的字符串时,那么Redis就会使用压缩列表来作为列表的底层实现。另外,当一个哈希表中只包含少量键值对时,并且每个每个键值对的键key和值value要么是小整数值,要么是短的字符串时,也会使用压缩列表作为实现方式压缩列表是Redis为了节约内存而设计的,由一系列特殊编码的连续内存组成的顺序型的数据结构,一个压缩列表可以包含任意多个节点,原创 2023-08-14 22:24:27 · 403 阅读 · 0 评论 -
Redis数据结构——整数集合
整数集合是集合的实现方式之一,当一个集合只包含整数值元素时,并且这个集合的元素数量不多时,Redis就会使用整数集合作为集合的底层实现。// 编码方式// 集合元素数量// 保存元素的数组} intset;contents数组保存的就是整数元素,这些元素从小到大排列,并且不会有重复项。我们知道对于int类型,存在多种编码格式,我们最常见的int的编码是32位的,除此之外还有16位、64位等格式。结构体中的encoding属性用来表示当前整数的编码格式。原创 2023-08-14 21:07:14 · 238 阅读 · 0 评论 -
Redis数据结构——字典
字典是一种存储键值对数据的结构在Redis中,字典是由哈希表实现的,字典相关的结构体有三个:dictEntry哈希表中的一个节点,就是一个键值对dictht哈希表,有多个dictEntry组成的数组来表示哈希表dict字典,其中保存了两个哈希表ht[2],在rehash时使用哈希表的rehash操作并不是一次性完成的,而是渐进式地,伴随着每次对哈希表的操作,顺带迁移一个键值对,直至完成。原创 2023-08-14 16:46:22 · 121 阅读 · 0 评论 -
Redis数据结构——链表list
链表是一种常用的数据结构,提供了顺序访问的方式,而且高效地增删操作。Redis中广泛使用了链表,例如:列表的底层实现之一就是链表。在Redis中,链表分为两部分:链表信息 + 链表节点。通过链表节点中的prev和next组成双向链表。而链表这个结构体中保存了整个链表的信息void*原创 2023-08-14 15:38:07 · 709 阅读 · 0 评论 -
Redis数据结构——Redis简单动态字符串SDS
众所周知,Redis是由C语言写的。对于字符串类型的数据存储,Redis并没有直接使用C语言中的字符串。而是自己构建了一个结构体,叫做“简单动态字符串”,简称SDS,比C语言中的字符串更加灵活。// 数组中已使用的字节的数量,即真实的内容长度int free;// 数组中未使用的字节的数量,即还可以继续存储的内容的长度// 字节数组,用来保存字符串。原创 2023-08-14 15:21:23 · 499 阅读 · 0 评论