PHP之redis 和 memache面试题

news/2025/1/13 3:37:15/

目录

1、什么是Redis?它的主要特点是什么?

2、redis数据类型

3、Redis的持久化机制有哪些?它们之间有什么区别?

4、Redis的主从复制是什么?如何配置Redis的主从复制?

5、Redis的集群模式是什么?如何配置Redis的集群?

6、 什么是 Redis 穿透和雪崩

7、Redis的过期策略是怎样的?如何设置Redis的数据过期时间?

8、Redis如何处理并发访问的问题?

9、Redis的事务是如何实现的?

10.redis 和 memache 缓存的区别

11、请解释PHP中的Memcached是什么?

12、Memcached适用于什么样的场景?

13、Memcached的数据存储结构是怎样的?

14、Memcached的缓存失效策略是怎样的?如何设置数据的过期时间?

15、Memcached的内存管理机制是怎样的?

16、Memcached支持的数据操作命令有哪些?

17、Memcached如何处理并发访问的问题?

18、Memcached可以与其他存储系统结合使用吗?如何实现?

19、Memcached的优势和劣势是什么?

20、如何在PHP中使用Memcached进行缓存操作?

21、redis 消息队列先进先出需要注意什么?  

22、redis哨兵模式 

23、Redis 高可用


1、什么是Redis?它的主要特点是什么?

Redis是一个开源的内存数据库,它具有高性能、持久化、支持多种数据类型等特点

2、redis数据类型
string 字符串 list 列表 set 集合 hash散列值 sort set 有序集合
3、Redis的持久化机制有哪些?它们之间有什么区别?
  • RDB(快照)是将数据库的快照以二进制形式写入磁盘,适合用于备份和恢复数据。
  • AOF(日志)是将每个写操作追加到文件中,适合用于持久化数据。
4、Redis的主从复制是什么?如何配置Redis的主从复制?

Redis的主从复制是指将一个Redis实例作为主节点,其他实例作为从节点,主节点将数据同步到从节点。

  • 配置主从复制需要在从节点的配置文件中指定主节点的IP和端口
5、Redis的集群模式是什么?如何配置Redis的集群?

Redis的集群模式是将多个Redis实例组成一个集群,每个实例负责管理一部分数据。

  • 配置Redis集群需要在各个实例的配置文件中指定集群的IP和端口。
6、 什么是 Redis 穿透和雪崩

缓存穿透就是访问redis中一个不存在的key的时候,会直接穿过缓存,去数据库中进行查询.

如果是黑客,进行恶意攻击的时候,每次都请求超过2000个/秒的时候,这个时候mysql基本上就挂了.

解决办法是:每次从数据库中查询到一个不存在的key的时候,就写一个空值到缓存库中,有恶意攻击的时候,直接从缓存中取到这个空值.

缓存雪崩就是每秒有5000个请求过来时候,redis缓存库崩了,然后这些请求瞬间落在了mysql数据库上,直接导致数据库死机.

解决方案就是:

事前:提高缓存库的高可用, 使用主从结构加哨兵 cluster集群,

事中:使用ehcache+hystrix限流组件(当请求量非常巨大的时候,就调用自己开发好的一个降级饿组件,返回一些默认值,如友情提示,或者空白值)

事后:做持久化,尽快恢复缓存集群,一旦恢复,自动从磁盘上读取数据,恢复内存中的数据.

7、Redis的过期策略是怎样的?如何设置Redis的数据过期时间?
  1. Redis的过期策略有定时删除和惰性删除两种方式,可以通过设置过期时间或使用EXPIRE命令来设置数据的过期时间。
8、Redis如何处理并发访问的问题?
  1. Redis使用单线程模型,通过使用事件驱动和非阻塞IO来处理并发访问的问题。
9、Redis的事务是如何实现的?
  1. Redis的事务通过MULTI、EXEC、WATCH和DISCARD命令来实现,可以将一系列命令打包成一个原子操作。
10.redis 和 memache 缓存的区别
1)、存储方式:
memecache 把数据全部存在内存之中,断电后会挂掉,数据不能超过内存大小
redis有部份存在硬盘上,这样能保证数据的持久性。
2)、数据支持类型:
redis在数据支持上要比memecache多的多。
3)、使用底层模型不同:
新版本的redis直接自己构建了VM 机制 ,因为一般的系统调用系统函数的话,会浪费一定的时间去移动和请求。
4)、运行环境不同:
redis目前官方只支持Linux 上去行,从而省去了对于其它系统的支持,这样的话可以更好的把精力用于本系统 环境上的优化,虽然后来微软有一个小组为其写了补丁。但是没有放到主干上
memcache只能当做缓存,cache
redis的内容是可以落地的,就是说跟MongoDB有些类似,然后redis也可以作为缓存,并且可以设置master-slave
11、请解释PHP中的Memcached是什么?
Memcached是一种高性能的分布式内存对象缓存系统,用于缓存常用的数据和对象,以提高应用程序的性能和可扩展性。在PHP中,可以使用Memcached扩展来连接和操作Memcached服务器,以便于将数据和对象缓存到内存中,并且可以在多台服务器之间共享缓存数据。 希望以上PHP高级面试题及其答案对您有所帮助。
12、Memcached适用于什么样的场景?
  1. Memcached适用于读多写少、对一致性要求不高的场景,如缓存数据库查询结果。
13、Memcached的数据存储结构是怎样的?
  1. Memcached的数据存储结构是一个简单的键值对,可以存储任意类型的数据。
14、Memcached的缓存失效策略是怎样的?如何设置数据的过期时间?
  1. Memcached的缓存失效策略是通过设置过期时间来实现的,可以使用SET命令设置键的过期时间。
15、Memcached的内存管理机制是怎样的?
  1. Memcached的内存管理机制是LRU(Least Recently Used)算法,当内存不足时会优先删除最近最少使用的数据。
16、Memcached支持的数据操作命令有哪些?
  1. Memcached支持的数据操作命令有GET、SET、DELETE等,可以通过这些命令来读取、设置和删除数据。
17、Memcached如何处理并发访问的问题?
  1. Memcached使用多线程和非阻塞IO来处理并发访问的问题,提高了性能。
18、Memcached可以与其他存储系统结合使用吗?如何实现?
  1. Memcached可以与其他存储系统结合使用,如MySQL,可以将数据库查询结果缓存到Memcached中。
19、Memcached的优势和劣势是什么?
  1. Memcached的优势是简单、快速,适用于大规模分布式环境;劣势是不支持持久化和复杂的查询操作。
20、如何在PHP中使用Memcached进行缓存操作?

在PHP中使用Memcached进行缓存操作,可以使用相关的扩展函数,如memcached_get、memcached_set等。

21、redis 消息队列先进先出需要注意什么?  

通常使用一个list来实现队列操作,这样有一个小限制,所以的任务统一都是先进先出,如果想优先处理某个任务就不太好处理了,这就需要让队列有优先级的概念,我们就可以优先处理高级别的任务,实现方式有以下几种方式:

A)单一列表实现:队列正常的操作是 左进右出(lpush,rpop)为了先处理高优先级任务,在遇到高级别任务时,可以直接插队,直接放入队列头部(rpush),这样,从队列头部(右侧)获取任务时,取到的就是高优先级的任务(rpop)

B)使用两个队列,一个普通队列,一个高级队列,针对任务的级别放入不同的队列,获取任务时也很简单,redis的BRPOP命令可以按顺序从多个队列中取值,BRPOP会按照给出的 key 顺序查看,并在找到的第一个非空 list 的尾部弹出一个元素,redis> BRPOP list1 list2 0

list1 做为高优先级任务队列

list2 做为普通任务队列

这样就实现了先处理高优先级任务,当没有高优先级任务时,就去获取普通任务

方式1最简单,但实际应用比较局限,方式3可以实现复杂优先级,但实现比较复杂,不利于维护

方式2是推荐用法,实际应用最为合适

22、redis哨兵模式 

Redis哨兵模式是一种用于提高Redis高可用性的架构模式。在哨兵模式中,有一个或多个Redis哨兵进程运行在独立的服务器上,它们负责监控主服务器和从服务器的状态,并在主服务器不可用时自动进行故障转移操作。 哨兵模式的工作原理如下:

  1. 在哨兵模式中,有一个主服务器(master)和多个从服务器(slave),同时也有多个哨兵进程。
  2. 哨兵进程通过定期向主服务器和从服务器发送心跳检测,监控它们的状态。
  3. 当哨兵发现主服务器不可用时,会选举一个新的主服务器,并将其中一个从服务器升级为新的主服务器。
  4. 哨兵进程会通知其他从服务器,让它们切换到新的主服务器上进行复制。
  5. 如果之前的主服务器恢复了,它会变成新的从服务器并复制新的主服务器的数据。 配置和设置哨兵模式的步骤如下:
  6. 在Redis配置文件中,设置sentinel参数,指定哨兵的监听地址和端口。
  7. 启动哨兵进程,可以使用命令redis-sentinel /path/to/sentinel.conf启动。
  8. 在哨兵进程的配置文件中,指定监控的主服务器和从服务器的地址和端口,以及故障转移的策略等信息。
  9. 哨兵进程会定期监测主服务器和从服务器的状态,如果发现主服务器不可用,则会进行故障转移操作。 哨兵模式可以提供高可用性和故障自动转移的功能,当主服务器发生故障时,可以自动切换到新的主服务器,从而保证了系统的可用性。同时,哨兵模式还可以进行主从复制,实现数据的备份和读写分离。
23、Redis 高可用

Redis高可用指的是在Redis服务器发生故障或不可用时,系统能够继续正常运行,保证数据的可用性和服务的连续性。以下是一些常用的Redis高可用方案:

  1. 主从复制(Master-Slave Replication):通过配置主节点和多个从节点,主节点将数据同步到从节点,实现数据的备份和故障转移。当主节点不可用时,从节点可以接替主节点的角色,继续提供服务。
  2. 哨兵模式(Sentinel):哨兵是一个监控和管理Redis服务器的进程,当主节点不可用时,哨兵会自动将一个从节点提升为新的主节点,并将其他从节点切换到新的主节点上。哨兵还负责监控节点的状态,当节点发生故障时,会进行自动故障转移和恢复。
  3. 集群模式(Cluster):Redis集群模式将数据分片存储在多个节点上,每个节点负责一部分数据。集群模式提供了自动的故障转移和数据重平衡机制,当节点故障时,集群会自动将故障节点的数据迁移到其他正常节点上。
  4. Redis Sentinel + Redis Cluster:结合哨兵模式和集群模式,可以获得更高的可用性和可扩展性。哨兵用于监控和管理Redis节点的状态,当节点故障时,集群模式负责进行数据的故障转移和恢复。 除了以上的方案,还有一些第三方工具和解决方案,如Twemproxy、Codis等,可以提供更多的高可用性和扩展性选项。 需要根据具体的需求和场景选择合适的Redis高可用方案,综合考虑数据一致性、故障恢复时间、性能开销等因素。

 


http://www.ppmy.cn/news/1142074.html

相关文章

达梦8全量备份和增量备份备份策略

前提 必须开启归档 使用SYSDBA登录数据库manager工具,输入以下SQL语句,并执行 #修改到mount状态(不用像oracle那样shutdown关库) alter database mount;#开启归档 alter database archivelog;#设置归档参数 alter database add archivelog typelocal,…

ssm+vue的劳务外包管理系统(有报告)。Javaee项目,ssm vue前后端分离项目。

演示视频: ssmvue的劳务外包管理系统(有报告)。Javaee项目,ssm vue前后端分离项目。 项目介绍: 采用M(model)V(view)C(controller)三层体系结构&…

【C++面向对象侯捷下】4. pointer-like classes,关于智能指针 | 5. function-like classes,所谓仿函数

文章目录 4. pointer-like classes,关于智能指针pointer-like classes,关于智能指针 shared_ptrpointer-like classes,关于迭代器5. function-like classes,所谓仿函数【不懂,跳过】 4. pointer-like classes,关于智能指针 pointer-like classes,关于智…

【计算机视觉 05】YOLO论文讲解:V1-V7

https://ai.deepshare.net/live_pc/l_63243a65e4b050af23b79338 Part1.目标检测与YOLO系列 1. 目标检测任务及发展脉络 2. YOLO的发展史 Anchors Base原理: Part2.YOLOV1-V3 3. YOLO V1的网络结构 4. YOLO V3的网络结构与实验结果 Part3.YOLO的进化 5. YOLO V4的网络…

计算机专业毕业设计项目推荐14-文档编辑平台(SpringBoot+Vue+Mysql)

文档编辑平台(SpringBootVueMysql) **介绍****各部分模块实现** 介绍 本系列(后期可能博主会统一为专栏)博文献给即将毕业的计算机专业同学们,因为博主自身本科和硕士也是科班出生,所以也比较了解计算机专业的毕业设计流程以及模式,在编写的…

pip命令大全

pip --version 查看已经安装了的pip版本 pip install -U pip 升级pip pip install --upgrade pip 升级pip pip list 或 pip freeze 查看当前已经安装好了包及版本 pip list -o 查看需要被升级的包 pip install package_name(包名) 下载安装包 pip install matplotlib3.4.…

李沐深度学习记录2:10多层感知机

一.简要知识记录 x.numel():看向量或矩阵里元素个数 A.sum():向量或矩阵求和,axis参数可对某维度求和,keepdims参数设置是否保持维度不变 A.cumsum:axis参数设置沿某一维度计算矩阵累计和x*y:向量的按元素乘法 torch.…

Linux-CPU相关常用命令合集

文章目录 前言一、cpu相关常用命令 二、cpuinfo 参数详细对照表 前言 本篇文章主要记录平时Linux-常用命令整理! 提示:以下是本篇文章正文内容,下面案例可供参考 一、cpu相关 CPU核数计算方式: 总核数物理CPU个数 * 每颗物理CP…