小白日更第七天->Redis(面试系列一)

2021年还有人不知道redis吗?其实我们在校的很多大学生应该多少会听过redis,但是应该没用过,而且也知道redis是面试的高频问点,redis 应该是目前所有框架/中间件中被问到频率最高的,至少也是之一。

老规矩百度百科:
Redis(Remote Dictionary Server ),即远程字典服务,是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。从2010年3月15日起,Redis的开发工作由VMware主持。从2013年5月开始,Redis的开发由Pivotal赞助。

在这里插入图片描述
官方的回答了他的废话。。。。,好吧我承认我水平有限,真的不知道在说什么。于是我又去csdn上搜索了。

我来总结下吧:
1、什么是Redis
首先根据百度百科它使用c语言写的,开源的。非关系型数据库。Redis 可以存储键和五种不同类型的值之间的映射。键的类型只能为字符串,值支持五种数据类型:字符串、列表、集合、散列表、有序集合。
与传统数据库不同的是 Redis 的数据是存在内存中的,所以读写速度非常快,因此 redis 被广泛应用于缓存方向,官方测试完成了50个并发执行100000个请求。是已知性能最快的Key-Value DB。另外,Redis 也经常用来做分布式锁。除此之外,Redis 支持事务 、持久化、LUA脚本、LRU驱动事件、多种集群方案。
在这里插入图片描述
现在是不是心里大概对redis有点初始印象了。

2、Redis有哪些优缺点
优点

  • 读写性能优异, Redis能读的速度是110000次/s,写的速度是81000次/s。(百度百科数据)
  • 支持数据持久化,支持AOF和RDB两种持久化方式。
  • 支持事务,Redis的所有操作都是原子性的,同时Redis还支持对几个操作合并后的原子性执行。
  • 数据结构丰富,除了支持string类型的value外还支持hash、set、zset、list等数据结构。

缺点

  • 数据库容量受到物理内存的限制,不能用作海量数据的高性能读写,因为redis的数据是存放在内存中的。
  • Redis 不具备自动容错和恢复功能,主机从机的宕机都会导致前端部分读写请求失败,需要等待机器重启或者手动切换前端的IP才能恢复。
  • 主机宕机,宕机前有部分数据未能及时同步到从机,切换IP后还会引入数据不一致的问题,降低了系统的可用性。 Redis

3、为什么要用redis?

我们先从性能方面分析,我们redis的数据是存放在内存中,基于内存的IO操作是非常快的,你想象不到的快,再看mysql等传统关系型数据库,他们的数据是放在磁盘上,在做数据处理的时候会先从磁盘读取数据到内存中再进行数据处理,我们用redis是不是省去了一步。可不要小瞧这一步,如果我们的数据要频繁的进行IO那是非常耗时的。所以这个时候我们redis的优势也就体现出来了。举个例子,我们去蛋糕店买点心,那些大家经常买的东西,比如泡芙等等,是不是人家会提前做好,不然买的人那么多,人家要排队是不是会影响用户体验~也不知道这个例子恰不恰当,反正我是这么理解的。

然后我们从并发的角度来考虑,我们的热点数据要是放在缓存中,当用大量用户请求的时候,是不是有效的为数据库分担了压力呢,直接操作缓存它所能够承受的请求量是远远大于直接访问数据库的,但是如果这个时候热点数据过期了,可能就会造成雪崩了,我在后面的文章会陆续讲解,击穿,穿透,雪崩。

4、为什么要用 Redis 而不用 map/guava 做缓存?
我也是看了别人的文章,知道了缓存是分为本地缓存和分布式缓存的,在分布式系统中我们用的就是redis的分布式缓存,从而来保证缓存一致性。java自带的map和guava都是本地缓存。

我也是参考了很多人的文章,最后总结一下。

1、Redis 可以用几十 G 内存来做缓存,Map 能存多少是不是取决于jvm,那一般 jvm 也就分几个 G 数据就够大了
在这里插入图片描述
这里参考了别人的文章,地址:jvm分配大小

2、Redis 的缓存可以持久化,Map 是内存对象,程序一重启数据就没了。

3、Redis 可以实现分布式的缓存,Map 只能存在创建它的本地程序里。

4、Redis 可以处理每秒百万级的并发,是专业的缓存服务,Map 只是一个普通的对象

5、Redis 缓存有过期机制,Map 本身无此功能

5、Redis为什么这么快
1、完全基于内存,绝大部分请求是纯粹的内存操作,非常快速。数据存在内存中。

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

3、内部是单程实现的(4.0之前是单线程,4.0以后加入了多线程。这里我就不拓展了。不需要创建/销毁线程,避免上下文切换,无并发资源竞争的问题)

4、异步非阻塞的I/O(多路复用)

上面这些点,哪个都可以单独写一篇文章,真的很难在一篇文章中都写出来,有的面试你答出来就好了,不会深究,有的像分布式缓存我们就要扣细些。
今天就到这吧,希望这篇文章可以帮助到正在复习redis的你~~

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值