首页 > 数据库 >【转载】Redis 6.x 学习笔记

【转载】Redis 6.x 学习笔记

时间:2023-12-20 12:11:40浏览次数:37  
标签:AOF 缓存 redis Redis 笔记 https 转载 节点

参考

正文

类型

  • 字符串(strings): 一个 key 对应一个 value
  • 散列(hashes): 是一个 string 类型的 field 和 value 的映射表,hash 特别适合用于存储对象。
  • 列表(lists): 列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。
  • 集合(sets): Set 是 string 类型的无序集合。
  • 有序集合(sorted sets) : zset 和 set 一样也是string类型元素的集合,且不允许重复的成员。成员是唯一的,但分数(score)却可以重复。
  • bitmaps: 即位图,是一串连续的二进制数组(0和1),可以通过偏移量(offset)定位元素。BitMap通过最小的单位bit来进行0|1的设置,表示某个元素的值或者状态,时间复杂度为O(1)。由于 bit 是计算机中最小的单位,使用它进行储存将非常节省空间,特别适合一些数据量大且使用二值统计的场景。
  • hyperloglogs : 是用来做基数统计的算法,HyperLogLog 的优点是,在输入元素的数量或者体积非常非常大时,计算基数所需的空间总是固定 的、并且是很小的。
  • 地理空间(geospatial): GeoHash是一种地址编码方法。他能够把二维的空间经纬度数据编码成一个字符串。

事务

  • Redis 事务的本质是一组命令的集合。事务支持一次执行多个命令,一个事务中所有命令都会被序列化。在事务执行过程,会按照顺序串行化执行队列中的命令,其他客户端提交的命令请求不会插入到事务执行命令序列中。redis事务就是一次性、顺序性、排他性的执行一个队列中的一系列命令

  • Redis 事务语法性错误会正常执行事务的其他命令,编译性错误(语法错误)则所有命令都不执行。

  • Watch 命令,乐观锁监听缓存,缓存不一致则会导致当前事务提交失败。

持久化

  • RDB (默认开启) :
    RDB持久化是指在指定的时间间隔内将内存中的数据集快照写入磁盘。也是默认的持久化方式,这种方式是就是将内存中数据以快照的方式写入到二进制文件中,默认的文件名为dump.rdb。三种触发持久化机制:save、bgsave、自动化。
    性能好,但数据持久化存在间隔,可能丢失数据。

  • AOF:
    工作机制很简单,redis会将每一个收到的写命令都通过write函数追加到文件中。持久化配置:always、everysec(默认)、no。
    数据最多丢失1s,恢复慢,如果设置为 always 则影响磁盘 io。

  • RDB+AOF 混合:
    混合持久化并不是一种全新的持久化方式,而是对已有方式的优化。混合持久化只发生于 AOF 重写过程。使用了混合持久化,重写后的新 AOF 文件前半段是 RDB 格式的全量数据,后半段是 AOF 格式的增量数据。
    优点:结合 RDB 和 AOF 的优点, 更快的重写和恢复。
    缺点:AOF 文件里面的 RDB 部分不再是 AOF 格式,可读性差。

订阅发布模式

和之前用过的 WebSocket 很像,简版 RabbitMQ。

集群

哨兵模式可以自动选举主节点,当主节点出故障时自动选举出来新主节点。

  • 建议至少3台,1主2从。
  • 支持命令配置集群(重启失效)、配置文件(一直生效)配置集群。
  • 主节点可以读写,从节点只读。
  • 从节点也包含从节点,从节点也是只读不可写的。

主从复制原理

  • 从节点首次加入或重新连接,会完整复制主节点,然后新操作会追加。

哨兵模式

哨兵是Redis的一种运行模式,它专注于对Redis实例(主节点、从节点)运行状态的监控,并能够在主节点发生故障时通过一系列的机制实现选主及主从切换,实现故障转移,确保整个Redis系统的可用性。

  • 监控(Monitoring):持续监控Redis主节点、从节点是否处于预期的工作状态。
  • 通知(Notification):哨兵可以把Redis实例的运行故障信息通过API通知监控系统或者其他应用程序。
  • 自动故障恢复(Automatic failover):当主节点运行故障时,哨兵会启动自动故障恢复流程:某个从节点会升级为主节点,其他从节点会使用新的主节点进行主从复制,通知客户端使用新的主节点进行。
  • 配置中心(Configuration provider):哨兵可以作为客户端服务发现的授权源,客户端连接到哨兵请求给定服务的Redis主节点地址。如果发生故障转移,哨兵会通知新的地址。这里要注意:哨兵并不是Redis代理,只是为客户端提供了Redis主从节点的地址信息。

穿透、雪崩和击穿

  • 雪崩:雪崩就是指缓存中大批量热点数据过期后系统涌入大量查询请求,因为大部分数据在Redis层已经失效,请求渗透到数据库层,大批量请求犹如洪水一般涌入,引起数据库压力造成查询堵塞甚至宕机。
    解决:redis 高可用,主从+哨兵;限流&降级;redis 持久化,重启快速恢复;
  • 穿透:对于系统A,假设一秒 5000 个请求,结果其中 4000 个请求是黑客发出的恶意攻击。黑客发出的那 4000 个攻击,缓存中查不到,每次你去数据库里查,也查不到。直接查询数据库。这种恶意攻击场景的缓存穿透就会直接把数据库给打死。
    解决:每次系统 A 从数据库中只要没查到,就写一个空值到缓存里去,比如 set -999 UNKNOWN。然后设置一个过期时间,这样的话,下次有相同的 key 来访问的时候,在缓存失效之前,都可以直接从缓存中取数据。
  • 击穿:缓存击穿,就是说某个 key 非常热点,访问非常频繁,处于集中式高并发访问的情况,当这个 key 在失效的瞬间,大量的请求就击穿了缓存,直接请求数据库,就像是在一道屏障上凿开了一个洞。
    解决:可以将热点数据设置为永远不过期;或者基于 redis or zookeeper 实现互斥锁,等待第一个请求构建完缓存之后,再释放锁,进而其它请求才能通过该 key 访问数据。

标签:AOF,缓存,redis,Redis,笔记,https,转载,节点
From: https://www.cnblogs.com/xiaqiuchu/p/17914899.html

相关文章

  • 12.19做题笔记
    OrganizingColoredSheets结论:如果每种型号的矩形无法完成覆盖,那么一定死于某些边界点于是对各个方向枚举边界点,求矩形面积并一样的东西即可MissionImpossible:GrandTheftAuto首先有一个贪心的选法,按照dfs序,从中间向外匹配,但发现这个策略有时会出现覆盖不到的边根据证明......
  • Redis和Mysql如何保证数据一致性?
    1、redis作用:用于读数据库操作的缓存层,可以减少数据库的io,还能提升数据的io性能;无法保证数据的acid2、实现一致性方案:1、先更新数据库,在更新缓存2、先删除缓存再更新数据库3、最终一致性方案: (1)基于roketMQ可靠通信 (2)通过canal组件采集mysqlbinlog日志,同步redis......
  • 比Wget、Curl更强大的下载工具! 转载
    作者:Escape 链接:https://www.escapelife.site/posts/7a3b6469.htmlaria2是一款轻量且高效的命令行下载工具。堪称下载利器!介绍说明轻量、高效、命令行aria2 是一款轻量且高效命令行下载工具,它提供了对多协议和多源地址的支持,并尝试将下载带宽利用率最大化,目前支持的协......
  • 记住这5个网站,不上班也能搞钱 转载
    我是小方。不上班2年,我一边学习一边赚钱,稳定月入五位数。如果你也想做自由职业,要记住我接下来介绍的5个网站,可以让我们一边提升一边搞钱,失业在家也不怕。1.云队友它是一个远程办公网站。上面有各种各样的短期工作,像设计,文案写作,短视频运营和制作,心理咨询等,每一个类别有很多选择。......
  • ml.net例子笔记4-ml.net v2版本例子运行
    1Ml.NET版本更新当前的Microsoft.ML的软件版本如下:https://gitee.com/mirrors_feiyun0112/machinelearning-samples.zh-cn例子使用版本为1.6.0例子工程更换版本的办法:1Directory.Build.propsnuget.config修改samples目录下文件Directory.Build.props的内容~~~~*......
  • Kruskal重构树学习笔记
    Kruskal重构树一般用于求图上任意两点间距离的最值,距离为路径上边权最值。建树:将边权升序排序后,依次把点对加入树中,每次把两点当前所在的树根与一个新点连边,点权为原边权,然后新加的点成为树根。例如,对于以下最小生成树:它的Kruskal重构树为:性质:对于原图上的两点,它们的距离......
  • 十一月读书笔记
    挑选了程序员修炼之道中感兴趣的章节进行了阅读第二十二节:死程序不会说谎1、对待程序我们通常会有“它不会发生”的心理状态,这会导致我们忽视一些问题。对于注重实效的程序员来说,如果我们忽略了一个错误,将是非常糟糕的事情。2、我们一些异常情况,我们应该及早崩溃,用于强调问题的......
  • 十月读书笔记
    阅读了代码大全2的部分内容,做出如下总结把不太理解的东西和一些较为理解的且十分类似的东西做比较,对这个不太了解的东西产生更深刻的理解叫做建模。模型不可能一下子就覆盖的很全面,会经过一系列的转变,往更好更全面的模型发展。简单的模型有简单的用处,模型的选择与设计需根据实......
  • 九月读书笔记
    程序员修炼之道:从小工到专家阅读了此书的前五节第一节:我的源码让猫吃了1、开发过程中出现未曾预料的技术问题,交付晚了等情况,没关系,这些是无法避免的。发生了,我们就要尽可能想方设法地职业的去处理它们。程序员这个职业需要诚实和坦率,要敢于承认自己的错误。2、要对担负的东西......
  • Redis 主从集群搭建并使用 RedisTemplate 实现读写分离
    单机版的Redis能够承载并发访问的能力有限,对于绝大多数的系统而言,都是读多写少,系统之所以宕机,一般都是因为并发读操作太高导致的宕机,因此搭建Redis主从集群,实现读写分离,是一种有效的提高并发访问能力的方案。本篇博客介绍在一台虚拟机上,使用docker-compose模拟搭建一个【一......