推广

Redis常见面试题 2021最新版

iseeyu2年前 (2024-02-22)推广133

概述

什么是Redis

Redis(Remote Dictionary Server) 是一个使用 C 语言编写的,开源的(BSD许可)高性能非关系型(NoSQL)的键值对数据库。

Redis 可以存储键和五种不同类型的值之间的映射。键的类型只能为字符串,值支持五种数据类型:字符串、列表、集合、散列表、有序集合。

与传统数据库不同的是 Redis 的数据是存在内存中的,所以读写速度非常快,因此 redis 被广泛应用于缓存方向,每秒可以处理超过 10万次读写操作,是已知性能最快的Key-Value DB。另外,Redis 也经常用来做分布式锁。除此之外,Redis 支持事务 、持久化、LUA脚本、LRU驱动事件、多种集群方案。

Redis有哪些优缺点

优点

读写性能优异, Redis能读的速度是110000次/s,写的速度是81000次/s。

支持数据持久化,支持AOF和RDB两种持久化方式。

支持事务,Redis的所有操作都是原子性的,同时Redis还支持对几个操作合并后的原子性执行。

数据结构丰富,除了支持string类型的value外还支持hash、set、zset、list等数据结构。

支持主从复制,主机会自动将数据同步到从机,可以进行读写分离。

缺点

数据库容量受到物理内存的限制,不能用作海量数据的高性能读写,因此Redis适合的场景主要局限在较小数据量的高性能操作和运算上。

Redis 不具备自动容错和恢复功能,主机从机的宕机都会导致前端部分读写请求失败,需要等待机器重启或者手动切换前端的IP才能恢复。

主机宕机,宕机前有部分数据未能及时同步到从机,切换IP后还会引入数据不一致的题,降低了系统的可用性。

Redis 较难支持在线扩容,在集群容量达到上限时在线扩容会变得很复杂。为避免这一问题,运维人员在系统上线时必须确保有足够的空间,这对资源造成了很大的浪费。

为什么要用 Redis /为什么要用缓存

主要从“高性能”和“高并发”这两点来看待这个问题。

高性能:

假如用户第一次访问数据库中的某些数据。这个过程会比较慢,因为是从硬盘上读取的。将该用户访问的数据存在数缓存中,这样下一次再访问这些数据的时候就可以直接从缓存中获取了。操作缓存就是直接操作内存,所以速度相当快。如果数据库中的对应数据改变的之后,同步改变缓存中相应的数据即可!

高并发:

直接操作缓存能够承受的请求是远远大于直接访问数据库的,所以我们可以考虑把数据库中的部分数据转移到缓存中去,这样用户的一部分请求会直接到缓存这里而不用经过数据库。

为什么要用 Redis 而不用 map/guava 做缓存?

缓存分为本地缓存和分布式缓存。以 Java 为例,使用自带的 map 或者 guava 实现的是本地缓存,最主要的特点是轻量以及快速,生命周期随着 jvm 的销毁而结束,并且在多实例的情况下,每个实例都需要各自保存一份缓存,缓存不具有一致性。

使用 redis 或 memcached 之类的称为分布式缓存,在多实例的情况下,各实例共用一份缓存数据,缓存具有一致性。缺点是需要保持 redis 或 memcached服务的高可用,整个程序架构上较为复杂。

Redis为什么这么快

1、完全基于内存,绝大部分请求是纯粹的内存操作,非常快速。数据存在内存中,类似于 HashMap,HashMap 的优势就是查找和操作的时间复杂度都是O(1);

2、数据结构简单,对数据操作也简单,Redis 中的数据结构是专门进行设计的;

3、采用单线程,避免了不必要的上下文切换和竞争条件,也不存在多进程或者多线程导致的切换而消耗 CPU,不用去考虑各种锁的问题,不存在加锁释放锁操作,没有因为可能出现死锁而导致的性能消耗;

4、使用多路 I/O 复用模型,非阻塞 IO;

5、使用底层模型不同,它们之间底层实现方式以及与客户端之间通信的应用协议不一样,Redis 直接自己构建了 VM 机制 ,因为一般的系统调用系统函数的话,会浪费一定的时间去移动和请求;

数据类型

Redis有哪些数据类型

Redis主要有5种数据类型,包括String,List,Set,Zset,Hash,满足大部分的使用要求

Redis的应用场景

总结一

计数器

可以对 String 进行自增自减运算,从而实现计数器功能。Redis 这种内存型数据库的读写性能非常高,很适合存储频繁读写的计数量。

缓存

将热点数据放到内存中,设置内存的最大使用量以及汰策略来保证缓存的命中率。

会话缓存

可以使用 Redis 来统一存储多台应用服务器的会话信息。当应用服务器不再存储用户的会话信息,也就不再具有状态,一个用户可以请求任意一个应用服务器,从而更容易实现高可用性以及可伸缩性。

全页缓存(FPC)

除基本的会话token之外,Redis还提供很简便的FPC平台。以Magento为例,Magento提供一个插件来使用Redis作为全页缓存后端。此外,对WordPress的用户来说,Pantheon有一个非常好的插件 wp-redis,这个插件能帮助你以最快速度加载你曾浏览过的页面。

查找表

例如 DNS 记录就很适合使用 Redis 进行存储。查找表和缓存类似,也是利用了 Redis 快速的查找特性。但是查找表的内容不能失效,而缓存的内容可以失效,因为缓存不作为可靠的数据来源。

消息队列(发布/订阅功能)

List 是一个双向链表,可以通过 lpush 和 rpop 写入和读取消息。不过最好使用 Kafka、RabbitMQ 等消息中间件。

分布式锁实现

在分布式场景下,无法使用单机环境下的锁来对多个节点上的进程进行同步。可以使用 Redis 自带的 SETNX 命令实现分布式锁,除此之外,还可以使用官方提供的 RedLock 分布式锁实现。

其它

Set 可以实现交集、并集等操作,从而实现共同好友等功能。ZSet 可以实现有序性操作,从而实现排行榜等功能。

总结二

Redis相比其他缓存,有一个非常大的优势,就是支持多种数据类型。

数据类型说明string字符串,最简单的k-v存储hashhash格式,value为field和value,适合ID-Detail这样的场景。list简单的list,顺序列表,支持首位或者末尾插入数据set无序list,查找速度快,适合交集、并集、差集处理sorted set有序的set

其实,通过上面的数据类型的特性,基本就能想到合适的应用场景了。

扫描二维码推送至手机访问。

版权声明:本文由西安泽虎代运营发布,如需转载请注明出处。

转载请注明出处https://0291.com.cn/post/56283.html

相关文章

网上开店在哪个平台比较好,零元开店的电商平台(淘宝店铺转让价格表)

网上开店在哪个平台比较好,零元开店的电商平台(淘宝店铺转让价格表)

如果要在网上开店,建议选择淘宝,因为淘宝开店的门槛非常低,只需要年龄达到了,就可以开店。同时,淘宝开店费用也非常低,只需要交个保证金,其他的,商家自己估量着来就行。...

企业绿色营销类毕业论文文献包含哪些?

企业绿色营销类毕业论文文献包含哪些?

本文是为大家整理的企业绿色主题相关的10篇毕业论文文献,包括5篇期刊论文和5篇学位论文,为企业绿色营销选题相关人员撰写毕业论文提供参考。1.【期刊论文】化建设对林业绿色食品加工企业营销绩效的影响期刊:《东北林业大学学报》 | 2021 年第 002 期摘要:以林业绿色食品...

怎么和淘宝客服聊天(怎么和淘宝客服聊天页面没有+号发不了图片)

怎么和淘宝客服聊天(怎么和淘宝客服聊天页面没有+号发不了图片)

淘宝客服的回复技巧:如何应对顾客讨价还价分析:这是目前网络销售中最为普遍存在的一个现象。也是客服最大的痛点,不还价吧客户可能就流失了,还价吧,又亏了。...

我来教你高端网站设计需要满足哪些条件。

我来教你高端网站设计需要满足哪些条件。

经常听到客户告诉哪个网站表现不错,看起来高端大气上档次,或者网站收益非常高!那么在网站构建过程中,什么样的可以被认为是高端的网站设计?网站设计贯穿网站建设的整个过程,包括网站规划,网站页面设计,网站程序实现和中后期网站维护等等。做好网站并不容易,那就是所谓的高端网站设计的特点有哪些?...

网站稳定是网站优化的重点。

网站稳定是网站优化的重点。

经过许许多多的实践证明,我们在网站建设过程中,百度SEO优化的最重要因素是网站的稳定,那么网站的稳定包括哪些方面呢?主要有,网站运行的稳定,架构的稳定,站内更新频率的稳定,站外推广的稳定性,具体来说如下: 一、网站的空间服务器稳定 服务器的稳定性会最直接地影响网站的百度SEO优化效果,...

b站视频如何推广,b站视频推广方法

b站视频如何推广,b站视频推广方法

  B站相信很多人都知道,特别是00后,我自己以前并没怎么注意B站,只是听到网上的人说,后来了解才知道,原来有男人们喜欢的东西,一是美少女,二是学习课程,但你知道流量这么大的B站应该如何推广吗?今天石金明这边来分享下B站视频推广的方法有哪些。 B站想要做推广通常有两种方式,一...

现在,非常期待与您的又一次邂逅

我们努力让每一部企业宣传片和抖音短视频成为商业大片