目录
4、Redis的主从复制是什么?如何配置Redis的主从复制?
[6、 什么是 Redis 穿透和雪崩](#6、 什么是 Redis 穿透和雪崩)
7、Redis的过期策略是怎样的?如何设置Redis的数据过期时间?
[10.redis 和 memache 缓存的区别](#10.redis 和 memache 缓存的区别)
14、Memcached的缓存失效策略是怎样的?如何设置数据的过期时间?
18、Memcached可以与其他存储系统结合使用吗?如何实现?
[21、redis 消息队列先进先出需要注意什么?](#21、redis 消息队列先进先出需要注意什么?)
[23、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的数据过期时间?
- Redis的过期策略有定时删除和惰性删除两种方式,可以通过设置过期时间或使用EXPIRE命令来设置数据的过期时间。
8、Redis如何处理并发访问的问题?
- Redis使用单线程模型,通过使用事件驱动和非阻塞IO来处理并发访问的问题。
9、Redis的事务是如何实现的?
- 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适用于什么样的场景?
- Memcached适用于读多写少、对一致性要求不高的场景,如缓存数据库查询结果。
13、Memcached的数据存储结构是怎样的?
- Memcached的数据存储结构是一个简单的键值对,可以存储任意类型的数据。
14、Memcached的缓存失效策略是怎样的?如何设置数据的过期时间?
- Memcached的缓存失效策略是通过设置过期时间来实现的,可以使用SET命令设置键的过期时间。
15、Memcached的内存管理机制是怎样的?
- Memcached的内存管理机制是LRU(Least Recently Used)算法,当内存不足时会优先删除最近最少使用的数据。
16、Memcached支持的数据操作命令有哪些?
- Memcached支持的数据操作命令有GET、SET、DELETE等,可以通过这些命令来读取、设置和删除数据。
17、Memcached如何处理并发访问的问题?
- Memcached使用多线程和非阻塞IO来处理并发访问的问题,提高了性能。
18、Memcached可以与其他存储系统结合使用吗?如何实现?
- Memcached可以与其他存储系统结合使用,如MySQL,可以将数据库查询结果缓存到Memcached中。
19、Memcached的优势和劣势是什么?
- 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哨兵进程运行在独立的服务器上,它们负责监控主服务器和从服务器的状态,并在主服务器不可用时自动进行故障转移操作。 哨兵模式的工作原理如下:
- 在哨兵模式中,有一个主服务器(master)和多个从服务器(slave),同时也有多个哨兵进程。
- 哨兵进程通过定期向主服务器和从服务器发送心跳检测,监控它们的状态。
- 当哨兵发现主服务器不可用时,会选举一个新的主服务器,并将其中一个从服务器升级为新的主服务器。
- 哨兵进程会通知其他从服务器,让它们切换到新的主服务器上进行复制。
- 如果之前的主服务器恢复了,它会变成新的从服务器并复制新的主服务器的数据。 配置和设置哨兵模式的步骤如下:
- 在Redis配置文件中,设置
sentinel
参数,指定哨兵的监听地址和端口。- 启动哨兵进程,可以使用命令
redis-sentinel /path/to/sentinel.conf
启动。- 在哨兵进程的配置文件中,指定监控的主服务器和从服务器的地址和端口,以及故障转移的策略等信息。
- 哨兵进程会定期监测主服务器和从服务器的状态,如果发现主服务器不可用,则会进行故障转移操作。 哨兵模式可以提供高可用性和故障自动转移的功能,当主服务器发生故障时,可以自动切换到新的主服务器,从而保证了系统的可用性。同时,哨兵模式还可以进行主从复制,实现数据的备份和读写分离。
23、Redis 高可用
Redis高可用指的是在Redis服务器发生故障或不可用时,系统能够继续正常运行,保证数据的可用性和服务的连续性。以下是一些常用的Redis高可用方案:
- 主从复制(Master-Slave Replication):通过配置主节点和多个从节点,主节点将数据同步到从节点,实现数据的备份和故障转移。当主节点不可用时,从节点可以接替主节点的角色,继续提供服务。
- 哨兵模式(Sentinel):哨兵是一个监控和管理Redis服务器的进程,当主节点不可用时,哨兵会自动将一个从节点提升为新的主节点,并将其他从节点切换到新的主节点上。哨兵还负责监控节点的状态,当节点发生故障时,会进行自动故障转移和恢复。
- 集群模式(Cluster):Redis集群模式将数据分片存储在多个节点上,每个节点负责一部分数据。集群模式提供了自动的故障转移和数据重平衡机制,当节点故障时,集群会自动将故障节点的数据迁移到其他正常节点上。
- Redis Sentinel + Redis Cluster:结合哨兵模式和集群模式,可以获得更高的可用性和可扩展性。哨兵用于监控和管理Redis节点的状态,当节点故障时,集群模式负责进行数据的故障转移和恢复。 除了以上的方案,还有一些第三方工具和解决方案,如Twemproxy、Codis等,可以提供更多的高可用性和扩展性选项。 需要根据具体的需求和场景选择合适的Redis高可用方案,综合考虑数据一致性、故障恢复时间、性能开销等因素。