Redis面试问题整理归纳.壹

一、说说redis是什么?

  1. redis (远程字典服务)是一个由C语言编写、支持网络、一般基于内存也可以持久化存盘的日志型,key-value数据库。
  2. 它本质就是一个key-value类型的内存数据库,类似于memcached。

二、大致讲下redis的特点(好处)?

  1. redis把数据都加载在内存当中操作,并且会通过异步操作把数据库的数据一般定期flush到硬盘上保存下来(半持久化),当然也可以实时存储(全持久化),文件名为dump.rdb。
  2. 由于是在内存中操作,类似于HashMap,优势就是查找和操作的时间复杂度都是O(1)【1次就能找到相关数据】,因此性能很出色,可达到10万次/秒的操作,是目前最快的key-value数据库。
  3. redis也能支持保存多种数据类型,如:hash、sorted set(有序集合)、list、string、set。
  4. 支持事务,操作皆原子性(原子性即对数据的更改要么全部执行,要么全部不执行)。
  5. 特性丰富,用于缓存、消息,可以对key设置过期时间,过期自动删除。

三、比较redis和memcached区别/优势?

  1. 对于单个value的存储,redis最大保存限制是1GB,而memcached只能保存1MB,这也是redis保存数据类型丰富的主要原因。
  2. redis的数据类型比memcached丰富【也是使它的功能比memcached丰富的原因】如list类型可以做FIFO双向链表,实现一个轻量级的高性能消息队列服务,也可以做高性能的tag系统等。而且redis也可以对存入的key-value设置过期时间,所以生产中习惯性地把它当成加强版的memcached来用。
  3. redis可以持久化存储数据,memcached则全部存到内存且数据不能超过内存的大小。
  4. 底层模型、与客户端的通信的应用协议都不同,redis直接自己构建VM机制【因为一般系统调用函数会浪费一定时间去移动和请求】。

四、如何保证redis的数据都是热点数据?

redis内存数据集上升到一定大小时会有一套回收策略来保证数据是热点数据,也就是redis的数据淘汰策略,共有6种类型:
在这里插入图片描述

五、redis高并发和快速的原因

  1. redis是基于内存的,内存的读写速度非常快。
  2. redis是单进程单线程的,省去了很多上下文切换线程的时间,利用队列技术将并发访问变为串行访问,消除了传统数据库串行控制的开销。
  3. 使用多路复用技术,可以处理并发的连接。非阻塞IO 内部实现采用epoll,采用了epoll+自己实现的简单的事件框架。epoll中的读、写、关闭、连接都转化成了事件,然后利用epoll的多路复用特性,绝不在io上浪费一点时间。

六、redis集群方案在什么情况会导致整个集群不可用?

  1. 有A,B,C三个节点的集群,在没有复制模型的情况下,如果节点B失败了,那么整个集群就会以为缺少5501-11000这个范围的槽而不可用。

七、redis支持的Java客户端有哪些呢?官方推荐是用哪个?

  1. 有Redisson、Jedis、lettuce等。
  2. 官方推荐使用Redisson

八、redis与Redisson有什么关系?

  1. Redisson是一个高级的分布式协调Redis客服端,能帮助用户在分布式环境中轻松实现一些Java的对象 。
  2. 这些对象有Bloom filter, BitSet, Set, SetMultimap, ScoredSortedSet, SortedSet, Map, ConcurrentMap, List, ListMultimap, Queue, BlockingQueue, Deque, BlockingDeque, Semaphore, Lock, ReadWriteLock, AtomicLong, CountDownLatch, Publish / Subscribe, HyperLogLog。

九、简单描述下redis哈希槽的概念吧?

  1. redis集群没有使用一致性hash,而是引入了哈希槽的概念。
  2. redis集群有16384个哈希槽,每个key通过CRC16校验后对16384取模来决定放置哪个槽。
  3. 集群的每个节点负责一部分hash槽。

十、redis的管道有什么用?

  1. 一次请求/响应服务器能实现处理新的请求即使旧的请求还未被响应。这样就可以将多个命令发送到服务器,而不用等待回复,最后在一个步骤中读取该答复。【这就是管道(pipelining),是一种几十年来广泛使用的技术。例如许多POP3协议已经实现支持这个功能,大大加快了从服务器下载新邮件的过程。】

十一、怎么测试redis的连通性?

  1. 用ping命令

十二、redis事务相关的命令有哪些?

  1. MULTI、EXEC、DISCARD、WATCH。

十三、你对redis内存优化的建议是什么?

  1. 尽可能多的使用散列表(hashes),散列表(是说散列表里面存储的数少)使用的内存非常小,所以你应该尽可能的将你的数据模型抽象到一个散列表里面。【例如web系统中有一个用户对象,不要为这个用户的名称,姓氏,邮箱,密码设置单独的key,而是应该把这个用户的所有信息存储到一张散列表里面。】

十四、redis回收进程工作流程是怎样的?

  1. 一个客户端运行了新的命令,添加了新的数据 。
  2. redis会检查内存使用情况,如果大于MAXMEMORY的限制, 则根据设定好的策略进行回收。
  3. 一个新的命令被执行,不断地穿越内存限制的边界,通过不断达到边界然后不断地回收回到边界以下。
  4. 如果一个命令的结果导致大量内存被使用【(例如很大的集合的交集保存到一个新的键),不用多久内存限制就会被这个内存使用量超越。】

十五、如何将redis的key设置成过期时间或永久有限?

  1. 过期失效:用EXPIRE命令。
  2. 永久有效:用PERSIST命令。

十六、怎么设置redis的密码和验证密码?

  1. 设置密码: config set requirepass your_passwd。
  2. 验证密码: auth your_passwd。

<<一次TCP洪水攻击的诊断处理>>

【基于AT89C51单片机的交通灯系统】是电子工程领域中的一个经典实践项目,尤其适合初学者进行单片机编程和硬件控制的学习。AT89C51是一款广泛应用的8位微处理器,由美国Atmel公司生产,具有4KB的可编程Flash存储器,可以执行各种控制任务,包括交通灯系统的控制。 交通灯控制系统是城市交通管理的重要组成部分,通过红绿黄三色灯的变化来指示行人和车辆何时通行。在本项目中,交通灯系统采用AT89C51单片机作为核心控制器,通过编程实现红绿黄灯的定时切换,确保交通流畅且安全。 DSN(Design Suite Notation)文件,如`C51交通灯.DSN`,通常是在电路设计软件,如Keil uVision或Proteus中创建的工程文件。这种文件包含了整个项目的配置信息,包括源代码、元器件库、仿真设置等,使得开发者可以在虚拟环境中对交通灯系统进行仿真测试。Proteus是一款强大的电子电路仿真软件,可以直观地模拟硬件电路的行为,无需物理硬件即可验证设计的正确性。 数码管(7段显示器)是显示倒计时的关键部件。在这个项目中,数码管用于显示每个灯组的剩余时间,增强用户交互体验,使驾驶员和行人能够清晰了解何时转换灯色。AT89C51通过串行或并行接口与数码管连接,并通过特定的驱动程序代码控制数码管的显示内容。 编程方面,AT89C51使用C51语言编写,这是一种为8051系列单片机定制的C语言变体。代码中包含的详细注释对于初学者理解程序逻辑至关重要,通过注释可以学习如何设置定时器、中断服务子程序以及I/O端口操作,这些都是单片机编程的基础知识。 交通灯的控制通常基于定时器中断,例如,可以设置一个定时器在特定周期后触发中断,然后在中断服务程序中改变灯的状态。此外,为了实现数码管显示,可能需要用到移位寄存器和译码器等外围设备,这些都需要在代码中进行编程控制。 这个项目涵
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值