《工程建设》官方网站,wordpress插件h5,外贸网站搜索 引擎优化方法,沈阳网站制作Redis#xff0c;全称为Remote Dictionary Server#xff0c;是一个开源的高性能键值对数据库。它以其卓越的性能、丰富的数据结构和灵活的持久化机制#xff0c;在现代应用中扮演着至关重要的角色
1 什么是redis
Redis是一个使用ANSI C语言编写的开源、跨平台的键值存储系…Redis全称为Remote Dictionary Server是一个开源的高性能键值对数据库。它以其卓越的性能、丰富的数据结构和灵活的持久化机制在现代应用中扮演着至关重要的角色
1 什么是redis
Redis是一个使用ANSI C语言编写的开源、跨平台的键值存储系统。它支持多种数据结构如字符串、哈希、列表、集合、有序集合等因此也被称为数据结构服务器。Redis提供丰富的语言API可以轻松集成到各种应用程序中。
2 Redis的应用场景
缓存 Redis最常见的应用场景之一是作为缓存系统用于减少数据库的访问压力提高应用的响应速度。将热点数据放到内存中设置内存的最大使用量以及过期淘汰策略来保证缓存的命中率。计数器与排行榜 Redis的有序集合非常适合实现排行榜功能而其原子递增操作则适用于计数器场景如社交网络中的点赞和评论数。应用限流 限制一个网站访问流量。消息队列 利用Redis的列表数据结构可以实现一个简单的消息队列系统用于处理异步任务和消息传递。使用 List 数据类型它是双向链表。交集运算 使用 SET 类型例如求两个用户的共同好友。分布式Session 多个应用服务器的 Session 都存储到 Redis 中来保证 Session 的一致性。分布式锁 在分布式系统中Redis可以用于实现分布式锁以保证操作的原子性和一致性。 除了可以使用 SETNX 实现分布式锁之外还可以使用官方提供的 RedLock 分布式锁实现。
3 Redis的数据类型
Redis支持五种基本数据类型每种类型都有其独特的操作命令
字符串(String)简单的键值对适合存储简单的数据。哈希(Hash)键值对集合适合存储对象。列表(List)有序集合支持从两端推入和弹出元素。集合(Set)无序集合自动去重。有序集合(Sorted Set)与集合类似但每个元素关联一个分数可以进行范围查询
Redis 高级数据类型BitMap、HyperLogLog、GEO
4. Redis 的优势 高速性能Redis 基于内存操作读写速度快能够达到极高的吞吐量。支持数据的快速访问通常可以达到每秒数十万次的读写操作。 数据持久化支持 RDB快照和 AOF追加文件两种持久化方式确保数据的安全性。RDB 通过创建数据快照来持久化数据而 AOF 记录每次写操作可以提供更好的数据恢复。 丰富的数据结构支持字符串、列表、集合、有序集合、散列等多种数据结构。这些数据结构使得 Redis 可以灵活地用于缓存、消息队列、排行榜、实时分析等多种场景。 原子操作Redis 支持原子性的单个操作也支持事务可以一次执行多个命令保证操作的原子性。 主从复制支持主从复制可以实现数据的冗余和高可用性。从服务器可以提供读操作分散主服务器的读请求压力。 高可用性通过哨兵系统Sentinel或集群模式ClusterRedis 可以实现自动故障转移和数据分片。 横向扩展Redis 支持集群模式可以跨多个节点进行数据分片实现水平扩展。 丰富的客户端库支持多种编程语言的客户端库如 Python、Java、C#、Node.js 等方便开发者集成使用。 Lua 脚本支持在服务器端执行 Lua 脚本可以编写复杂的逻辑减少网络往返提高性能。 发布/订阅功能支持发布/订阅模式可以用于实现消息队列和事件通知。 灵活的内存管理支持内存淘汰策略如 LRU最近最少使用、LFU最不频繁使用等以适应不同的应用场景。 易于管理提供简单的配置和监控工具使得 Redis 的部署和管理变得相对容易。 安全性支持通过 SSL/TLS 加密数据传输保护数据安全。 多用途除了作为数据库使用Redis 还可以作为缓存、消息代理、排行榜系统等多种用途。
5. Redis为什么快
Redis 单机 QPS 能达到 100000。
Redis 是单线程模型Redis 6.0 已经支持多线程模型为什么还能有这么高的并发
Redis 完全基于内存操作。Redis 数据结构简单。采用单线程避免线程上下文切换和竞争。使用 I/O 多路复用模型非阻塞 I/O
I/O 多路复用
I/O 多路复用模型是利用 select、poll、epoll 可以同时监察多个流的 I/O 事件的能力在空闲的时候会把当前线程阻塞掉当有一个或多个流有 I/O 事件时就从阻塞态中唤醒于是程序就会轮询一遍所有的流epoll 是只轮询那些真正发出了事件的流并且只依次顺序的处理就绪的流这种做法就避免了大量的无用操作。
6. Redis 持久化
Redis的持久化机制是确保数据安全性和可靠性的关键特性它允许将内存中的数据异步地保存到磁盘上以便在Redis服务器重启后能够恢复数据。Redis提供了两种主要的持久化方式RDB快照和AOF追加文件以及它们的混合持久化方式。
RDB持久化是通过创建数据的快照来实现的。在指定的时间间隔内Redis会将内存中的数据集快照保存到磁盘上的二进制文件中。这个快照文件非常紧凑适合用于数据备份和灾难恢复。
AOF持久化记录了所有的写操作命令并以追加的方式保存到文件中。当Redis重启时会重新执行这些命令来恢复数据。
Redis 4.0引入了混合持久化方式它结合了RDB和AOF的优点。在这种模式下AOF文件的开始部分是RDB数据的二进制dump紧接着是追加的AOF命令。这样即使在AOF文件中只有部分命令被执行也可以通过RDB部分快速恢复数据然后执行AOF部分的命令来恢复到最新状态。
总的来说选择哪种持久化方式取决于你的具体需求包括你对数据安全性的要求、性能考虑以及存储空间的可用性。
7 Redis内存淘汰机制
Redis的内存淘汰机制是其内存管理的重要组成部分它能够在内存使用达到上限时自动选择并删除一些数据以腾出空间。
7.1 过期时间
Redis 过期时间是一种重要的功能它允许你为存储在 Redis 中的数据设置一个过期时间Time To LiveTTL。当数据过期后Redis 会自动删除这些数据从而释放内存空间。过期时间对于缓存实现、限制数据存活时间、实现计数器等功能非常有用
可以使用 EXPIRE 或 EXPIREATPEXPIRE 和 PEXPIREAT 来为 key 设置过期时间查询键的剩余过期时间TTL与PTTL
当键被设置为过期时Redis 不会立即删除该键而是在某个时刻的定时任务中检查并删除。如果你尝试为一个已经设置了过期时间的键再次设置过期时间Redis 会更新该键的过期时间
7.2 淘汰策略
内存淘汰只是 Redis 提供的一个功能为了更好地实现这个功能必须为不同的应用场景提供不同的策略内存淘汰策略讲的是为实现内存淘汰我们具体怎么做要解决的问题包括淘汰键空间如何选择在键空间中淘汰键如何选择
Redis 提供了下面几种内存淘汰策略供用户选
noeviction - 当内存使用达到阈值的时候所有引起申请内存的命令会报错。这是 Redis 默认的策略。allkeys-lru - 在主键空间中优先移除最近未使用的 key。allkeys-random - 在主键空间中随机移除某个 key。volatile-lru - 在设置了过期时间的键空间中优先移除最近未使用的 key。volatile-random - 在设置了过期时间的键空间中随机移除某个 key。volatile-ttl - 在设置了过期时间的键空间中具有更早过期时间的 key 优先移除。
选择淘汰策略
如果数据呈现幂等分布存在热点数据部分数据访问频率高部分数据访问频率低则使用 allkeys-lru。如果数据呈现平等分布数据访问频率大致相同则使用 allkeys-random。如果希望使用不同的 TTL 值向 Redis 提示哪些 key 更适合被淘汰请使用 volatile-ttl。volatile-lru 和 volatile-random 适合既应用于缓存和又应用于持久化存储的场景然而我们也可以通过使用两个 Redis 实例来达到相同的效果。将 key 设置过期时间实际上会消耗更多的内存因此建议使用 allkeys-lru 策略从而更有效率的使用内存。
8 Redis 事务
Redis 事务是一种用于将多个命令打包在一起执行的功能它可以确保这些命令要么全部执行要么全部不执行从而维护数据的一致性。Redis 的事务是原子性的但不是完全隔离的。这意味着在一个事务中的命令在执行过程中不会被其他客户端发送的命令插入但其他客户端仍然可以读取事务执行期间的数据。
事务相关的命令MULTI 、 EXEC 、 DISCARD 、WATCH。
9 Redis 管道
Redis 管道Pipeline是一种优化网络往返时间Round-Trip Time, RTT的技术它允许客户端一次发送多个命令给 Redis 服务器而不需要等待每个命令的响应。这样可以显著减少网络延迟带来的影响提高操作效率。
在传统的请求/响应模型中客户端向服务器发送一个命令然后等待服务器的响应。如果客户端需要执行多个命令它必须为每个命令重复这个过程这会导致多次网络往返从而增加延迟。使用管道时客户端可以将多个命令打包在一起然后一次性发送给服务器。服务器接收到这些命令后会依次执行它们并将所有响应一次性返回给客户端 。这种方式减少了网络请求的数量从而降低了由于网络延迟带来的总体延迟
10 Redis 发布与订阅
Redis 的发布与订阅Pub/Sub是一种消息通信模式允许客户端订阅频道以接收消息或者发布消息到频道供其他客户端接收。这种模式非常适合实现消息队列、通知系统、实时通信等应用场景。
基本概念
发布者Publisher发送消息到频道的客户端。订阅者Subscriber监听频道并接收发布到该频道的消息的客户端。频道Channel消息传递的目的地可以有多个订阅者。模式Pattern用于匹配多个频道的一种特殊字符允许订阅者订阅多个频道
使用场景主要涉及实时通知系统如聊天应用、新闻推送等。消息队列系统用于任务分发和异步处理等
11 Redis 复制
Redis复制是一种强大的功能它允许你将一个Redis服务器的数据自动复制到其他服务器。这不仅可以用于数据备份还可以用于提高读取操作的可扩展性。
主服务器Master包含最新数据的服务器处理写操作
从服务器Slave接收主服务器数据的服务器通常用于处理读操作
其特点Redis复制是异步的这意味着主服务器在执行写操作后不会等待从服务器的确认响应。这有助于提高主服务器的性能在大多数情况下从服务器的数据最终会与主服务器保持一致。通过将读操作分配给从服务器可以提高系统的读取吞吐量同时主服务器专注于处理写操作
Redis复制是构建可扩展、高可用Redis系统的基础通过合理的配置和管理可以有效地提高系统的性能和可靠性 12 Redis 哨兵
Redis Sentinel 是 Redis 的高可用性解决方案由一个或多个 Sentinel 实例组成用于监控 Redis 主从复制系统的运行状态。
Sentinel 可以监控多个 Redis 节点自动检测主节点是否下线并在主节点下线时进行自动故障转移。Sentinel 还提供了客户端与 Redis 节点之间的服务发现和配置更新功能客户端可以通过 Sentinel 来获取当前的主节点信息从而实现无缝的故障转移。
Sentinel 的主要功能包括监控、提醒、自动故障转移和配置提供者。它通过执行定期的健康检查来确保 Redis 节点的正常运行当主节点出现故障时Sentinel 会通过一系列流程来选举新的主节点并更新从节点的配置。
此外Sentinel 还支持通过订阅频道来接收故障转移和其他重要事件的通知。为了确保高可用性建议至少部署三个 Sentinel 实例并且它们应该分布在不同的物理或虚拟机上。配置 Sentinel 时需要修改 Redis 和 Sentinel 的配置文件指定监控的主节点信息、端口设置等并启动 Sentinel 实例。
在故障转移过程中Sentinel 会负责更新客户端的配置确保客户端能够连接到新的主节点。Redis Sentinel 的引入为 Redis 提供了强大的高可用性和故障恢复能力是构建稳定、可靠的 Redis 服务的关键组件。
13 Redis 集群
Redis 集群是 Redis 的分布式解决方案旨在提供线性扩展和高可用性通过将数据自动分割到多个节点来提供数据分片功能同时利用复制和故障转移机制保证数据的安全性和可用性。
在 Redis 集群中数据被分成了多个槽slot每个槽可以被分配到集群中的任意节点上每个节点可以包含多个槽但一个槽只能被分配给一个节点。集群中的每个节点负责处理一部分数据当客户端请求到达时集群会根据请求的键被哈希到哪个槽来决定将请求路由到哪个节点。
Redis 集群支持主从复制每个主节点可以有一个或多个从节点当主节点发生故障时集群会自动进行故障转移选举新的主节点来接管原主节点负责的槽。
Redis 集群还提供了数据持久化的选项可以配置每个节点的 RDB 或 AOF 持久化策略确保数据的安全性。
集群的高可用性是通过哨兵系统来实现的哨兵会监控集群中的每个节点当发现主节点下线时会自动开始故障转移流程。
Redis 集群还支持在线重配置可以在不停止服务的情况下添加或移除节点重新分配槽实现集群的动态调整。客户端可以通过集群模式的 Redis 客户端库来与集群交互客户端库会自动处理请求的路由和故障转移使得开发者可以像使用单节点 Redis 一样使用集群。
Redis 集群的引入为处理大规模数据集和高并发访问提供了强大的支持是构建高性能分布式系统的有力工具。
14 知识链接
Redis 主从复制_redis主从复制-CSDN博客文章浏览阅读1.7k次点赞17次收藏9次。从节点slave内部通过每秒运行的定时任务维护复制相关逻辑当定时任务发现存在新的主节点后会尝试与该节点建立网络连接如果从节点无法建立连接定时任务会无限重试直到连接成功或者执行 slaveof no one 取消复制关于连接失败可以在从节点执行 info replication 查看 master_link_down_since_seconds 指标它会记录与主节点连接失败的系统时间。在命令传播阶段主节点除了将写命令发送给从节点还会发送一份给复制积压缓冲区作为写命令的备份_redis主从复制https://blog.csdn.net/ddf128/article/details/142312394Redis哨兵机制_redis 哨兵机智-CSDN博客文章浏览阅读1.1k次点赞22次收藏18次。哨兵英文名 Sentinel是一个分布式系统用于对主从结构中的每一台服务器进行监控当主节点出现故障后通过投票机制来挑选新的主节点并且将所有的从节点连接到新的主节点上。Redis Sentinel 包含若干个 Sentinel 节点和 Redis 数据节点每个 Sentinel 节点会对数据节点和其余 Sentinel 节点进行监控当它发现节点不可达时会对节点做下线标识。_redis 哨兵机智https://blog.csdn.net/ddf128/article/details/142307215Redis集群知识及实战_redis集群实战-CSDN博客文章浏览阅读2.2k次点赞43次收藏17次。Redis 集群是一种提供自动数据分片、高可用性和线性扩展性的数据存储解决方案可以将数据自动分配到多个节点上这种分布式存储的方式称为分片sharding。这样可以使得数据存储的容量和处理能力随着节点的增加而扩展如果某个节点发生故障集群可以自动将请求重定向到健康的节点从而保证服务的连续性和数据的可用性。Redis 集群支持读写分离Redis 集群提供了自动化的节点管理功能包括自动故障检测、自动故障转移和自动重新分片等随着业务的增长Redis 集群可以通过增加更多的节点来扩展其处理能力和存_redis集群实战https://blog.csdn.net/ddf128/article/details/142368943
Redis基本命令详解_redis查询key的值命令-CSDN博客文章浏览阅读1.5k次点赞10次收藏19次。RedisRemote Dictionary Server是一个开源的高性能键值对Key-Value数据库。它通常用作数据结构服务器因为除了基本的字符串键值对存储之外它还支持列表、集合、有序集合、散列、位图、超日志和地理空间索引半径查询等复杂的数据结构。Redis 以其卓越的性能、高可靠性和灵活性而闻名被广泛用于各种应用场景。笔记记录了redis的常见操作命令以备以后查用。_redis查询key的值命令https://blog.csdn.net/ddf128/article/details/142395813
Redis配置文件详解_redis 配置文件详解-CSDN博客文章浏览阅读828次点赞7次收藏2次。RedisRemote Dictionary Server是一个开源的高性能键值对Key-Value数据库。它通常用作数据结构服务器因为除了基本的字符串键值对存储之外它还支持列表、集合、有序集合、散列、位图、超日志和地理空间索引半径查询等复杂的数据结构。Redis 以其卓越的性能、高可靠性和灵活性而闻名被广泛用于各种应用场景。笔记记录了redis的常见操作命令以备以后查用。_redis 配置文件详解https://blog.csdn.net/ddf128/article/details/142422344Redis发布和订阅_redis-py pubsub()只取最新的消息-CSDN博客文章浏览阅读912次点赞20次收藏13次。Redis 发布订阅 (pub/sub) 是一种消息通信模式发送者 (pub) 发送消息订阅者(sub) 接收消息 可以实现进程间的消息传递。这种模式非常适用于实时消息传递、事件通知和消息分发等场景Redis可以实现消息中间件MQ的功能通过发布订阅实现消息的引导和分流。但是目前不推荐使用该功能专业的事情交给专业的中间件处理redis就做好分布式缓存功能Redis 客户端可以订阅任意数量的频道_redis-py pubsub()只取最新的消息https://blog.csdn.net/ddf128/article/details/142434774Redis事务总结-CSDN博客文章浏览阅读1k次点赞23次收藏17次。Redis 事务是一个用于将多个命令打包在一起执行的功能它可以确保这些命令按照顺序执行并且具有原子性。这意味着事务中的命令要么全部执行要么全部不执行这有助于保持数据的一致性。Redis 事务本质一组命令的集合一个事务中的所有命令都会被序列化在事务执行过程的中会按照顺序执行一次性、顺序性、排他性执行一些列的命令Redis事务没有隔离级别的概念所有的命令在事务中并没有直接被执行只有发起执行命令的时候才会执行ExecRedis单条命令式保存原子性的但是事务不保证原子性Redis _redis事务https://blog.csdn.net/ddf128/article/details/142466893Redis数据持久化总结笔记_数据库状态所需的最少命令集-CSDN博客文章浏览阅读841次点赞31次收藏13次。Redis数据持久化是确保Redis中数据不因服务器故障而丢失的重要机制。Redis提供了两种主要的数据持久化方法RDB和AOF以及它们的混合持久化。RDB持久化是通过创建数据快照的方式将某一时刻的数据集保存到硬盘上的RDB文件中。AOF持久化则是记录每次写操作命令并追加到AOF文件中。混合持久化是Redis 4.0引入的新特性它结合了RDB和AOF的优点。在数据恢复时可以先通过RDB文件快速恢复大部分数据然后通过AOF文件恢复快照之后的数据变更从而加快了数据恢复速度并减少了数据丢失的风险_数据库状态所需的最少命令集https://blog.csdn.net/ddf128/article/details/142468573 15 最后
感谢大家请大家多多支持