太牛了,值得收藏!7000字22张图,精讲 Redis 知识!

避坑指南:AUTOSAR FlashDriver操作DFlash模拟EEPROM时,你最容易忽略的5个细节 本文深入探讨了AUTOSAR FlashDriver在DFlash模拟EEPROM操作中最容易被忽视的五大细节问题,包括地址合法性检查、操作时序控制、并发访问冲突、电源稳定性管理和寿命管理。通过实际项目案例和工程化解决方案,帮助开发者避免常见陷阱,提升汽车电子控制单元(ECU)的可靠性和稳定性。 阅读详情

f75ad5f6c0cf84473ac0a9993d5993e3.png

今天我们来分享 Redis 相关的知识,文章有点长,一定要看到最后呦!

前言

Redis 在当今的计算机行业,可以说是使用的最为广泛的内存数据库,几乎所有的后端技术面试都会涉及到 Redis 相关的知识,正所谓知己知彼,百战百胜。今天咱们就来盘一盘 Redis,从基础面试题到各种特性、功能,做一次一网打尽式的服务!

843b14a2f9a5ce009b56fb3c5ac13a75.png

什么是 Redis

Redis 是用 C 语言开发的一个开源的高性能键值对(key-value)数据库。通常建议在 Linux 上运行,它通过提供多种键值数据类型来适应不同场景下的存储需求,数据存储在内存中,也可持久化到磁盘中,目前为止 Redis 支持的键值数据类型如下:

  • 字符串类型

  • 散列类型

  • 列表类型

  • 集合类型

  • 有序集合类型

Redis 特色

Redis 是用 C 语言写的开源项目,又由于数据都在内存中,所以读写速度非常快

849a82e646b3f32a4fee6e5720a7e9a0.png

Redis 所有数据保存在内存中,对数据的更新会异步地保存到磁盘上,这样可以做到断电不丢失数据

Redis 主从复制可以实现高可用和分布式

c8ef96a43634d47f2e2c33a81539f1a2.png

Redis 数据结构

字符串

String 是 Redis 当中最为基本的数据类型,最大512M,是二进制安全的

Redis 的字符串是动态字符串,是可以修改的,内部结构实现上类似于 Java 的 ArrayList,采用预分配冗余空间的方式来减少内存的频繁分配,内存为当前字符串实际分配的空间,一般要高于实际字符串长度。当字符串长度小于 1M 时,扩容都是加倍现有的空间,如果超过 1M,扩容时一次只会多扩 1M 的空间

使用场景:记录用户页面访问量、缓存基本数据、分布式 Id 生成器

散列

Redis 当中的 Hash 相当于 Java 的 HashMap,无序字典,内部实现是用数组+链表,第一维的数组出现碰撞,则存到链表里面去。Rehash 的时候,为了不阻塞服务,采用的是渐进式的 Rehash,保留2个 Hash,逐渐在指令执行或者定时任务中,将数据从老的 Hash 迁移到新的 Hash

9fa3d3a0732e355684bb366e048c73da.png

使用场景:购物车、频繁变化的属性

列表

Redis 的列表按照插入顺序排序,相当于 Java 语言里面的 LinkedList,注意它是链表而不是数组。这意味着 list 的插入和删除操作非常快,时间复杂度为 O(1),但是索引定位很慢,时间复杂度为O(n)。当列表弹出了最后一个元素之后,该数据结构自动被删除,内存被回收

Redis 的列表结构常用来做异步队列使用,将需要延后处理的任务结构体序列化成字符串塞进 Redis 的列表,另一个线程从这个列表中轮询数据进行处理

列表不同进出栈的方式,产生的不同数据结构

  • LPUSH+LPOP = 栈

  • LPUSH+RPOP = 队列

  • LPUSH+ LTRIM = 固定数量的列表

  • LPUSH +BRPOP = 消息队列

使用场景:异步队列

无序集合

set 相当于 Java 的 HashSet,无序的键值对,不过其值都是NULL,键不可以重复。数据量较少且是整数的时候用有序数组,较大的时候采用散列表

应用场景:标签、社交、随机数

有序集合

zset 可能是 Redis 提供的最为特色的数据结构,它类似于 Java 的 SortedSet 和 HashMap 的结合体,一方面它是一个 set,保证了内部 value 的唯一性,另一方面它可以给每个 value 赋予一个 score,代表这个 value 的排序权重。

它的内部实现用的是一种叫「跳跃列表」的数据结构,之所以「跳跃」,是因为内部的元素可能「身兼数职」

911b48f180aea63fab81515acb0f5071.png

一个元素,同时处于 L0、L1 和 L2 层,可以快速在不同层次之间进行「跳跃」,定位插入点时,先在顶层进行定位,然后下潜到下一级定位,一直下潜到最底层找到合适的位置,将新元素插进去

应用场景:value 为粉丝 ID,score 是关注时间,可以按照关注时间顺序给出粉丝 ID;value 是学生 ID,score 是其分数,可以按照分数排序

Redis 持久化

Redis 提供了两种持久化的方式,分别是RDB(Redis DataBase)和AOF(Append Only File)

RDB,简而言之,就是在不同的时间点,将 Redis 存储的数据生成快照并存储到磁盘等介质上

AOF,则是换了一个角度来实现持久化,那就是将 Redis 执行过的所有写指令记录下来,在下次 Redis 重新启动时,只要把这些写指令从前到后再重复执行一遍,就可以实现数据恢复了

其实 RDB 和 AOF 两种方式也可以同时使用,在这种情况下,如果 Redis 重启的话,则会优先采用 AOF 方式来进行数据恢复,这是因为 AOF 方式的数据恢复完整度更高

AOF 有一个配置属性 sync,就是用来同步命令到磁盘的,如果我们对于 Redis 的性能要求不高,则可以在每条写指令时都 sync 一下磁盘,这样即使在突然断电的情况下,也能保证数据的最小丢失率

RDB

RDB 是将 Redis 某一时刻的数据持久化到磁盘中,是一种快照式的持久化方法

Redis 在进行数据持久化的过程中,会先将数据写入到一个临时文件中,待持久化过程都结束了,才会用这个临时文件替换上次持久化好的文件。正是这种特性,让我们可以随时来进行备份,因为快照文件总是完整可用的

对于 RDB 方式,Redis 会单独创建(fork)一个子进程来进行持久化,而主进程是不会进行任何 IO 操作的,这样就确保了 Redis 极高的性能,子进程创建后,父子进程共享数据段,父进程继续提供读写服务,写脏的页面数据会逐渐和子进程分离开来

如果需要进行大规模数据的恢复,且对于数据恢复的完整性不是非常敏感,那 RDB 方式要比 AOF 方式更加的高效

AOF

AOF,英文是 Append Only File,即只允许追加不允许改写的文件

如前面介绍的,AOF 方式是将执行过的写指令记录下来,在数据恢复时按照从前到后的顺序再将指令都执行一遍,就这么简单

默认的 AOF 持久化策略是每秒钟 fsync 一次(fsync是指把缓存中的写指令记录到磁盘中),因为在这种情况下,Redis 仍然可以保持很好的处理性能,即使 Redis 故障,也只会丢失最近1秒钟的数据

RDB 与 AOF 比较

cd899e9c5ef787c6cd1e871d2ef4d2a5.png

Redis 主从

Redis 是支持主从同步的,而且也支持一主多从以及多级从结构

主从结构,一是为了纯粹的冗余备份,二是为了提升读性能,比如很消耗性能的 sort 就可以由从服务器来承担

Redis 的主从同步是异步进行的,这意味着主从同步不会影响主逻辑,也不会降低 Redis 的处理性能

主从架构中,可以考虑关闭主服务器的数据持久化功能,只让从服务器进行持久化,这样可以提高主服务器的处理性能

在主从架构中,从服务器通常被设置为只读模式,这样可以避免从服务器的数据被误修改。但是从服务器仍然可以接受 CONFIG 等指令,所以还是不应该将从服务器直接暴露到不安全的网络环境中

旧版复制功能

Redis 的复制功能分为同步(sync)和命令传播(command propagate)两个操作:

  • 同步操作用于将从服务器的数据库状态更新至主服务器当前所处的数据库状态

  • 命令传播操作则用于在主服务器的数据库状态被修改,导致主从服务器的数据库状态出现不一致时,让主从服务器的数据库重新回到一致状态

同步过程

当客户端向从服务器发送 SLAVEOF 命令,要求从服务器复制主服务器时,从服务器首先需要执行同步操作,也就是将从服务器的数据库状态更新至主服务器当前所处的数据库状态

ac95140fe17e4e86c271510544d3f0b4.png

从服务器对主服务器的同步操作需要通过向主服务器发送 SYNC 命令来完成,以下是 SYNC 命令的执行步骤:

  • 1)从服务器向主服务器发送 SYNC 命令

  • 2)收到 SYNC 命令的主服务器执行 BGSAVE 命令,在后台生成一个 RDB 文件,并使用一个缓冲区记录从现在开始执行的所有写命令

  • 3)当主服务器的 BGSAVE 命令执行完毕时,主服务器会将 BGSAVE 命令生成的 RDB 文件发送给从服务器,从服务器接收并载入这个 RDB 文件,将自己的数据库状态更新至主服务器执行 BGSAVE 命令时的数据库状态

  • 4)主服务器将记录在缓冲区里面的所有写命令发送给从服务器,从服务器执行这些写命令,将自己的数据库状态更新至主服务器数据库当前所处的状态

缺点

这种复制功能,虽然可以很好的完成主备之间的数据同步,但是效率确实非常低的

每次执行 SYNC 命令,主从服务器需要执行以下动作:

  • 1)主服务器需要执行 BGSAVE 命令来生成 RDB 文件,这个生成操作会耗费主服务器大量的 CPU、内存和磁盘 I/O 资源

  • 2)主服务器需要将自己生成的 RDB 文件发送给从服务器,这个发送操作会耗费主从服务器大量的网络资源(带宽和流量),并对主服务器响应命令请求的时间产生影响

  • 3)接收到 RDB 文件的从服务器需要载入主服务器发来的 RDB文件,并且在载入期间,从服务器会因为阻塞而没办法处理命令请求

  • 4)BGSAVE 命令产生的 RDB 文件是主服务器锁包含的所有数据,这是一个全量过程

因为 SYNC 命令是一个如此耗费资源的操作,所以 Redis 有必要 保证在真正有需要时才执行 SYNC 命令

新版复制功能

为了解决旧版本复制功能的低效问题,Redis 从2.8版本开始,使用 PSYNC 命令代替 SYNC 命令来执行复制时的同步操作

feb6cb2326bbc81ebec8fcc2d97ecfef.png

PSYNC 命令具有完整重同步(full resynchronization)和部分重同步(partial resynchronization)两种模式:

  • 完整重同步用于处理初次复制情况:完整重同步的执行步骤SYN命令的执行步骤基本一样,它们都是通过让主服务器创建并发RD文件,以及向从服务器发送保存在缓冲区里面的写命令来进行同步

  • 部分重同步则用于处理断线后重复制情况:当从服务器在断线后重新连接主服务器时,如果条件允许,主服务器可以将主从服务器连接断开期间执行的写命令发送给从服务器,从服务器只要接收并执行这些写命令,就可以将数据库更新至主服务器当前所处的状态

PSYNC 命令的部分重同步模式解决了旧版复制功能在处理断线后 重复制时出现的低效情况,即采用增量同步的形式,大大节省了服务器资源

哨兵与集群

Redis Sentinal 主要用于高可用,在 master 宕机时会自动将 slave 提升为 master,继续提供服务

Redis Cluster 则侧重于扩展性,在单个 Redis 内存不足时,使用 Cluster 进行分片存储

Redis Sentinal

Sentinel(哨岗、哨兵)是 Redis 的高可用性(high availability)解决方案:由一个或多个 Sentinel 实例组成的 Sentinel 系统可以监视任意多个主服务器,以及这些主服务器属下的所有从服务器,并在被监视的主服务器进入下线状态时,自动将下线主服务器属下的某个从服务器升级为新的主服务器,然后由新的主服务器代替已下线的主服务器继续处理命令请求

35f71fae0c4e475c0f234b11d2d17408.png

初始状态下,Server1 为主服务器,其余为从服务器

3926cd4f0c9184a8a07c995f1e430002.png

假设这时,主服务器 Server1 进入下线状态,那么从服务器 Server2、Server3、Server4 对主服务器的复制操作将被中止,并且 Sentinel 系统会察觉到 Server1 已下线

当 Server1 的下线时长超过用户设定的下线时长上限时,Sentinel 系统就会对 Server1 执行故障转移操作:

  • 首先,Sentinel 系统会挑选 Server1 属下的其中一个从服务器,并将这个被选中的从服务器升级为新的主服务器

  • 之后,Sentinel 系统会向 Server1 属下的所有从服务器发送新的复制指令,让它们成为新的主服务器的从服务器,当所有从服务器都开始复制新的主服务器时,故障转移操作执行完毕

  • 另外,Sentinel 还会继续监视已下线的 Server1,并在它重新上线时,将它设置为新的主服务器的从服务器

选取新主

5b4bef97206942fdc63fd3464d5054eb.png

老主恢复,降为从服务器

4d54380fb151d83e14b1626417ed9d31.png

Redis Cluster

Redis 集群是 Redis 提供的分布式数据库方案,集群通过分片(sharding)来进行数据共享,并提供复制和故障转移功能

Redis Cluser 采用虚拟槽分区,所有的键根据哈希函数映射到0~16383整数槽内,计算公式:slot=CRC16(key)&16383

每一个节点负责维护一部分槽以及槽所映射的键值数据

18b633897ccb5778d99599f8ea019484.png

a45291a95bf8c7d103394889b308a9bf.png

Redis 虚拟槽分区解耦了数据与节点之间的关系,简化了节点扩容和收缩的难度

当然 Redis 集群也有很多功能上的限制

  • 1)key 批量操作支持有限。如 mset、mget,目前只支持具有相同 slot 值的 key 执行批量操作。对于映射为不同 slot 值的 key 由于执行 mget、mget 等操作可能存在于多个节点上因此不被支持

  • 2)key 事务操作支持有限。同理只支持多 key 在同一节点上的事务操作,当多个 key 分布在不同的节点上时无法使用事务功能

  • 3)key 作为数据分区的最小粒度,因此不能将一个大的键值对象如 hash、list 等映射到不同的节点

  • 4)不支持多数据库空间。单机下的 Redis 可以支持16个数据库,集群模式下只能使用一个数据库空间,即db0

  • 5)复制结构只支持一层,从节点只能复制主节点,不支持嵌套树状复制结构

更新策略

缓存中的数据通常都是有生命周期的,需要在指定时间后被删除或更 新,这样可以保证缓存空间在一个可控的范围。但是缓存中的数据会和数据源中的真实数据有一段时间窗口的不一致,需要利用某些策略进行更新。

下面介绍 Redis 常用的三种缓存更新策略

LRU/LFU/FIFO 算法剔除

剔除算法通常用于缓存使用量超过了预设的最大值的时候,如何对现有的数据进行剔除,例如使用 maxmemory-policy 这个配置作为内存最大值后对于数据的剔除策略

超时删除

超时剔除通过给缓存数据设置过期时间,让其在过期时间后自动删除,例如 Redis 提供的 expire 命令。如果业务可以容忍一段时间内,缓存层数据和存储层数据不一致,那么可以为其设置过期时间。在数据过期后,再从真实数据源获取数据,重新放到缓存并设置过期时间

主动更新

应用方对于数据的一致性要求高,需要在真实数据更新后,立即更新缓存数据。例如可以利用消息系统或者其他方式通知缓存更新

更新策略对比

0a79ef13551b44fead132553d0cc9d9b.png

从上面的横向对比数据,我们可以得出如下建议配置

  • 低一致性业务建议配置最大内存和淘汰策略的方式

  • 高一致性业务可以结合使用超时剔除和主动更新,这样即使主动更新出了问题,也能保证数据过期时间后删除脏数据

Redis 缓存雪崩、击穿和穿透

这是三个 Redis 最为常见的三个问题,我们逐一来了解下

1.雪崩

什么是雪崩

由于缓存层承载着大量请求,有效地保护了存储层,但是如果缓存层由于某些原因不能提供服务,于是所有的请求都会达到存储层,存储层的调用量会暴增,造成存储层也会级联宕机的情况

af27d1f7eef81794d597b40d07bbc451.png

预防和解决办法
  1. 保证缓存层服务高可用性

出现服务不可用的情况,我们第一时间想到的肯定是高可用,甚至是异地容灾等机制

  1. 依赖隔离组件为后端限流并降级

无论是缓存层还是存储层都会有出错的概率,可以将它们视同为资源。作为并发量较大的系统,假如有一个资源不可用,可能会造成线程全部阻塞(hang)在这个资源上,造成整个系统不可用。降级机制在高并发系统中是非常普遍的:比如推荐服务中,如果个性化推荐服务不可用,可以降级补充热点数据,不至于造成前端页面开天窗

  1. 数据预热

针对大量缓存同时过期的情况,可以通过缓存 reload 机制,预选去更新缓存,在即将发生大并发访问前手动触发加载缓存不同的 key,设置不同的过期时间,让缓存失效的时间点尽量均匀

2.击穿

如果缓存中的某个热点数据过期了,此时大量的请求访问了该热点数据,就无法从缓存中读取,直接访问数据库,数据库很容易就被高并发的请求冲垮,这就是缓存击穿的问题

击穿其实可以看做是雪崩的一个子集,解决方法一般有两种,设置热点数据永不过期和设置互斥锁

所谓的互斥锁,就是保证同一时间只有一个业务线程更新缓存,对于没有获取互斥锁的请求,要么等待锁释放后重新读取缓存,要么就返回空值或者默认值

228848fc644a0406c599ec59a5491cb8.png

3.穿透

缓存穿透是指查询一个根本不存在的数据,缓存层和存储层都不会命 中,导致请求在访问缓存时,发现缓存缺失,再去访问数据库时,发现数据库中也没有要访问的数据,没办法构建缓存数据,来服务后续的请求。那么当有大量这样的请求到来时,数据库的压力骤增,产生穿透问题

缓存穿透问题可能会使后端存储负载加大,由于很多后端存储不具备高 并发性,甚至可能造成后端存储宕掉

6c325bf6a17f14148c855ba3c3e1d6e0.png

解决方案
  1. 缓存空对象

当存储层不命中后,仍然将空对象保留到缓存层中,之后再访问这个数据将会从缓存中获取,这样就保护了后端数据源

95e1b31360b0ccce6e8883c93f015c90.png

当然缓存空对象会有两个问题:

第一,空值做了缓存,意味着缓存层中存了更多的键,需要更多的内存空间(如果是攻击,问题更严重),比较有效的方法是针对这类数据设置一个较短的过期时间,让其自动剔除

第二,缓存层和存储层的数据会有一段时间窗口的不一致,可能会对业务有一定影响。例如过期时间设置为5分钟,如果此时存储层添加了这个数据,那此段时间就会出现缓存层和存储层数据的不一致,此时可以利用消息系统或者其他方式清除掉缓存层中的空对象

  1. 布隆过滤器拦截

在访问缓存层和存储层之前,将存在的 key 用布隆过滤器提前保存起来,做第一层拦截,即使发生了缓存穿透,大量请求只会查询 Redis 和布隆过滤器,而不会查询数据库,保证了数据库能正常运行

80b537352133cda2c7faac2cb77b47ef.png

这种方法适用于数据命中不高、数据相对固定、实时性低(通常是数据 集较大)的应用场景,代码维护较为复杂,但是缓存空间占用少

缓存空对象与布隆过滤器比较

44271e9fa5ec2f650ae0d72a7910737f.png

好了,redis的功能还是非常强大的,尤其是在一些秒杀的系统或者是需要高速访问的地方,用mysql会比较慢,我们上次写了一个简单的小应用,里面就用到redis.(女友想买个手机!我用Python做了个比价机器人了!)

这就是今天的内容,如果你觉得对你有所帮助,就点赞+在看支持一下吧~

也欢迎大家关注我们的视频号,里面有很多好玩的视频。


 
推荐阅读:
入门: 最全的零基础学Python的问题  | 零基础学了8个月的Python  | 实战项目 |学Python就是这条捷径
干货:爬取豆瓣短评,电影《后来的我们》 | 38年NBA最佳球员分析 |   从万众期待到口碑扑街!唐探3令人失望  | 笑看新倚天屠龙记 | 灯谜答题王 |用Python做个海量小姐姐素描图 |碟中谍这么火,我用机器学习做个迷你推荐系统电影
趣味:弹球游戏  | 九宫格  | 漂亮的花 | 两百行Python《天天酷跑》游戏!
AI: 会做诗的机器人 | 给图片上色 | 预测收入 | 碟中谍这么火,我用机器学习做个迷你推荐系统电影
小工具: Pdf转Word,轻松搞定表格和水印! | 一键把html网页保存为pdf!|  再见PDF提取收费! | 用90行代码打造最强PDF转换器,word、PPT、excel、markdown、html一键转换 | 制作一款钉钉低价机票提示器! |60行代码做了一个语音壁纸切换器天天看小姐姐!|

年度爆款文案

点阅读原文,看200个Python案例!

如何在Ubuntu 22.04上为AlphaFold3配置NVIDIA A100 GPU(含驱动安装避坑指南) 本文提供了在Ubuntu 22.04系统上为AlphaFold3部署NVIDIA A100 GPU的完整安装教程。内容涵盖从系统环境准备、NVIDIA驱动安装与避坑指南,到Docker容器化部署、数据库获取以及最终构建运行AlphaFold3的详细步骤,旨在帮助研究者和开发者高效配置高性能计算环境,充分发挥A100的硬件潜力。 阅读详情

相关推荐

【ArcGIS Add-in编程】如何创建ArcMap的下拉菜单插件

step1. VS2010中创建一个空的解决方案step2.创建一个项目 直接点击finish。step3 为该项目创建项目,选择Menu,作为根菜单,而后修改xml中的items项,添加需要放在下拉菜单中的项目,例如一个按钮; step4 现在可以创建项目,作为菜单中的项目。为该项目添加新的项目,选择button 此时 xml文件中,多了该button的项目,将该项目添加到items

吃货小跟班的博客 4431

Redis思维导图分享(包含详细知识点)

本文将Redis整理成思维导图,方便知识归纳与查询

xujunkai66的博客 2458

CATIA高效设计:自定义快捷键全攻略

本文详细介绍了如何在CATIA中自定义快捷键以提升设计效率。通过减少鼠标依赖、优化工作流程和减轻手腕疲劳,合理设置快捷键可显著提高建模速度。文章提供了从基础设置到高级配置的全流程指南,包括解决冲突、推荐方案及外设扩展建议,帮助用户快速掌握CATIA高效设计技巧。

weixin_42648844的博客 584

redis知识图谱总结

前言 面试 在面很多高级岗位的时候,面试官会时不时来句redis底层数据结构,以及各种扩展,例如: 得物高工技术终面:redis数据结构底层实现 再如我面过很多大厂也会问我rehash,我当时???好吧,尽量完善自己的知识图谱 redis数据结构 本博客主要是观看《redis设计与实现》,然后进行个人的学习总结~ sds simple dynamic string 它是字符串实现数据结构,特点:会保存使用字节的数量,以及未使用的字节的数量 好处:不会内存溢出,比如说缓冲区,既然我已经有了这个数值,你如果

大鸡腿的博客 1078

DDR5 输入时钟抖动规范全解析!技术宅必看

简单说,时钟抖动就是时钟信号边沿的“颤抖”——信号本来应该在某个固定时间跳变,但实际时刻可能会前后波动。这种波动可能是随机的,也可能是确定性的。随机抖动(Random Jitter, Rj):符合高斯分布,像是你家猫咪不经意的晃动。确定性抖动(Deterministic Jitter, Dj):受限于特定周期或模式,像是邻居装修时的规律敲击声。⚠️ 注意,如果时钟抖动超出规格,DDR5可能无法正确接收或发送数据,内存错误、系统崩溃可就跟着来了!

weixin_43199439的博客 391

STM32 cubeMX配置串口重定向

这篇文章主要讲解什么是串口重定向,为什么要串口串口重定向。使用printf函数和上位机通信是非常的方便的。希望大家都能够掌握。

m0_49476241的博客 4572

Redis 知识图谱

原文发表于AlphaWang独立博客:http://alphawang.com/ 最近梳理了下 Redis 知识图谱,画了个脑图,涵盖了 Redis 数据类型、持久化机制、主从、哨兵、集群、应用及运维;具体见下图: ...

Alpha's 学习笔记 2215

Vue3 - 完美解决高德地图定位失败 Get ipLocation failed.Geolocation permission denied.(获取ipLocation失败。地理定位权限被拒绝。)

Get ipLocation failed.Geolocation permission denied.,vue3引入高德地图当前定位失败 ,vue3中使用高德地图定位报错,高德地图API用户定位失败,高德地图H5 定位失败报错排查和解决方案,微信公众号H5网页高德地图定位报错,谷歌浏览器-高德地图定位失败geolocation,getCurrentPosition 返回的 message报错,如何解决此问题,uniapp h5高德地图,微信、QQ等内置浏览器定位失败,高德地图实现实时用户位置定位,引入高德

🏆 前端领域优质创作者 4171

目前最全的Redis知识点及面试题汇总

Redis(全称为REmote DIctionary Server)是一个由Salvatore Sanfilippo写的key-value存储系统。Redis是一个开源的使用ANSI C语言编写、遵守BSD协议、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。它通常被称为数据结构服务器,因为值(value)可以是 字符串(String), 哈希(Map),...

shuningzhang的专栏 6153

基于STM32L4XX 、HAL库的DRV8833RTYR步进电机驱动器驱动程序应用设计

/ 注:具体计算取决于你的定时器配置,例如 Period=1000, duty_cycle 0-100 -> compare_value = duty_cycle * 10。// 控制电机方向/停止/刹车。//================== 硬件引脚映射 (请根据实际电路修改) ==================

PP_Cottage的博客 180

基于STM32设计的ECG+PPG人体参数测量系统(华为云IOT)(217)

该系统的核心是基于STM32F103RCT6微控制器,这是一种高性能、低功耗的嵌入式处理器,适用于各种复杂的控制和数据处理任务。系统利用先进的传感器技术,如光电传感器PulseSensor模块来准确测量人体脉搏血氧饱和度及心率(PPG),同时采用AD8232生物电信号采集模块捕捉并处理人体的心电图信号(ECG),从而全面反映用户的心脏活动状态。

1万+

通俗易懂的Redis数据结构基础教程

Redis有5个基本数据结构,string、list、hash、set和zset。它们是日常开发中使用频率非常高应用最为广泛的数据结构,把这5个数据结构都吃透了,你就掌握了Redis应用知识的一半了。 string 首先我们从string谈起。string表示的是一个可变的字节数组,我们初始化字符串的内容、可以拿到字符串的长度,可以获取string的子串,可以覆盖string的子串内容,可以追...

weixin_34245749的博客 765

WPF进阶 | 深入 WPF 依赖项属性:理解其强大功能与应用场景

WPF进阶 | 深入 WPF 依赖项属性:理解其强大功能与应用场景,在 Windows Presentation Foundation(WPF)开发中,依赖项属性是一个核心且强大的特性,它为构建灵活、可扩展的用户界面提供了关键支持。理解并熟练运用依赖项属性,对于开发高效、健壮的 WPF 应用程序至关重要。本文将深入探讨 WPF 依赖项属性,通过丰富的代码示例和对关键概念的详细解释,帮助读者全面掌握这一重要特性及其应用场景。

不踩坑,不知道坑有多深;不总结,踩过的坑白踩。 4万+

Ubuntu 22 redis集群搭建

物理机分别为:端口以7开头是因为用的是redis7192.168.56.120 需要开放的端口 7000 70001 70002 17000 170001 170002192.168.56.121 需要开放的端口 7100 71001 71002 17100 171001 171002。

z583773315的专栏 379

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

被公司辞退拿了22万补偿金,原东家称回来后每月涨薪7000,只要退还22万

点击上方“Java基基”,选择“设为星标”做积极的人,而不是积极废人!每天14:00更新文章,每天掉亿点点头发...源码精品专栏原创 | Java 2021超神之路,很肝~中文详细注释的开源项目RPC 框架 Dubbo 源码解析网络应用框架 Netty 源码解析消息中间件 RocketMQ 源码解析数据库中间件 Sharding-JDBC 和 MyCAT 源码解析...

weixin_44421461的博客 180

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

如何在 Ubuntu 22.04 上部署并优化 Redis 集群,提升大规模缓存系统的读写能力与容错性

A5数据通过以上步骤与优化策略,我们构建了一个具备高读写性能、高可用性与容错能力的 Redis 集群系统。多节点并行分片提高了整体 QPS 能力。系统与 TCP 栈层面的优化减少了延迟与网络抖动。持久化策略在保证性能的同时兼顾数据安全。集群故障转移机制提高了服务可靠性。Redis 集群适合大规模缓存场景,在实际生产部署时配合监控、自动化运维脚本与容量规划,可以进一步提升系统稳定性与业务支撑能力。上述具体参数、代码配置与性能数据均可用于参考或直接落地实施。

A5数据 1069

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Redis小知识点

主从配置 bind作用: bind是绑定本地的一个网卡,只有来自这个网卡的请求才会处理,否则拒接连接。 主: redis.config bind :ip 本机ip port:6379 默认端口 redis-server config 从:可以有多个,从还可以有从 salve.config bind :ip 本机ip,可以和从不属于同一机器 port :6378 如果是同一机器就必须更改端口 slaveof :47。100.179.209 6379 配置主的ip和端口号 集群配置 最少是3个,可

某人的博客 220

Redis--基础知识点--22--实战:docker 搭建 redis 的单机模式/主从模式/哨兵模式/集群模式

1 主从复制 2. Redis集群设计原理 Redis集群设计包括2部分:哈希Slot和节点主从,本篇博文通过3张图来搞明白Redis的集群设计。 节点主从: 主从设计不算什么新鲜玩意,在数据库中我们也经常用主从来做读写分离,直接上图: 图上能看得到的信息: 只有1个Master,可以有N个slaver,而且Slaver也可以有自己的Slaver,由于这种主从的关系决定他们是在配置阶段就要指定他们的上下级关系,而不是Zookeeper那种平行关系是自主推优出来的。 读写分离,Master只

Chasing__Dreams的博客 1508

真材实料才是底气!华为某大佬从不加班,下班后不接电话,只因技术太牛,领导毫无办法!...

往期热门文章:1、@Transactional 注解失效的3种原因及解决办法 2、初看一脸懵逼,看懂直接跪下! 3、再见 BeanUtils!性能真拉跨! 4、被公司辞退拿了22万补偿金,原东家称回来后每月涨薪7000,只要退还22万 5、用 Dubbo 传输文件?被老板一顿揍!今天给大家带来一个正能量的故事。主角是一个华为的大佬,据网友爆料说该大佬的级别是 18 级,每...

Java后端技术 910

[Redis] Windows10搭建Redis集群

准备 (1) 安装Redis Windwos环境下使用Redis最方便的方法是直接下载微软出的3.2.1的Release版本 https://github.com/microsoftarchive/redis/releases (2) 安装Ruby运行环境 Redis集群的控制脚本是使用Ruby编写的,所以我们需要安装Ruby的运行环境,建议从这里下载 http://dl.bintray.com/...

六天 838

2021年金三银四全新版互联网大厂面试宝典: 98份 PDF,累计7000页!面试资料我全占!

2021年金三银四全新版互联网大厂面试题 共分类 98份PDF,累计 7000多页!Java面试资料我全占! 全新版互联网大厂面试题题库非常全面 包括 Java 集合、JVM、多线程、并发编程、设计模式、Spring全家桶、Java、MyBatis、ZooKeeper、Dubbo、Elasticsearch、Memcached、MongoDB、Redis、MySQL、RabbitMQ、Kafka、Linux、Netty、Tomcat、Python、HTML、CSS、Vue、React、JavaScr.

m0_50180963的博客 413

Redis集群配置及使用

一、Redis的安装 在之前的一片博客中,介绍了Redis安装的详细过程和如何在公网中进行访问,点击这里进行Redis的安装和配置。相对来说配置不是特别复杂,然而,在比较大的工程当中,由于数据量和并发量都比较大,一个Redis节点往往不能满足项目的需求,所以就分享一下我搭建Redis集群的步骤和遇到的问题。 二、准备工作 Ruby的安装 Ruby是进行集群搭建运行脚本的必要工具 执行命令安装r...

qq_33044969的博客 601

Redis day-59 (21.22 redis集群介绍, 21.23/21.24 redis集群搭建配置, 21.25 redis集群操作, 扩展 redis 哨兵)

21.22 redis集群介绍 21.23 redis集群搭建配置(上) 只需要在一台主机上安装ruby 7000.conf 7002 同样,创建和编辑7004 把7004 替换 7000 :1,$s/7000/7004/g 创建目录 在另一个主机上 同样创建 7003 和 7005 :1,s/7001/7003/g:1,s/7001/7003/g :1,s/7001/70...

u011192615的博客 173

redis cluster 管理!

1.1、redis cluster增加节点     随着业务的增长,有一天你发现现在的redis集群规模已不能满足业务需求了,你得向集群中增加节点来扩展redis cluster的处理能力。向一个redis cluster增加节点也是一件愉快的事情,当然首先你得准备好一个空的redis实例,就像我下边一样我先准备好了一个“redis7006”实例: 1

八月未央 1207

PVE系列教程(十七)、安装Redis服务器

默认仅允许本机访问,通过输入希望Redis服务器监听的接口的值来更改IP地址,如果想添加多个IP地址,只需将它们用空格隔开即可,如果希望服务器侦听网络上的所有接口,则可以使用以下命令:bind * -:😗。如果是在内网中,使用ipv4的局域网地址就可以访问,我们这里使用的RDM进行连接,输入ipv4地址、端口号、密码,点击测试连接即可。如果是想外网访问,可以使用ipv6地址,输入ipv6的global地址、端口号、密码,点击测试连接即可。这一行,将注释符号#去掉,将后面修改成自己的密码。

JingLisen的博客 1896

redis集群 双子节点 api

Redis 集群双子节点 API 科普文章 Redis 是一个高性能的键值存储数据库,广泛应用于缓存和实时数据处理场景。为了更好地支持高可用性和数据分区,Redis 提供了集群模式。在这篇文章中,我们将深入探讨 Redis 集群双子节点的概念,并通过代码示例进行简单演示。同时,我们会描述其状态图和旅行图,以便读者更容易理解...

weixin_42467661的博客 138
上一篇: 各位道友,敲下这30个 Python 代码,念头立刻通达了!
下一篇: 雷军成为北京冬奥会火炬手:这是终生难忘的时刻! 文末
菜鸟学Python
博客等级 码龄9年 8062粉丝 571原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值