Redis问题收集

简介: Redis问题收集

1. Redis 有哪些数据结构?


字符串 String、字典 Hash、列表 List、集合 Set、有序集合 SortedSet。

如果你是 Redis 中高级用户,还需要加上下面几种数据结构 HyperLogLog、Geo、Pub/Sub。

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


2. Redis 为什么是单线程的?


因为 CPU 不是 Redis 的瓶颈。Redis 的瓶颈最有可能是机器内存或者网络带宽。(以上主要来自官方 FAQ)既然单线程容易实现,而且 CPU 不会成为瓶颈,那就顺理成章地采用单线程的方案了。关于 redis 的性能,官方网站也有,普通笔记本轻松处理每秒几十万的请求,


3. 使用 Redis 有哪些好处?


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

(2) 支持丰富数据类型,支持 string,list,set,sorted set,hash

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

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


4. Redis 相比 memcached 有哪些优势?


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

(2) redis 的速度比 memcached 快很多

(3) redis 可以持久化其数据

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

(5) 使用底层模型不同

它们之间底层实现方式 以及与客户端之间通信的应用协议不一样。

Redis 直接自己构建了 VM 机制 ,因为一般的系统调用系统函数的话,会浪费一定的时间去移动和请求。

(6)value 大小:redis 最大可以达到 1GB,而 memcache 只有 1MB


5.使用过 Redis 分布式锁么,它是什么回事?


先拿 setnx 来争抢锁,抢到之后,再用 expire 给锁加一个过期时间防止锁忘记了释放。


如果在 setnx 之后执行 expire 之前进程意外 crash 或者要重启维护了,那会怎么样?

这时候你要给予惊讶的反馈:唉,是喔,这个锁就永远得不到释放了。紧接着你需要抓一抓自己得脑袋,故作思考片刻,好像接下来的结果是你主动思考出来的,然后回答:我记得 set 指令有非常复杂的参数,这个应该是可以同时把 setnx 和 expire 合成一条指令来用的!


6. Redis 如何做持久化的?


bgsave 做镜像全量持久化,aof 做增量持久化。因为 bgsave 会耗费较长时间,不够实时,在停机的时候会导致大量丢失数据,所以需要 aof 来配合使用。参考www.wityx.com,在 redis 实例重启时,会使用 bgsave 持久化文件重新构建内存,再使用 aof 重放近期的操作指令来实现完整恢复重启之前的状态。


对方追问那如果突然机器掉电会怎样?


取决于 aof 日志 sync 属性的配置,如果不要求性能,在每条写指令时都 sync 一下磁盘,就不会丢失数据。但是在高性能的要求下每次都 sync 是不现实的,一般都使用定时 sync,比如 1s1 次,这个时候最多就会丢失 1s 的数据。

相关文章
|
缓存 负载均衡 前端开发
Nginx极简入门(九)Nginx实现动静分离!
前面介绍了Nginx的负载均衡,一般来说,都需要将动态资源和静态资源分开,这样可以很大程度的提升静态资源的访问速度,同时在开过程中也可以让前后端开发并行可以有效的提高开发时间,也可以有些的减少联调时间 。接下来介绍什么是动静分离以及如何使用Nginx实现动静分离。
Nginx极简入门(九)Nginx实现动静分离!
|
负载均衡 算法 Java
【SpringCloud(4)】OpenFeign客户端:OpenFeign服务绑定;调用服务接口;Feign和OpenFeign
Feign是一个WebService客户端。使用Feign能让编写WebService客户端更加简单。 它的使用方法是定义一个服务接口然后再上面添加注解。Feign也支持可拔插式的编码器和解码器。SpringCloud对Feign进行了封装,十七支持了SpringMVC标准注解和HttpMessageConverters。 Feign可用于Eureka和Ribbon组合使用以支持负载均衡
1155 139
|
8月前
|
缓存 Java 数据库
【Spring Boot】Spring Boot 全体系知识结构化拆解(附 Spring Boot 高频面试八股文精简版)
Spring Boot 是 Pivotal 基于 Spring 的“约定大于配置”快速开发框架,简化初始搭建与开发,无缝整合 Spring 全生态,内嵌容器、自动配置、起步依赖开箱即用,是 Java 企业级应用与微服务架构的核心基石。
2079 8
|
5月前
|
NoSQL Java 关系型数据库
吐血整理:2026大厂后端技术岗笔面试高频100题
本文揭秘2026大厂后端面试新趋势:题库未变,但考法剧变——从死记硬背转向考察源码理解、线上排障与设计权衡三大能力。通过真实案例对比与可落地的准备方法,帮你告别无效刷题,直击面试官真实意图。
|
监控 Java API
现代 Java IO 高性能实践从原理到落地的高效实现路径与实战指南
本文深入解析现代Java高性能IO实践,涵盖异步非阻塞IO、操作系统优化、大文件处理、响应式网络编程与数据库访问,结合Netty、Reactor等技术落地高并发应用,助力构建高效可扩展的IO系统。
494 0
|
5月前
|
缓存 负载均衡 Java
【Spring全家桶】Spring Cloud 2023.0.x:服务调用:OpenFeign、Spring Cloud LoadBalancer(附《思维导图》+《面试高频考点清单》)
Spring Cloud 2023.0.x(Leiden)中,OpenFeign与Spring Cloud LoadBalancer深度集成,构成声明式服务调用标准方案:前者通过接口注解简化HTTP调用,后者替代Ribbon实现智能负载均衡,共同支撑高可用、云原生微服务通信。
|
11月前
租用阿里云服务器的合同在哪申请?阿里云合同下载打印教程
阿里云服务器租用合同可在【费用与成本】-【合同】中申请。先提交合同申请,选择订单并填写信息创建草稿,确认无误后转为正式合同,即可下载电子版或打印纸质版。所有云产品合同均支持此流程。查看官方教程获取详细操作指引。
1016 11
|
运维 Cloud Native 虚拟化
一文吃透云原生 Docker 容器,建议收藏!
本文深入解析云原生Docker容器技术,涵盖容器与Docker的概念、优势、架构设计及应用场景等,建议收藏。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
一文吃透云原生 Docker 容器,建议收藏!
|
11月前
|
SQL 容灾 数据库
分布式事务Seata
Seata是阿里开源的分布式事务解决方案,提供XA、AT、TCC、SAGA四种模式,解决微服务架构下的跨库跨服务事务一致性问题。通过TC(事务协调者)、TM、RM三大角色实现全局事务管理,支持高可用部署与无缝集成Spring Cloud,助力系统实现最终一致或强一致性事务。
1031 0