从 redis 简介到Redis BAT面试集结,看阿里P7架构师如何从容应对

推荐阅读:https://blog.csdn.net/m0_46995061/article/details/106148048

https://blog.csdn.net/m0_46995061/article/details/106124211

分享是奉献的果实。分享是快乐的前提。 分享是一种博爱的心境,学会分享,就学会了生活。 我是Coid也是Codi,欢迎各位关注我,技术宅男的快乐其实也很简单!

从 redis 简介到Redis BAT面试集结,看阿里P7架构师如何从容应对

redis 简介

简单来说 redis 就是一个数据库,不过与传统数据库不同的是 redis 的数据是存在内存中的,所以存写速度非常快,

因此 redis 被广泛应用于缓存方向。另外,redis 也经常用来做分布式锁。redis 提供了多种数据类型来支持不同的业

务场景。除此之外,redis 支持事务 、持久化、LUA脚本、LRU驱动事件、多种集群方案。

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

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

高性能:

假如用户第一次访问数据库中的某些数据。这个过程会比较慢,因为是从硬盘上读取的。将该用户访问的数据存在数

缓存中,这样下一次再访问这些数据的时候就可以直接从缓存中获取了。操作缓存就是直接操作内存,所以速度相当

快。如果数据库中的对应数据改变的之后,同步改变缓存中相应的数据即可!

从 redis 简介到Redis BAT面试集结,看阿里P7架构师如何从容应对

高并发:

直接操作缓存能够承受的请求是远远大于直接访问数据库的,所以我们可以考虑把数据库中的部分数据转移到缓存中

去,这样用户的一部分请求会直接到缓存这里而不用经过数据库。

从 redis 简介到Redis BAT面试集结,看阿里P7架构师如何从容应对

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

缓存分为本地缓存和分布式缓存。以 Java 为例,使用自带的 map 或者 guava 实现的是本地缓存,最主要的特点是

轻量以及快速,生命周期随着 jvm 的销毁而结束,并且在多实例的情况下,每个实例都需要各自保存一份缓存,缓

存不具有一致性。

使用 redis 或 memcached 之类的称为分布式缓存,在多实例的情况下,各实例共用一份缓存数据,缓存具有一致

性。缺点是需要保持 redis 或 memcached服务的高可用,整个程序架构上较为复杂。

6.4 redis 和 memcached 的区别

对于 redis 和 memcached 我总结了下面四点。现在公司一般都是用 redis 来实现缓存,而且 redis 自身也越来越强

大了!

1. redis支持更丰富的数据类型(支持更复杂的应用场景):Redis不仅仅支持简单的k/v类型的数据,同时还提供

list,set,zset,hash等数据结构的存储。memcache支持简单的数据类型,String。

2. Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用,而

Memecache把数据全部存在内存之中。

3. 集群模式:memcached没有原生的集群模式,需要依靠客户端来实现往集群中分片写入数据;但是 redis 目前

是原生支持 cluster 模式的.

4. Memcached是多线程,非阻塞IO复用的网络模型;Redis使用单线程的多路 IO 复用模型。

来自网络上的一张图,这里分享给大家!

从 redis 简介到Redis BAT面试集结,看阿里P7架构师如何从容应对

1. String

常用命令: set,get,decr,incr,mget 等。

String数据结构是简单的key-value类型,value其实不仅可以是String,也可以是数字。 常规key-value缓存应用;

常规计数:微博数,粉丝数等。

2.Hash

常用命令: hget,hset,hgetall 等。

Hash 是一个 string 类型的 fifield 和 value 的映射表,hash 特别适合用于存储对象,后续操作的时候,你可以直接仅

仅修改这个对象中的某个字段的值。 比如我们可以Hash数据结构来存储用户信息,商品信息等等。比如下面我就用

hash 类型存放了我本人的一些信息:

3.List

常用命令: lpush,rpush,lpop,rpop,lrange等

key=JavaUser293847 
value={ 
“id”: 1, 
“name”: “SnailClimb”, 
“age”: 22, 
“location”: “Wuhan, Hubei” 

}list 就是链表,Redis list 的应用场景非常多,也是Redis最重要的数据结构之一,比如微博的关注列表,粉丝列表,

消息列表等功能都可以用Redis的 list 结构来实现。

Redis list 的实现为一个双向链表,即可以支持反向查找和遍历,更方便操作,不过带来了部分额外的内存开销。

另外可以通过 lrange 命令,就是从某个元素开始读取多少个元素,可以基于 list 实现分页查询,这个很棒的一个功

能,基于 redis 实现简单的高性能分页,可以做类似微博那种下拉不断分页的东西(一页一页的往下走),性能高。

4.Set

常用命令: sadd,spop,smembers,sunion 等

set 对外提供的功能与list类似是一个列表的功能,特殊之处在于 set 是可以自动排重的。

当你需要存储一个列表数据,又不希望出现重复数据时,set是一个很好的选择,并且set提供了判断某个成员是否在

一个set集合内的重要接口,这个也是list所不能提供的。可以基于 set 轻易实现交集、并集、差集的操作。

比如:在微博应用中,可以将一个用户所有的关注人存在一个集合中,将其所有粉丝存在一个集合。Redis可以非常

方便的实现如共同关注、共同粉丝、共同喜好等功能。这个过程也就是求交集的过程,具体命令如下:

5.Sorted Set

常用命令: zadd,zrange,zrem,zcard等

和set相比,sorted set增加了一个权重参数score,使得集合中的元素能够按score进行有序排列。

举例: 在直播系统中,实时排行信息包含直播间在线用户列表,各种礼物排行榜,弹幕消息(可以理解为按消息维

度的消息排行榜)等信息,适合使用 Redis 中的 SortedSet 结构进行存储。

总结

限于头条篇幅的原因, Redis知识点总结不能完全放出来,原本准备的 Redis知识点有很多,各位可以看下图!

从 redis 简介到Redis BAT面试集结,看阿里P7架构师如何从容应对

从 redis 简介到Redis BAT面试集结,看阿里P7架构师如何从容应对

这个文档已经整理的很详细了!

我这边还整理了关于 Redis 知识点BAT面试集结

从 redis 简介到Redis BAT面试集结,看阿里P7架构师如何从容应对

现在免费送给各位,有需要的朋友可以按照如下方式免费领取!

资料领取方式:关注+转发+收藏后私信【资料】即可免费获取!

猜你喜欢

转载自blog.csdn.net/m0_46995061/article/details/106876590
今日推荐