您的位置 首页 php

阿里PHP面试经历:Redis相关问题被虐哭了,直到了解这些知识点

前言:

redis 是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string( 字符串 )、list( 链表 )、set(集合)和zset(有序集合)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。同时redis在大厂是经常被问到的一个问题,所以熟悉的掌握redis相关问题,是能否拿到大厂offer的一个关键。

大厂redis面试真题及解析:

  • 什么是 Redis?

Redis 是完全开源免费的,遵守 BSD 协议,是一个高性能的 key-value 数据库。

Redis 与其他 key-value 缓存 产品有以下三个特点:

Redis 支持数据的 持久化 ,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。

Redis 不仅仅支持简单的 key-value 类型的数据,同时还提供 list,set,zset,hash 等数据结构的存储。

Redis 支持数据的备份,即 master-slave 模式的数据备份。

  • Redis 的数据类型?

答:Redis 支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及 zsetsorted set:有序集合)。

我们实际项目中比较常用的是 string,hash 如果你是 Redis 中高级用户,还需要加上下面几种数据结构 HyperLogLog、Geo、Pub/Sub。

如果你说还玩过 Redis Module,像 BloomFilter,RedisSearch,Redis-ML,面试官得眼睛就开始发亮了。

  • 使用 Redis 有哪些好处?

1、速度快,因为数据存在内存中,类似于 HashMap ,HashMap 的优势就是查找和操作的时间复杂度都是 O1)

2、支持丰富数据类型,支持 string,list,set,Zset,hash 等

3、支持事务,操作都是原子性,所谓的原子性就是对数据的更改要么全部执行,要么全部不执行

4、丰富的特性:可用于缓存,消息,按 key 设置过期时间,过期后将会自动删除

  • Redis 相比 Memcached 有哪些优势

1、Memcached 所有的值均是简单的字符串,redis 作为其替代者,支持更为丰富的数据类

2、Redis 的速度比 Memcached 快很

3、Redis 可以持久化其数据

  • Memcache 与 Redis 的区别都有哪些?
  • Redis 是单进程单线程的?
  • 一个字符串类型的值能存储最大容量是多少?
  • Redis 的持久化机制是什么?各自的优缺点?
  • Redis 常见性能问题和解决方案:
  • redis 过期键的删除策略?
  • Redis 的回收策略(淘汰策略)?
  • 为什么 edis 需要把所有数据放到内存中?
  • Redis 的同步机制了解么?
  • 是否使用过 Redis 集群,集群的原理是什么?
  • Redis 集群方案什么情况下会导致整个集群不可用?
  • Redis 如何设置密码及验证密码?
  • 说说 Redis 哈希槽的概念?

上面这些就是大厂面试经常会问到的一些关于 Redis的问题, 由于文章长度的原因并没有将所有的面试题以及解析都给整理出来,有需要的可以关注小编+转发文章+私信【资料】领取。

redis学习笔记:

关注redis小编做了一个完整的学习笔记,同时包含了有思维导图,进阶路线(pdf),redis的一些核心知识点,等等。分布式数据缓存(redis)

1, 关系型数据库 瓶颈与优化。

2, 非关系型数据库 数据 中间件 mongoDb,redis,tair,memcache,neo4j对比。

3,分布式数据缓存之readis:

  • 行业使用redis场景详解与演变过程
  • 解密redis基本数据类型,哨兵机制,复制,常用命令
  • 快速开始redis,Cluster集群和原理
  • 深入详解集群分配算法详解与动态水平扩容与监控
  • 实战企业级项目resdis框架gcache架构与开发

相关核心知识点:

基于 Redis 分布式锁

  1. 获取锁的时候,使用 setnx(SETNX key val:当且仅当 key 不存在时,set一个 key为 val 的字符串,返回 1;若 key 存在,则什么都不做,返回 0)加锁,锁的 value值为一个随机生成的 UUID,在释放锁的时候进行判断。并使用 expire 命令为锁添加一个超时时间,超过该时间则自动释放锁。
  2. 获取锁的时候调用 setnx,如果返回 0,则该锁正在被别人使用,返回 1 则成功获取锁。 还设置一个获取的超时时间,若超过这个时间则放弃获取锁。
  3. 释放锁的时候,通过 UUID 判断是不是该锁,若是该锁,则执行 delete 进行锁释放。

最后:

最后针对知识体系我总结出了互联网公司PHP程序员面试涉及到的绝大部分面试题及答案做成了文档和架构视频资料免费分享给大家(包括swoole、Redis、 laravel thinkphp 、swoft、docker、分布式、高并发等架构技术资料),希望能帮助到您面试前的复习且找到一个好的工作,也节省大家在网上搜索资料的时间来学习。

合理利用自己每一分每一秒的时间来学习提升自己,不要再用”没有时间“来掩饰自己思想上的懒惰!趁年轻,使劲拼,给未来的自己一个交代!

文章来源:智云一二三科技

文章标题:阿里PHP面试经历:Redis相关问题被虐哭了,直到了解这些知识点

文章地址:https://www.zhihuclub.com/149866.shtml

关于作者: 智云科技

热门文章

网站地图