跳转到主内容
趣航编程网 - 趣学编程,启航技术之路!

Redis深入之对象

redis对象系统 前面介绍了Redis用到的所有主要数据结构,如简单动态字符串(SDS)、双端链表、字典、压缩列表、整数集合等 Redis并没有直接使用这些数据结构来实现键对数据库,而是基于这些数据结构创建了一个对象系统,这个系统包含字符串对象、列表对象、哈redis对象系统前面介绍了Redis用到的所有主要数据结构,如简单动态字符串(SDS)、双端链表、字典、压缩列表、整数集合等Redis并没有直接使用这些数据结构来实现键值对数据库,而是基于这些数据结构创建了一个对象系统,这个系统包含字符串对象、列表对象、哈希对象、集合对象和有序集合对象这五种类型的对象,每种对象都用到了至少一种我们前面所介绍的数据结构。

redis对象系统还实现了内存回收机制、对象共享机制。Redis的对象带有访问时间记录信息,该信息可以用于计算数据库键的空转时长,空转时长较大的那些键可能会优先被服务器删除。

SET命令创建一个新的键值对,SET msg “hello world”

包含两个对象,键对象和值对象,每个对象都由一个redis对象结构表示,有3个属性和保存数据有关,type类型,encoding:编码和ptr:指向底层实现数据结构的指针。

键总是一个字符串对象,值可以是字符串对象、列表对象、哈希对象、集合对象或有序集合对象中的一种。

Redis > SET msg“hello world” 字符串对象Redis >RPUSHnumbers 1 3 5 列表对象Redis> HMSETprofile name Tom age 25 career Programmer 哈希Redis>SADDfruits apple banana cherry 集合Redis>ZADDprice 8.5 apple 5.0 banana 6.0 cherry 有序集合使用OBJECT ENCODING命令可以查看一个数据库键的值对象的编码Redis 8.2.3 Redis 8.2.3 是一款安全优先的高性能键值存储系统。该版本紧急修复了可能引发远程代码执行(RCE)的高危漏洞(CVE-2025-62507),并解决了 HyperLogLog 及 Cuckoo Filter 等数据结构在特定场景下的崩溃问题。建议所有用户立即升级,以保障生产环境的系统稳定与数据安全。

下载String——INT整形、RAW简单动态字符串LIST——ZIPLIST压缩列表、LINKEDLIST双端链表HASH——ZIPLIST压缩列表、HT字典SET——INTSET整数集合、HT字典ZSET——ZIPLIST压缩列表、SKIPLIST跳跃表和字典通过encoding属性来设定对象所使用的编码,而不是为特定类型的对象关联一种固定的编码,极大地提升了Redis的灵活性和效率,因为Redis可以根据不同的使用场景来为一个对象设置不同的编码,从而优化对象在某一场景下的效率。

比如:在列表对象包含的元素比较少时,Redis使用压缩列表作为列表对象的底层实现:因为压缩列表比双端链表更节约内存,并且在元素数量较少时,在内存中以连续块方式保存的压缩列表比起双端链表可以更快地载入到缓存中。

随着列表对象包含的元素越来越多,使用压缩列表来保存元素的优势逐渐消失,对象就会将底层实现从压缩列表转向功能更强、也更适合保存大量元素的双端链表上面。

相关文章