软件开发---Redis基础每日十题(转载于牛客)

1.        下面关于Redis的应用场景,错误的说法是()

A        Redis作为数据库实现海量数据的存储

B        作为中间件广泛应用于分布式缓存

C        Redis作为计算工具统计PV、UV等数据

D        Redis可以实现分布式锁

正确答案:A

解析:

Redis作为一个内存数据库并不适用于存储大量数据。

PV即Page View,指的是页面访问量,每刷新一次页面,则计录PV+1。

UV即Unique Visitor,指的是独立访客数,一般一台设备(计算机或者手机)为一个访客。


2.        下面关于Redis 数据存储中redisObject对象的说法,错误的是()

A        type字段表示对象的类型,占4个比特

B        encoding表示对象的内部编码,占4个比特

C        lru记录对象最后一次被命令程序访问的时间,占24个比特

D        refcount记录的是该对象被引用的次数,占4个字节

正确答案:C

解析:

redisObject是Redis内部用于表示数据的结构体,它是Redis的一个关键组件,用于存储不同数据类型的值。redisObject结构体包含了一些字段,用于描述和存储数据对象的各种属性和信息。

以下是redisObject结构体的主要字段以及它们的含义:

  1. type:这个字段表示对象的数据类型,例如字符串、列表、哈希表等。Redis支持多种数据类型,而type字段用于标识对象的实际类型。

  2. encoding:encoding字段表示对象的内部编码方式,即对象在内存中的存储方式。不同的数据类型可能会有不同的编码方式,例如字符串可以使用int编码或raw编码等。这有助于Redis在不同场景下以更高效的方式存储数据。

  3. ptr:ptr字段是一个指向实际数据的指针。根据数据类型和编码方式的不同,它可以指向字符串、列表、哈希表等不同的数据结构。

  4. refcount:refcount字段记录了对象被引用的次数。这是用于引用计数的字段,确保在没有引用的情况下可以安全地释放对象的内存。

  5. lru:lru字段记录了对象最后一次被命令程序访问的时间。这有助于Redis执行内存管理和淘汰策略,以删除不常用的对象,以便节省内存。

  6. lfu:lfu字段用于实现最近最少使用(LFU)算法,记录了对象的LFU计数。LFU是一种内存淘汰策略,用于删除最不常用的对象。占据的比特数不同的版本不同,4.0版本占24个比特,在2.6版本占22比特。

redisObject结构体的设计使得Redis可以高效地存储和操作不同数据类型的值,并提供了灵活性和性能优势。通过使用不同的数据类型和内部编码方式,Redis能够有效地满足各种不同应用场景的需求。这些字段帮助Redis在内存中管理数据,实现高性能和灵活性。


3.        下面关于Redis选择单线程的原因,错误的说法是()

A        避免线程切换和竞争产生的消耗

B        避免同步机制的开销

C        实现简单,底层数据结构的设计无需考虑线程安全

D        提升网络请求处理速度

正确答案:D

解析:Redis6.0版本引入了多线程的目的是解决Redis在网络 I/O 上的性能瓶颈。


4.        下面关于Redis中string数据类型的数据结构,正确的说法是()

A        string的数据类型是简单静态字符串(simple static string)

B        string的内部结构实现上类似Java的HashMap

C        string进行扩容时是加倍现有空间

D        string采用预分配冗余空间的方式来减少内存的频繁分配

正确答案:D

解析:

Redis 使用标准 C 语言编写,但在存储字符时,Redis 并未使用 C 语言的字符类型,而是自定义了一个属于特殊结构 SDS(Simple Dynamic String)即简单动态字符串),这是一个可以修改的内部结构,非常类似于 Java 的 ArrayList

  1. SDS动态字符串

    SDS 的结构定义如下:

    struct sdshdr{
         //记录buf数组中已使用字符的数量,等于 SDS 保存字符串的长度
         int len;
         //记录 buf 数组中未使用的字符数量
         int free;
         //字符数组,用于保存字符串
         char buf[];

  2. 分配冗余空间

    string 采用了预先分配冗余空间的方式来减少内存的频繁分配.

    Redis 每次给 string 分配的空间都要大于字符串实际占用的空间,这样就在一定程度上提升了 Redis string 存储的效率,比如当字符串长度变大时,无需再重新申请内存空间。

  3. string自动扩容
    • 当字符串所占空间小于 1MB 时,Redis 对字符串存储空间的扩容是以成倍的方式增加的.
    • 当所占空间超过 1MB 时,每次扩容只增加 1MB。Redis 字符串允许的最大值字节数是 512 MB。


 


5.        下面不属于Redis 中集群作用的是()

A        实现数据的自动备份

B        实现故障的自动转移

C        提高响应能力

D        突破了单机内存大小限制

正确答案:A

解析:

主从:读写分离,数据备份,无法进行故障转移

哨兵:主从+哨兵,从节点只读,可故障转移

集群:在哨兵模式基础上解决了单机内存大小限制问题


6.        下面关于Redis 中主从复制机制的操作,错误的说法是()

A        可以通过配置文件、启动命令、客户端命令三种方式开启主从复制

B        主从复制的开启是在从节点发起

C        slaveof no one命令可以用于断开主从复制关系

D        从节点断开主从复制关系后,会删除已有的数据

正确答案:D

解析:

Redis  中主从复制机制的操作,从节点断开主从复制关系后,不会删除已有的数据,只是不再接受主节点新的数据变化。


7.        关于Redis 6.0版本的新功能的说法,错误的是()

A        Redis 6.0版本提供了ACL功能,支持更细粒度的权限控制

B        Redis 6.0版本后支持多线程执行命令

C        Redis 6.0版本在兼容 RESP2 的基础上支持 RESP3

D        Redis 6.0改进了命令行的超时选项

正确答案:B

解析:

Redis 6.0版本的新功能, B选项中Redis 6.0版本的多线程部分只是用来处理网络数据的读写和协议解析,IO多线程其实指客户端交互部分网络IO交互处理模块多线程,而非执行命令多线程。Redis6执行命令依然是单线程


8.        关于Redis的持久化,下列描述错误的是:()

A        RDB是以快照的形式,将内存中的数据整体拷贝到硬盘上。

B        执行RDB存储时会产生阻塞,因此RDB不适合实时备份,而适合定时备份。

C        AOF是以日志形式,将内存中的数据整体拷贝到硬盘上

D        AOF操作的实时性好,但是产生的数据体积大,数据的恢复速度慢。

正确答案:C

解析:

AOF以独立日志的方式记录每次写命令,并在Redis重启时再重新执行AOF文件中的命令以达到恢复数据的目的。AOF同步磁盘有三种方式:always、everysec、no。与RDB持久化相比,AOF的实时性较好。
AOF 文件比 RDB 文件大,且恢复速度慢。AOF数据集大的时候,比 RDB启动效率低。


9.        下面关于Redis中geospatial数据类型的操作指令,错误的说法是()

A        geopos用于获取当前定位

B        georadiusmember用于找出位于指定元素范围内的其他元素

C        georadius用于找出指定元素半径范围内的其他元素

D        geohash用于返回一个或多个位置元素的geohash表示

正确答案:C

解析:

  • geoadd:添加地理位置的坐标。
  • geopos:获取地理位置的坐标。
  • geodist:计算两个位置之间的距离。
  • georadius:根据用户给定的经纬度坐标来获取指定范围内的地理位置集合。
  • georadiusbymember:根据储存在位置集合里面的某个地点获取指定范围内的地理位置集合
  • geohash:返回一个或多个位置对象的 geohash 值。


10.        下面关于Redis中RDB文件的说法,正确的是()

A        RDB文件格式中的check_sum字段数值用来在载入时判断文件是否损坏。

B        RDB文件格式中的db_version字段记录了Redis的版本号

C        RDB文件的存储路径只可以在启动前配置

D        RDB文件格式中的SELECTDB常量pairs在任何情况下都会存在

正确答案:A

解析:

Redis中的RDB(Redis Database Backup)文件是一种持久化存储机制,用于将Redis中的数据持久化到磁盘中,以便在Redis服务器重启或停机时能够恢复之前保存的数据。RDB文件包含了Redis数据库的数据快照,在进行备份等操作时,可以将该文件复制到其他机器上,比如进行数据迁移、灾备、数据分析等操作。

Redis在进行RDB持久化时,会将当前Redis进程中的数据快照保存到一个RDB文件中。这个过程可以通过手动执行SAVE命令或者Redis自动进行的BGSAVE命令实现。SAVE命令会阻塞Redis服务器进程,将数据保存到硬盘上,而BGSAVE命令则会由Redis在后台异步地执行,不会阻塞服务器进程。

RDB文件存储格式为二进制结构,包含着键值对、过期时间等信息。在Redis服务器启动时,会读取该文件并将数据重新加载到内存中,使Redis服务器能够恢复上一次的数据状态。同时,Redis支持多种RDB文件备份机制,可以设置自动保存策略、备份文件名等参数,以适应不同的应用场景。

需要注意的是,RDB文件是一种全量备份机制,即保存的是Redis中的所有数据,因此相对来说占用的磁盘空间较大。同时,使用RDB备份机制时,由于数据库中的数据量较大,可能会影响服务器的性能和响应速度
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值