redis学习+安装+面试总结+集成springboot

目录

一 redis简介

二 redis的基本数据结构类型

三 Redis 缓存穿透、缓存击穿、缓存雪崩

3.1 缓存穿透:

3.2 缓存击穿

3.3 缓存雪崩

常见问题:

四 集成springboot单机与集群

一 redis简介

        redis是一个开源的、使用C语言编写的、支持网络交互的、可基于内存也可持久化的Key-Value数据库。

redis的官网地址:Redis

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

二 redis的基本数据结构类型

Redis主要有以下这五种基本类型:

1 String(字符串)

        它是二进制安全的,可以存储图片或者序列化的对象,值最大存储为512M,常用命令:set,get,decr,incr,mget 等。String数据结构是简单的key-value类型,value其实不仅可以是String,也可以是数字。 常规key-value缓存应用:常规计数、定时器并发控制等。

        应用场景共享session、分布式锁,计数器、限流。


2 Hash(哈希):

        Hash是一个 string 类型的 field 和 value 的映射表,hash 特别适合用于存储对象,后续操作的时候,你可以直接仅仅修改这个对象中的某个字段的值。 比如我们可以用 hash 数据结构来存储地址信息等。

        应用场景:缓存用户信息等。

3 List(列表):

        数据存储需求:存储多个数据,并对数据进入存储空间的顺序进行区分需要的存储数据:一个存储空间保存多个数据,且通过数据可以体现进入顺序list类型:保存多个数据,底层使用双向链表存储结构实现

        应用场景:消息队列,文章列表,可参考如下:

                lpush+lpop=Stack(栈)

                lpush+rpop=Queue(队列)

                lpsh+ltrim=Capped Collection(有限集合)

                lpush+brpop=Message Queue(消息队列)

4 Set(集合):

        数据存储需求:存储多个数据,并对数据进入存储空间的顺序进行区分。
        需要的存储数据:一个存储空间保存多个数据,且通过数据可以体现进入顺序。
        list类型:保存多个数据,底层使用双向链表存储结构实现。

        应用场景:排行榜,社交需求(如用户点赞)

        


5 zset(有序集合):

  • 简介:已排序的字符串集合,同时元素不能重复
  • 新的存储需求:根据排序有利于数据的有效显示,需要提供一种可以根据自身特征进行排序的方式。
  • 需要的存储结构:新的存储模型,可以保存可排序的数据。
  • sorted_set类型:在set的存储结构基础上添加可排序字段。
  • 应用场景:用户标签,生成随机数抽奖、社交需求。

此外,它还有三种特殊的数据结构类型,如下:

  • Geospatial
  • Hyperloglog
  • Bitmap

三 Redis 缓存穿透、缓存击穿、缓存雪崩

3.1 缓存穿透:

        访问一个不存在的key,每次针对此 key的请求从缓存获取不到,请求转发到数据库,访问量大了可能压垮数据库。比如用一个不存在的用户 id 获取用户信息,redis缓存和数据库中都没有,若黑客利用此漏洞进行攻击可能压垮数据库(黑客访问肯定不存在的数据,造成服务器压力大)

        简单一句话:穿过缓存,直接访问数据库

造成影响:

        1 数据库压力变大

        2 redis命中率变低,从而不断查询数据库

解决方案:

        缓存空值(null)或默认值,使用布隆过滤器请求白名单

3.2 缓存击穿

        当某一key的缓存过期时,大并发量的请求同时访问此key,瞬间击穿缓存服务器直接访问数据库,让数据库处于负载的情况。

        解决方案:

                异步定时更新
                可以对该热点key进行异步定时更新数据,比如某一个热点数据的过期时间是1小时,那么每59分钟,通过定时任务去更新这个热点key,并重新设置其过期时间。
                互斥锁
                简单来说就是当Redis中根据key获得的value值为空时,先锁上,然后从数据库加载,加载完毕,释放锁。若其他线程也在请求该key时,发现获取锁失败,则先阻塞。

3.3 缓存雪崩

        当大量缓存同时过期或缓存服务宕机,所有请求的都直接访问数据库,造成数据库高负载,影响性能,甚至数据库宕机。

解决方案:

  • 可以把不同的key过期时间设置成不同的, 并且通过定时刷新的方式更新过期时间。
  • 构建缓存高可用集群(针对缓存服务故障情况)。
  • 当缓存雪崩发生时,服务熔断、限流、降级等措施保障

常见问题:

1 什么是哨兵模式?

       用于监控redis集群中Master主服务器工作的状态,在Master主服务器发生故障的时候,可以实现Master和Slave服务器的切换,保证系统的高可用(HA)
其已经被集成在redis2.6+的版本中,Redis的哨兵模式到了2.8版本之后就稳定了下来。

2 哨兵进程有啥作用?

1 监控(Monitoring): 哨兵(sentinel) 会不断地检查你的Master和Slave是否运作正常。

2 提醒(Notification):当被监控的某个Redis节点出现问题时, 哨兵(sentinel) 可以通过 API 向管理员或者其他应用程序发送通知。

3 Redis 的持久化机制有哪些?优缺点说说

Redis是基于内存的非关系型K-V数据库,既然它是基于内存的,如果Redis服务器挂了,数据就会丢失。为了避免数据丢失了,Redis提供了持久化,即把数据保存到磁盘

Redis提供了RDB和AOF两种持久化机制,它持久化文件加载流程如下:

RDB:就是把内存数据以快照的形式保存到磁盘上。

什么是快照?可以这样理解,给当前时刻的数据,拍一张照片,然后保存下来。

RDB持久化,是指在指定的时间间隔内,执行指定次数的写操作,将内存中的数据集快照写入磁盘中,它是Redis默认的持久化方式。执行完操作后,在指定目录下会生成一个dump.rdb文件,Redis 重启的时候,通过加载dump.rdb文件来恢复数据。RDB触发机制主要有以下几种:

RDB 的优点

  • 适合大规模的数据恢复场景,如备份,全量复制等

RDB缺点

  • 没办法做到实时持久化/秒级持久化。
  • 新老版本存在RDB格式兼容问题

AOF(append only file) 持久化,采用日志的形式来记录每个写操作,追加到文件中,重启时再重新执行AOF文件中的命令来恢复数据。它主要解决数据持久化的实时性问题。默认是不开启的。

AOF的优点

  • 数据的一致性和完整性更高

AOF的缺点

  • AOF记录的内容越多,文件越大,数据恢复变慢。

总结:

RDB以快照形式存储,AOF以日志形式存储

RDB适合大规模的数据恢复场景,默认开启,没办法做到实时持久化/秒级持久化

AOF可以做到持久化的实时性问题,默认是不开启的,数据的一致性和完整性更高

四 集成springboot+window搭建

Springboot集成redis单机与集群icon-default.png?t=N6B9https://blog.csdn.net/ytyDaMoTou/article/details/132467943

windows下安装redisicon-default.png?t=N6B9https://blog.csdn.net/ytyDaMoTou/article/details/130789355

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天雨编程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值