首页 > 数据库 >Redis原理与应用

Redis原理与应用

时间:2024-07-26 10:54:51浏览次数:10  
标签:缓存 key Redis 数据库 redis 应用 服务器 原理 节点

一 为什么使用redis

1.支持高可用,3.0集群

2.丰富的数据类型

3.完全内存操作,速度快,支持持久化

4.存储数据大,单个key和value可以存储到1G

二 Redis 的持久化方式

redis持久化方式有RDB和AOF  ,RDB是方式是每过几秒保存的是redis数据的快照,但是可能会丢数据,AOF  保存的是所有在redis执行的命令,它会追加到一个文件里面,丢数据可能性小,但会导致文件很大,假如redis宕机了,恢复的时候会很慢,我们一般使用RDB,因为我们对redis的定位就是缓存服务器,很重要的数据我们不会存redis,比如与钱有关系。

三 redis有哪几种数据类型

string ,hash,list,set,zset

四 redis分布式锁底层原理

redis分布式锁其实就是往redis设置一个key和value同时设置一个有效时间,并且redis是单线程的,不会并发操作,(执行任务完成后),再把redis的key删除掉(解锁),但是在使用的过程中可能有2个问题,使用过程中我们必须保证设置key和value和设置时间保证它的原子性(LUA),另外还是锁超时问题,比如:上锁2秒钟,但是任务执行超过2秒,我们一般用redission框架,它底层是lua脚本实现,可以保证设置值和时间的原子性,另外还有

看门狗的机制,watch dog,我们上锁3秒,但是任务执行5秒,它会自动加时间

五 为什么使用分布式锁

因为我们的系统是分布式的,synchronized和lock锁只能是JVM级别的,这个时候需要分布式锁,它实现的思路: redis分布式锁其实就是往redis设置一个key和value同时设置一个有效时间,并且redis是单线程的,不会并发操作,(执行任务完成后),再把redis的key删除掉(解锁),这个过程需要注意的点是,必须保证设置key和value和设置时间保证它的原子性,不然可能出现死锁,另外一方面就是锁任务自动超时问题,所有我们一般用的redisson框架,它完美的帮我们封装了分布式锁,底层是基于LUA脚本实现保证原子性,同时redission

还有watch dog,比如我们上锁3秒,但是任务执行5秒,它会自动加时间

    1.分布式锁{

redis查商品,3

校验随机码,

检验秒杀时间段,

商品id和随机码是不是一样,

检验每人限购数量,

检验库存,3

锁定库存(减库存)

下单消息队列

}

七 redis集群模式

1.主从复制(缺点,主挂掉后,需要人工切换干预,不能保证服务的高可用)

2.哨兵模式(一主多从,主挂掉后,会自动选举主再提供服务,缺点:1.极端情况下网络不是很好的情况,选举需要花时间,可能服务不可用。2. 资源浪费,Redis 数据节点中 slave 节点作为备份节点 )

3.集群模式( Redis Cluster 是 3.0 版后推出的 Redis 分布式集群解决方案 )

1. 数据按照 slot 存储分布在多个节点,节点间数据共享,可动态调整数据分布。

2. 可扩展性:可线性扩展到 1000 多个节点,节点可动态添加或删除。

3. 高可用性:部分节点不可用时,集群仍可用。通过增加 Slave 做 standby 数据副本,能够实现故障自动 failover

八 redis哨兵(Sentinel)模式

redis节点之间通过心跳检测,从服务器(slave)每过一段时间向主服务器(master)发送一个ping命令,主服务器的响应,如果主服务器挂了,所有从服务器通信,有一种算法选举为主,再提供服务

九 redis cluster原理

所有的redis结点都是彼此互联的

客户端连接集群的时候不需要关心分片的计算逻辑,客户端直接将key交给redis中的结点,最终由内部判断key值的正确存储位置

redis集群是吧所有的主节点都交给对应的卡槽去处理【0-16383】,由主节点去维护一批数据。数据主要是被哪个结点维护是判断对应key的取模运算,如果要迁移某个key值,必须将对应的slot(槽)一并迁移

十 redis脑裂问题

redis集群由于网络的原因可能会出现脑裂的问题,脑裂就是因为主服务器、从服务器和哨兵不在同一个网络中,导致哨兵没有及时的检测到主服务的心跳,在这个时候会在从服务器中去选举一个新的主服务器,这样就有两个主服务器了就像大脑分裂一样,但是这样会导致客户依旧 在旧的主服务器中去写东西,而新的主服务器中没有东西。当网络恢复后,哨兵会把旧的主服务器变成从服务器,这个 时候在去同步数据,可能会造成一个数据的丢失

解决方法:

redis中需要加入两个配置

​               (旧版本)

min-slaves-to-write 3    最少有3个从服务器

min-slaves-max-lag 10    数据复制和同步的延迟不超过10秒

    (新版本)

min-replicas-to-write 3

min-replicas-max-lag 10

如果加了这两个配置的话,原来的主服务器当客户端再次进行写操作的时候会拒绝接受,此时就发送到新的主服务器中去了

十一 什么是缓存和数据库双写不一致?怎么解决?

数据的信息和缓存由于并发或者其中一个失败导致不一致

解决方案:我们一般是先修改数据库,再删除缓存,因为我们对redis的定位是缓存,redis可能会丢数据,首先保证我们的数据库必须更新,如果redis删除失败,我们采用补偿策略,比如错误了或失败了,把信息放MQ,做消费补偿

十二 雪崩?

缓存雪崩是指:由于缓存中的数据一下子全部都在同一时间过期了,所以发送过来的全部请求都去请求数据库,导致数据库难以承受而宕机。

解决方法:

- 可以保证 redis高可用,建集群;

- 设置不同的过期时间,防止全部在同一时间过期

十三 穿透?

缓存穿透是指:缓存和数据库中都没有数据,如果有人恶意访问的会先去缓存查询,此时缓存中无数据,后在去数据库中去查询,数据库中也没有,这个时候就会导致数据库宕机

解决方法:

可以在缓存中设置一个null值,让恶意的请求不会直接击垮数据库,每次访问的时候都去访问此缓存。

可以设计一个过滤器,常用的就是布隆过滤器(可以缓解,为什么是缓解,因为使用过滤器还会造成误判的情况)

十四 缓存击穿?

缓存击穿是指:一条数据在查询的时候突然过期了,那么就所有的请求都打在数据库上

解决方法:

加锁,只让一个人去访问数据库并且将访问的数据存入缓存中,供其他的请求来访问

标签:缓存,key,Redis,数据库,redis,应用,服务器,原理,节点
From: https://blog.csdn.net/2401_84479435/article/details/140689264

相关文章

  • IIS同一站点下发布两个或多个net8、net core应用程序池
    IIS同一站点下布两个net8、netcore报“ASP.NETCoredoesnotsupportmultipleappsinthesameapppool”,意思是多个.netcore程序不支持同一个程序池。那我们手动在创建一个程序池,分给另一个应用程序就可以了。步骤如下:1、点击IIS“应用程序池”-》添加应用程序池 2、......
  • 腾讯5位大牛首推的AI应用&大模型方向好书(文末有赠书)
    在人工智能和大模型技术飞速发展的今天,我们有幸见证了AI如何深刻地影响和改变着我们的世界。这场变革不仅可能重塑我们的世界,更在各个领域引发了深远的影响。为了深入理解这场技术变革,把握AI应用的未来趋势,我们特别策划了这一期“大模型&AI应用”主题书单。本期大牛书单,我......
  • 机器学习大模型:引领未来趋势,探索无限应用
    文章目录......
  • Redis缓存面试问题解析:如何有效管理缓存失效策略?
    在技术面试中,Redis缓存是一个常见的话题。面试官往往会考察候选人对缓存机制的理解以及在实际场景中的应用能力。本文将探讨一个在Redis缓存面试中经常被问到的问题,并深入解析其背后的概念和解决方案。面试问题:如何管理Redis缓存的失效策略?问题描述:在高并发的web应用中,缓存是提......
  • 线程的核心原理
    线程调度模型1分时调度模型:系统平均分配CPU时间片,所有线程轮流占用CPU.2抢占式调度模型:系统按照线程优先级来分配CPU时间片,优先级高的线程获取CPU执行时间相对多一些.线程的优先级Thread类里的这个属性privateintpriority代表线程的优先级.优先级值的范围为1-10.......
  • 鸿蒙OS物联网创新应用实训解决方案
    摘要: 随着物联网技术的飞速发展,各种智能设备和传感器正在以前所未有的速度融入我们的日常生活。华为推出的鸿蒙操作系统(HarmonyOS)作为一款面向全场景、多设备、无缝连接的分布式操作系统,为物联网领域带来了全新的机遇与挑战。为了培养具备鸿蒙OS开发能力的物联网人才,唯众......
  • 论振弦式应变计 静力水准仪 拉线位移等产品在隧道在线监测系统解决方案中的应用
    隧道作为现代交通网络的关键组成部分,其**运营至关重要。随着技术的进步和城市化的发展,隧道自动监测系统成为了确保隧道**、提高运营效率的重要工具。方案概述隧道自动监测系统是一套用于实时、连续、全面地监测隧道结构和周边环境变化的**化系统。它能够及时发现潜在的**......
  • 智能语言模型:全球视角下的未来探索与中国的应用
    智能语言模型:全球视角下的未来探索与中国的应用引言近年来,人工智能(AI)语言模型迅速崛起,成为科技领域的明星。这些模型不仅改变了我们与机器交互的方式,还深刻影响了各行各业的工作模式和创新方向。在这篇文章中,我们将深入探讨智能语言模型的全球发展现状,特别关注中国在这一......
  • ScrollView实现原理分析
    ScrollView是Android中用于实现单向滚动功能的布局容器。它只能容纳一个子视图,并且能够使这个子视图在垂直方向(默认)或水平方向上滚动。下面我们将结合源码来分析ScrollView的实现原理。1.ScrollView类定义ScrollView继承自FrameLayout,这意味着它本身是一个布局容器,......
  • ViewPager2实现原理分析
    ViewPager2 是Android开发中用于实现水平滑动视图的组件,它是 ViewPager 的一个改进版,提供了更多的功能和更好的性能。下面,我们将结合源码来简要分析 ViewPager2 的实现原理。1.基本架构ViewPager2 的主要架构基于 RecyclerView,它利用了 RecyclerView 的滚动、布......