首页 / REDIS / redis进阶(二)
redis进阶(二)
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了redis进阶(二),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2332字,纯文字阅读大概需要4分钟。
内容图文
![redis进阶(二)](/upload/InfoBanner/zyjiaocheng/869/09cfee3cc52c4200a0bd69447e0c1998.jpg)
如上一篇文章所述,介绍了redis底层的几种数据类型(简单动态字符串SDS、双端连表、字典、压缩列表、整数集合等),但是在redis并没有直接使用这些数据类型实现键值对数据库,redis是在基础数据类型的基础上又封装了一层,实现了一个包含了五种数据结构类型的统一对象。
每次在redis中创建一个键值对,都是创建了两个redis对象,其中一个用作redis键,一个用作值。(整理自redis设计与实现(第二版)第八章)
下面介绍一下redis的数据存储对象。对象的结构如下图所示:
从此可以引出一下几个问题:
1、为什么要使用redisObject,优点是什么
- 通过不同类型的对象,Redis 可以在执行命令之前,根据对象的类型来判断一个对象是否可以执行给定的命令。
- 我们可以针对不同的使用场景,为对象设置不同的数据结构实现,从而优化对象在不同场景下的使用效率。
2、object中的各个参数有什么作用
(1)type(类型)
type记录了对象的类型。可以是字符串对象、列表对象、哈希对象、集合对象、有序集合对象中的一种。对于redis数据库保存的键值对来说,键永远是字符串对象,值可以是所有类型其中的一种。
使用type命令可以查看键值对中值对象的类型,其中返回的值对象类型如下图所示:
(2)encoding(编码)
encoding属性记录了对象所使用的的编码,即这个对象使用什么数据结构作为对象的底层实现。属性值如下表所示:
每种数据对象都至少使用了两种不同的编码。下表列出了每种对象可以使用的编码。
使用object encoding命令,可以查看数据库值对象使用的编码,下表为对应的输出
(3)lru:REDIS_LRU_BITS(对象最后一次被访问的时间)
可以用于计算数据建的空转时长,在服务器启动了maxmemory的情况下,空转时长较大的键可能会优先被服务器删除
(4)refcount(引用计数)
引用计数的优点:redis的垃圾回收是基于引用计数实现的,当对象不再被引用时,则释放对象占用的内存;
redis通过引用计数实现了对象共享复制,在适当情况下,可以使用多个数据库键值共享同一对象
(5)*ptr(指向实际值的指针)
指针ptr指向对象底层的数据结构实现,而这些数据结构有对象的encoding属性决定
总结如下:
(1)redis数据库中的每个键值对的键和值都是一个对象
(2)redis共有字符串、列表、哈希、集合、有序集合五种类型的对象,每种类型的对象至少都有两种或以上的编码方式,不同的编码可以再不同的使用场景上优化对象的使用效率
(3)服务器再执行某些命令之前,会先检查给定键的类型能否执行执行的命令,而检查检查一个键的类型就是检查一个键的值对象的类型
(4)redis的对象系统带有引用计数实现的内存回收机制,当一个对象不再被使用时,该对象所占用的内存就会被释放。
(5)redis会共享值从0-9999的字符串对象
(6)对象会记录自己的最后一次被访问时间,这个时间可以用于计算对象的空转
下一篇文章将介绍不同数据类型的编码实现
内容总结
以上是互联网集市为您收集整理的redis进阶(二)全部内容,希望文章能够帮你解决redis进阶(二)所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。