Redis 高难专项

文章目录

Redis 推荐高难面试题专项

1 . Redis字符串类型的值能存储最大容量是多少?

512M

2 . Redis 的持久化机制?各自的优缺点?

Redis 提供两种持久化机制 RDB 和 AOF 机制:
一、RDB (Redis DataBase) 持久化方式
是指用数据集快照的方式半持久化模式。记录 redis 数据库的所有键值对,在某个时间点将数据写入一个临时文件,持久化结束后,用这个临时文件替换上次持久化的文件,达到数据恢复。
优点
1、只有一个文件 dump.rdb,方便持久化。
2、容灾性好,一个文件可以保存到安全的磁盘。
3、性能最大化,fork 子进程来完成写操作,让主进程继续处理命令,所以是 IO 最大化。 使用单独子进程来进行持久化, 主进程不会进行任何 IO 操作, 保证了 redis的高性能
4、相对于数据集大时,比 AOF 的启动效率更高。
缺点
1、数据安全性低。RDB 是间隔一段时间进行持久化,如果持久化之间 redis 发生故障,会发生数据丢失。所以这种方式更适合数据要求不严谨的时候)
二、AOF (Append-only file)持久化方式
是指所有的命令行记录以 redis 命令请求协议的格式完全持久化存储)保存为 aof 文件。
优点
1、数据安全,aof 持久化可以配置 appendfsync 属性,有 always,每进行一次命令操作就记录到 aof 文件中一次。
2、通过 append 模式写文件,即使中途服务器宕机,可以通过 redis-check-aof 工具解决数据一致性问题。
3、AOF 机制的 rewrite 模式。AOF 文件没被 rewrite 之前(文件过大时会对命令进行合并重写),可以删除其中的某些命令(比如误操作的 flushall))
缺点
1、AOF 文件比 RDB 文件大,且恢复速度慢。
2、数据集大的时候,比 rdb 启动效率低。

3 . Redis过期键的删除策略?

1、定时删除:在设置键的过期时间的同时,创建一个定时器 timer)。让定时器在键的过期时间来临时,立即执行对键的删除操作。
2、惰性删除:放任键过期不管,但是每次从键空间中获取键时,都检查取得的键是否过期,如果过期的话,就删除该键;如果没有过期,就返回该键。
3、定期删除:每隔一段时间程序就对数据库进行一次检查,删除里面的过期键。至于要删除多少过期键,以及要检查多少个数据库,则由算法决定。

4 . 解释Redis需要把所有数据放到内存的原因?

Redis 为了达到最快的读写速度将数据都读到内存中,并通过异步的方式将数据写入磁盘。 所以 redis 具有快速和数据持久化的特征。
如果不将数据放在内存中,磁盘 I/O 速度为严重影响 redis 的性能。在内存越来越便宜的今天,redis 将会越来越受欢迎。如果设置了最大使用的内存,则数据已有记录数达到内存限值后不能继续插入新值。

5 . Redis的主从集群同步机制 ?

Redis数据同步机制主要有以下两种方式:
主从复制
主从复制是Redis最基本、最常用的数据同步方式。它的原理是将主节点的数据复制到从节点,使得从节点的数据与主节点保持一致。主从复制的流程如下:
1)从节点连接主节点,并发送SYNC命令请求同步数据。
2)主节点在接收到SYNC命令后,开始执行BGSAVE命令,将数据持久化到磁盘中,并将生成的RDB文件发送给从节点。
3)从节点在接收到RDB文件后,通过LOAD命令将其加载到内存中,从而与主节点的数据保持一致。
4)从节点开始接收主节点的增量数据,并将其应用到自己的数据集中,保持与主节点的同步。
需要注意的是,主从复制是异步的,从节点与主节点的数据不是实时同步的。如果主节点发生故障,从节点可能会因为数据延迟而出现数据丢失的情况。
哨兵模式
除了主从复制外,Redis还提供了哨兵模式作为高可用性解决方案。哨兵模式可以自动检测主节点的状态,当主节点发生故障时,会自动将一个从节点切换为主节点。切换过程中,从节点会先将自己的数据与主节点保持一致,然后才能成为新的主节点。因此,在哨兵模式下,数据同步的过程与主从复制类似,但是其实现方式更加自动化。
总的来说,Redis提供了多种数据同步机制,可以根据不同的应用场景选择合适的方式来实现数据同步。

6 . 简述Pipeline的使用的优点?

Redis 是使用了客户端-服务器(C/S)模型和请求/响应协议的 TCP 服务器。这意味着发送一个请求会遵循以下步骤:
客户端通常以阻塞的方式向服务器发送命令,以获取服务器的响应。
服务器接收并处理命令,然后将响应发送回客户端。
所谓阻塞式,指的是只有当客户端接收完当前命令的响应信息,服务端才可以继续处理下一条指令,即一条一条的逐次执行。
不管命令是以数据包的形式从客户端传输到服务端,还是客户端获得服务端的响应信息,这个过程都需要花费一定的时间,我把这个时间称为“往返延时”。因此当客户端执行一串请求的时候很容易看出延时对其性能造成的影响。
如果我们可以减少网络请求的次数,那么就可以大幅度提高 Redis 应用性能。Redis 的 Pipeline 就是这样一种技术,它能够把多次网络请求打包成一次请求发送给服务端,从而减少多次请求的“往返时间”。
注意,记住“速度不够,管道来凑”这句话,能够帮助你牢记管道技术的作用。

7 . 简述Redis INCR数值操作命令 ?

Redis string 类型提供了一些专门操作数值的命令,比如 INCRBY(自增)、DECRBR(自减)、INCR(加1) 和 DECR(减1) 等命令。数值操作,同样有特定的应用场景,比如常见的点赞、取消点赞、关注、取消关注等,这类和计数相关的场景都可以使用数值操作来实现。
注意:此时 key 对应的 value 值是必须是一个整数,或浮点数,使用命令对这个数值进行自增或自减操作。当然,这个数值也不能无限的增大或减小, Redis 规定的数值范围是 -9223372036854775808 至 9223372036854775807,如果超过了这个数值范围,Redis 就会报错。
常用命令

  1. INCR命令
    INCR 命令指对 value 数值做加 1 操作,其数值范围是 64 位的有符号整型
  2. DECR命令
    该命令与 INCR 命令相反,它对数值执行减 1 操作
  3. INCRBY命令
    与 INCR 命令类似,不过该命令不是加 1 操作,它表示在原数的基础上进行指定数值的自增运算、
  4. DECRBY命令
    该命名与 INCRBY 命令相反,它表示在原数值的基础上进行指定数值的自减运算。
  5. INCRBYFLOAT
    该命令是 string 中唯一操作浮点数的命令,浮点数可以为正数或者负数,从而实现对数值的加减操作

8 . 详细介绍 Redis Hash哈希散列?

Redis 哈希hash是一个 string 类型的 field(字段) 和 value(值) 的映射表,hash 特别适合用于存储对象。
Redis 中每个 hash 可以存储 232 - 1 键值对(40多亿)。
哈希命令
命令 描述
HDEL key field2 [field2] 删除一个或多个hash字段。
HEXISTS key field 确定hash字段是否存在。
HGET key field 获取存储在指定键处的hash字段的值。
HGETALL key 获取按指定键存储在hash中的所有字段和值
HINCRBY key field increment 将哈希字段的整数值递增到给定的数字
HINCRBYFLOAT key field increment 将哈希字段的浮点值按给定的量递增
HKEYS key 获取hash中的所有字段
HLEN key 获取hash中的字段数
HMGET key field1 [field2] 获取所有给定哈希字段的值
HMSET key field1 value1 [field2 value2 ] 将多个哈希字段设置为多个值
HSET key field value 设置hash字段的字符串值
HSETNX key field value 仅在hash字段不存在时设置该字段的值
HVALS key 获取hash中的所有值
HSCAN key cursor [MATCH pattern] [COUNT count] 递增地迭代哈希字段和关联值

9 . 如何利用Redis实现栈和队列 ?

Redis 列表可以被当做栈、队列来使用,如果列表的元素是“左进右出”那就是队列模型;如果元素是“右进右出”那就是栈模型,示例如下:

  1. 右进左出
    127.0.0.1:6379> Rpush book c python java
    (integer) 3
    127.0.0.1:6379> lpop book
    “c”
    127.0.0.1:6379> lpop book
    “python”
    127.0.0.1:6379> lpop book
    “java”
    127.0.0.1:6379> lpop book
    (nil)
  2. 右进右出
    127.0.0.1:6379> RPUSH boo
  • 17
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值