推广

Redis常见面试题 2021最新版

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

概述

什么是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://www.0291.com.cn/post/56283.html

相关文章

品牌营销策划如何做才能成功

一个企业想要长远发展,就需要一定的运营计划,从初创期的口碑建立,到品质服务,宣传等等,最重要的是企业的营销,要和以往不同,有创新,吸引客户,品牌策略在这个信息化高度发展的今天,都有成千上万的新概念、新品牌涌现出来,相较于各行各业的初创品牌来说,新品牌想要快速的打出知名度和影...

人生正能量的思维与理念,有哪些主要表现呢

人生正能量的思维与理念,有哪些主要表现呢

-----对现实中人生有关事项的感悟关于人生正能量的与理念,有哪些主要表现,归纳一下有三个重点方面:一是会拥有阳光的心态,始终保持积极、乐观、正向的心态面对他人与环境;二是会拥有付出的意识,始终保持利他、分享、感恩的意识面对他人与环境;三是会拥有善良的行为,始终保持友好、助...

《小米创业思考》上架,雷军亲述沉淀30年的商业思维与方法论

《小米创业思考》上架,雷军亲述沉淀30年的商业思维与方法论

8月11日晚,小米秋季新品发布会在京举行,小米集团创始人、董事长兼CEO雷军第三次做年度公开演讲,分享他曾经遇到的人生低谷,以及如何逆境中发现机会、奋起前行的故事。在发布会上,雷军还首次披露自己的首部商业思考著作《小米思考》,亲述30年职业生涯以及小米创业12年的商业思考,...

淘宝平面模特招聘在哪里找(淘宝平面模特是做什么的)

淘宝平面模特招聘在哪里找(淘宝平面模特是做什么的)

可是杭州这网店却反其道而行,做起了大码女装的生意还只雇大码的服装模特。当所有人都在抢破头想要做普通时尚女装的时候,这家网店看中了大码女装的机会。...

做好网络推广竟能给企业带来这些好处。

做好网络推广竟能给企业带来这些好处。

如今互联网迅速的发展,搜索引擎自然也成为了连接企业和用户的一个途径,并其越来越受到企业的重视,从而更多的企业也选择使用搜索引擎来作企业的推广方法。若是一个企业不能让搜索引擎正确的索引到网站的内容,就无法收录到搜索引擎的数据库中,由此将会失去大部分的潜在的客户并失去大量的网络营销机会。而能够做好网络推...

淘宝店铺名怎么修改,淘宝店铺标志怎么做(自己怎么做店铺logo)

淘宝店铺名怎么修改,淘宝店铺标志怎么做(自己怎么做店铺logo)

拉动页面向下会看到下方还有其他的信息也能进行修改,可根据提示依次修改就可以了。所有完成后再点击下方的保存,保存成功生就可以生效了。目前修改的是个人店铺,对于商家店铺来说,也要看规则进行修改或更换的。...

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

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