当前位置: 首页 > news >正文

杭州门户网站开发做网站 华普花园

杭州门户网站开发,做网站 华普花园,营销型网站建设大概多少钱,基本型电子商务网站说说你对Redis的理解 Redis是一个基于Key-Value存储结构的开源内存数据库#xff0c;也是一种NoSQL数据库。 它支持多种数据类型#xff0c;包括String、Map、Set、ZSet和List#xff0c;以满足不同应用场景的需求。 Redis以内存存储和优化的数据结构为基础#xff0c;提…说说你对Redis的理解 Redis是一个基于Key-Value存储结构的开源内存数据库也是一种NoSQL数据库。 它支持多种数据类型包括String、Map、Set、ZSet和List以满足不同应用场景的需求。 Redis以内存存储和优化的数据结构为基础提供了快速的读写性能和高效的数据访问。常被用作应用与数据库之间的缓存组件提升数据IO效率。 此外Redis支持主从复制、哨兵机制和集群方式实现高可用性和水平扩展。 总而言之Redis是一款功能强大、灵活且可靠的数据库解决方案适用于各种企业级应用开发场景。 你是如何解决热Key问题的 热 Key 问题是指在缓存系统中某些特定的缓存key受到高频访问导致对这些热门数据的读取/写入操作集中在少数几个缓存节点上使得这些节点的负载过高而其他节点负载较轻甚至空闲。这会造成系统性能不均衡可能导致部分请求响应变慢或服务不可用。 解决热 Key 问题有这些方案 缓存预热在系统启动或业务低峰期通过批量加载或预先访问热门数据将这些热门数据提前加载到缓存中。这样可以避免大量请求同时涌入导致的热点问题提高系统的稳定性和性能。动态散列将缓存节点组织成一个哈希环根据缓存键的哈希值将数据分散存储在多个节点上。通过增加缓存节点的数量让请求更均匀地分布在各个节点上减轻热 Key 对单个节点的压力。当节点数量发生变化时可以通过一致性哈希算法进行平滑迁移避免数据大规模迁移带来的负载过高。数据分片将数据按特定规则如数据范围、业务维度等分成多个片段分别存储在不同的缓存节点上。这样可以使热 Key 所在的数据尽量均匀地分布在多个节点上减轻单个节点的压力。 Redis为什么这么快 内存存储Redis将数据存储在内存中实现了快速的读写操作。单线程模型Redis采用单线程处理请求避免了多线程的竞争和上下文切换开销。高效的数据结构Redis内部使用了高效的数据结构如哈希表、跳跃表等提供了快速的数据访问和操作。异步IORedis利用异步IO来处理网络请求能够同时处理多个请求提高并发性能。事件驱动架构Redis基于事件驱动的模型通过事件循环机制处理请求和操作提高系统的效率。优化的操作Redis对常用操作进行了优化如批量操作和管道技术减少了网络通信开销。 Redis为什么把所有数据都放内存 Redis将所有数据放到内存中的主要原因是为了提供高性能的读写操作。 高速读写内存访问速度快相比于磁盘和数据库内存操作速度更快能够更迅速地响应读写请求。将数据存储在内存中可以大大缩短读写的延迟提高系统的响应速度和吞吐量。简单数据结构Redis使用简单的数据结构来存储数据如字符串、列表、哈希、集合和有序集合等。这些数据结构直接映射到内存不需要进行复杂的数据转换和序列化操作提高了读写效率。数据持久化尽管Redis将数据存储在内存中但它也支持数据的持久化。通过使用RDB快照和AOF日志两种方式Redis可以将内存中的数据定期或实时写入磁盘以保证数据的持久性和安全性。 怎么实现Redis的高可用 主从复制通过设置主从复制将主节点的数据同步到多个从节点上。主节点负责处理写操作并将写操作的日志复制给从节点从节点则负责处理读请求。如果主节点发生故障可以将一个从节点升级为新的主节点从而实现故障转移和高可用。哨兵机制使用Redis 哨兵来监控主节点和从节点的状态。哨兵是一组独立运行的进程它会监控Redis实例的健康状态并在主节点出现故障时自动进行故障转移。它还能够监控从节点并在需要时将其提升为主节点。集群模式Redis 集群是一种分布式方案可以将多个Redis节点组成一个逻辑集群提供数据分片和自动故障恢复。每个节点负责存储和处理部分数据通过节点间的数据分片和分布式算法保证数据的可用性和负载均衡。当集群中的某个节点出现故障时集群会自动进行故障转移和恢复。 为什么Redis 单线程模型效率也能那么高 非阻塞IORedis使用了事件驱动的非阻塞IO机制。它通过事件循环处理来自客户端的请求在等待数据IO时并不会阻塞主线程而是继续处理其他请求。这种机制允许Redis以高效地方式处理大量的并发连接。内存操作Redis主要将数据存储在内存中并且由于单线程模型的存在在内存操作的情况下Redis可以通过简单的指针操作来实现快速读写而不需要考虑复杂的数据同步和竞争条件。单线程避免的开销与多线程模型相比单线程模型避免了线程间的上下文切换、锁竞争和资源管理开销。这使得Redis可以更高效地使用CPU资源并减少了大量与线程相关的开销。 说说 Redis 常用的数据类型 StringString是最常用的数据类型在Redis中以二进制安全的方式存储字符串值。它可以包含任何类型的数据比如文本、整数或二进制数据。HashHash是一个键值对的集合其中每个键都与一个值相关联。在Redis中Hash可以用于存储和操作对象每个键值对相当于对象的字段和值。ListList是一个按照插入顺序排序的字符串元素集合。集合中的元素可以重复可以从列表的两端进行插入和删除操作可用于实现队列、栈等数据结构。SetSet是一个无序、唯一的字符串集合不允许重复的成员。可以对集合执行添加、删除和判断成员是否存在等操作也支持集合间的交集、并集和差集运算。Sorted SetSorted Set是一个有序的字符串集合每个成员都关联着一个分数。集合中的成员根据分数的大小进行排序可以进行范围查询和按分数排名操作。 使用 Redis 有哪些好处 缓存功能作为高性能缓存系统Redis能够将热门数据存储在内存中提升数据访问速度和减轻数据库负载。高性能Redis采用内存存储和高效数据结构具备快速读写速度适用于处理大量请求和实时数据需求。多样化数据类型Redis支持多种数据类型如字符串、哈希、列表、集合和有序集合满足各种数据存储和操作需求。支持持久化Redis支持数据持久化可将数据写入磁盘确保数据的可靠性和持久存储。支持分布式Redis提供集群和分片机制实现数据分布和水平扩展提供高可用性和可扩展性。简单易用Redis具有简洁的命令接口易于使用和管理同时提供丰富的内置命令和客户端库。 说说你对Redis操作原子性的理解 Redis 的操作是原子性的这是因为 Redis 的每个命令都是以单线程的方式执行的整个命令的执行过程是不可中断的要么全部执行成功要么全部执行失败。 在 Redis 中每个命令都会被转换成一个或多个底层操作这些操作会基于数据结构的特定实现来执行。比如对于字符串类型获取一个键值对、设置一个键值对等操作都是原子性的。在执行这些底层操作时Redis 会使用一些技术来保证原子性主要包括以下两点 Redis 使用单线程模型避免了多线程之间的竞争条件和锁开销从而保证了操作的原子性。Redis 在执行一些复杂的操作时比如事务、Lua 脚本等会将多个底层操作打包成一个原子性操作这些底层操作要么全部执行成功要么全部执行失败。在事务和 Lua 脚本中Redis 同时支持回滚操作即当一些命令执行成功后面的命令出错时Redis 可以自动撤销已经执行的命令。 Redis持久化机制 1. RDB(Redis Data Base) 内存快照 2. AOF(Append Only File) 增量日志 3. 混合持久化RDB AOF RDB持久化 在指定的时间间隔内将内存中的数据集快照写入磁盘RDB是内存快照内存数据的二进制序列化形式的方式持久化每次都是从Redis中生成一个快照进行数据的全量备份。 RDB持久化方案进行备份时Redis会单独fork一个子进程来进行持久化会将数据写入一个临时文件中持久化完成后替换旧的RDB文件。 在整个持久化过程中主进程为客户端提供服务的进程不参与IO操作这样能确保Redis服务的高性能RDB持久化机制适合对数据完整性要求不高但追求高效恢复的使用场景 优点 性能高RDB持久化是通过生成一个快照文件来保存数据因此在恢复数据时速度非常快。文件紧凑RDB文件是二进制格式的数据库文件相对于AOF文件来说文件体积较小。 缺点 可能丢失数据由于RDB是定期生成的快照文件如果Redis意外宕机最近一次的修改可能会丢失。 AOF持久化 AOF持久化需要手动修改conf配置开启。 AOF持久化方案进行备份时客户端所有请求的写命令都会被追加到AOF缓冲区中缓冲区中的数据会根据Redis配置文件中配置的同步策略来同步到磁盘上的AOF文件中同时当AOF的文件达到重写策略配置的阈值时Redis会对AOF日志文件进行重写给AOF日志文件瘦身。Redis服务重启的时候通过加载AOF日志文件来恢复数据。 AOF配置 AOF默认不开启默认为appendonly no开启则需要修改为appendonly yes 关闭AOFRDB混合模式设为no AOF同步策略 AOF重写 重写其实是针对AOF存储的重复性冗余指令进行整理比如有些key反复修改又或者key反复修改后最终被删除这些过程中的指令都是冗余且不需要存储的。 自动重写 当AOF日志文件达到阈值时会触发自动重写。 重写阈值配置 auto-aof-rewrite-percentage 100当AOF文件体积达到上次重写之后的体积的100%时会触发AOF重写。auto-aof-rewrite-min-size 64mb当AOF文件体积超过这个阈值时会触发AOF重写。 当AOF文件的体积达到或超过上次重写之后的比例并且超过了最小体积阈值时Redis会自动触发AOF重写操作生成一个新的AOF文件。 优点 数据更加可靠AOF持久化记录了每个写命令的操作因此在出现故障时可以通过重新执行AOF文件来保证数据的完整性。可以保留写命令历史AOF文件是一个追加日志文件可以用于回放过去的写操作。 缺点 文件较大由于记录了每个写命令AOF文件体积通常比RDB文件要大。恢复速度较慢当AOF文件较大时Redis重启时需要重新执行整个AOF文件恢复速度相对较慢 混合持久化 Redis4.0版本开始支持混合持久化因为RDB虽然加载快但是存在数据丢失AOF数据安全但是加载缓慢。 混合持久化通过aof-use-rdb-preamble yes开启Redis 4.0以上版本默认开启 开启混合持久化之后appendonlydir文件下存在一个rdb文件与一个aof文件 存入数据然后执行bgrewriteaof重写文件。 总结 推荐两者均开启如果对数据不敏感可以选单独用RDB不建议单独用AOF因为可能会出现Bug如果只是做纯内存缓存可以都不用 说说Redis的过期策略 惰性删除 惰性删除是Redis默认的过期键删除策略。当客户端尝试访问一个已过期的键时Redis会立即将该键删除并返回空值。这种策略的优点是删除操作是在需要时进行减少了不必要的删除开销。但是如果大量过期键在一次性被访问之前没有被访问过这些键会一直占据内存空间。定期删除Redis会每隔一段时间执行一次检查删除那些已过期的键。默认情况下Redis每秒执行10次检查。定期删除通过释放过期键所占据的内存空间使得内存能够及时被回收。但这种方式可能会导致内存占用较高因为Redis并不保证在每次定期删除操作中都会删除足够数量的过期键。定期淘汰 定期淘汰是Redis 4.0版本引入的一种新的过期策略。与定期删除不同的是定期淘汰不仅删除已过期的键而且会主动查找并淘汰一些尚未过期但是由于内存不足而需要释放的键。通过定期淘汰Redis可以更主动地管理内存避免因为内存持续增长而导致系统性能下降。 Redis的过期策略 1. 惰性删除Lazy expiration 当客户端尝试访问某个键时Redis会先检查该键是否设置了过期时间并判断是否过期。如果键已过期则Redis会立即将其删除。这就是惰性删除策略。 该策略可以最大化地节省CPU资源却对内存非常不友好。极端情况可能出现大量的过期key没有再次被访问从而不会被清除占用大量内存。 2. 定期删除Active expiration Redis会每隔一段时间默认100毫秒随机检查一部分设置了过期时间的键。定期过期策略通过使用循环遍历方式逐个检查键是否过期并删除已过期的键值对。 通过调整定时扫描的时间间隔和每次扫描的限定耗时可以在不同情况下使得CPU和内存资源达到最优的平衡效果 Redis中同时使用了惰性过期和定期过期两种过期策略。 假设Redis当前存放20万个key并且都设置了过期时间如果你每隔100ms就去检查这全部的keyCPU负载会特别高最后可能会挂掉。因此redis采取的是定期过期每隔100ms就随机抽取一定数量的key来检查和删除的。但是呢最后可能会有很多已经过期的key没被删除。这时候redis采用惰性删除。在你获取某个key的时候redis会检查一下这个key如果设置了过期时间并且已经过期了此时就会删除。 需要注意如果定期删除漏掉了很多过期的key然后也没走惰性删除。就会有很多过期key积在内存中可能会导致内存溢出或者是业务量太大内存不够用然后溢出了为了应对这个问题Redis引入了内存淘汰策略进行优化。 说说Redis的内存淘汰策略 LRU最近最少使用 LRU是Redis默认的内存淘汰策略。根据最近使用的时间戳来判断键的热度将最久未被使用的键淘汰出去。这种策略保留了最近较常访问的键适合于热点数据的场景。LFU最不经常使用 LFU根据键被访问的频率来判断热度淘汰访问频率最低的键。这种策略适用于访问模式稳定但不同键的访问频率差异明显的场景。Random随机淘汰 随机淘汰策略是一种基于概率的淘汰方法随机选择一个键进行淘汰。这种策略简单高效但可能导致较高的缓存命中率下降。TTL生存时间 TTL策略基于键的过期时间淘汰剩余生存时间最短的键。适用于关注数据实效性的场景。Maxmemory Policy最大内存策略 Redis提供了几种最大内存策略包括noeviction禁止淘汰、allkeys-lru、allkeys-random等。这些策略是在达到设定的最大内存限制后对写操作返回错误避免继续写入导致系统崩溃。 Redis的内存淘汰策略 内存淘汰策略允许Redis在内存资源紧张时根据一定的策略主动删除一些键值对以释放内存空间并保持系统的稳定性。 1. noeviction不淘汰策略 当内存不足以容纳新写入数据时Redis 将新写入的命令返回错误。这个策略确保数据的完整性但会导致写入操作失败。 2. volatile-lru最近最少使用 从设置了过期时间的键中选择最少使用的键进行删除。该策略优先删除最久未被访问的键保留最常用的键。 3. volatile-ttl根据过期时间优先 从设置了过期时间的键中选择剩余时间最短的键进行删除。该策略优先删除剩余时间较短的键以尽量保留剩余时间更长的键。 4. volatile-random随机删除 从设置了过期时间的键中随机选择一个键进行删除。 5. allkeys-lru全局最近最少使用 从所有键中选择最少使用的键进行删除。无论键是否设置了过期时间都将参与淘汰。 6. allkeys-random全局随机删除 从所有键中随机选择一个键进行删除。 Redis有哪些常用应用场景 缓存作为高性能缓存层提供快速数据访问。分布式会话管理实现跨服务器的会话共享。消息队列用作中间件实现异步通信和任务队列。实时排行榜/计数器用有序集合实现实时排名和计数功能。地理位置信息存储与查询支持存储地理位置信息并进行位置查询。实时数据分析存储实时生成的数据进行快速统计和分析。 什么是缓存击穿、缓存穿透、缓存雪崩 缓存击穿指当一个缓存键key对应的数据在缓存中不存在同时又有大量并发请求访问该缓存键时这些请求会直接绕过缓存查询数据库或其他存储系统导致数据库压力增大。缓存击穿通常在缓存过期后发生。缓存穿透指当一个查询请求访问一个不存在于缓存中且也不存在于数据库中的数据时这个请求会无效地继续访问数据库而不会被缓存。如果黑客故意发送大量非法请求则缓存层无法起到过滤作用可能导致数据库负载过大。缓存雪崩指当缓存集中在某个时间点失效或由于某个原因发生故障导致大量的请求直接打到后端数据库造成数据库瞬时压力过大甚至引起数据库崩溃。在缓存雪崩期间系统性能急剧下降无法正常提供服务。 为了应对以上问题可以采取以下措施 对热点数据采用永不过期策略避免缓存击穿。在缓存层进行空值缓存即将查询结果为空的数据也缓存一段时间避免缓存穿透。设置合理的缓存过期时间并使用分布式缓存的多节点部署避免缓存雪崩。引入限流、熔断等机制控制并发访问量保护后端系统。对重要数据做冷备份确保即使缓存失效或故障仍能从其他系统中恢复数据。 REDIS 集群的原理是什么 Redis 集群通过数据分片和主从复制实现了横向扩展和高可用性。它将数据划分为 16384 个哈希槽并将这些槽均匀地分配到多个节点上。每个节点负责处理一部分槽的数据实现了数据的分散存储和负载均衡。     1、在集群中每个哈希槽有一个主节点和多个从节点。主节点负责处理读写请求而从节点则通过主从复制机制复制主节点的数据提供数据的冗余备份和故障恢复功能。     2、当主节点发生故障时集群会自动进行故障转移。它会选举一个从节点升级为新的主节点保证服务的持续可用性。同时集群管理节点负责监控节点的状态并协调故障转移过程。     3、客户端在与 Redis 集群交互时根据键的哈希值将请求发送到相应的节点。客户端还可以通过集群管理节点获取整个集群的拓扑信息了解哪些键存储在哪个节点上。     4、通过数据分片和主从复制Redis 集群实现了数据水平切分、负载均衡和高可用性。它允许数据规模和吞吐量的线性扩展并能自动处理节点故障。集群管理节点协调集群状态客户端通过哈希槽映射与集群交互从而实现了一个稳定和可靠的 Redis 分布式系统。          什么是Redis哨兵机制 Redis 哨兵是一种用于高可用性的解决方案它可以监控 Redis 主从复制模式下的主节点和从节点发现节点故障并自动进行故障转移保证 Redis 系统的稳定性和可靠性。 Redis 哨兵机制由多个相互独立的进程组成这些进程使用 TCP/IP 协议相互通信实现 Redis 节点的监控和故障转移。哨兵机制的关键进程包括 sentinel主进程用于监控 Redis 节点的状态并执行故障转移操作。monitor哨兵进程用于监控 Redis 的主节点和从节点是否正常工作并在需要时通知其他哨兵进程和客户端。judge哨兵进程用于对节点的健康状况进行评估并根据预定义的阈值决定是否要将一个不健康的节点标记为“主观下线”。failover哨兵进程负责执行故障转移操作将主节点故障时选举出来的从节点晋升为新的主节点并通知其他 Redis 节点更新配置信息。 MySQL里有2000w数据Redis中只存20w的数据如何保证 redis 中的数据都是热点数据 首先我们可以看到Redis的空间时间上比我们MySQL少的多那么Redis如何能够筛选出热点数据这道题主要考察的是Redis的数据淘汰策略这里有个误区很多人容易混淆把数据淘汰策略当做数据过期策略在Redis 4.0之后是为我们提供了8种淘汰策略4.0之前则是提供的6种主要是新增了LFU算法。其实说说是有8种但是真正意义上是5种针对random、lru、lfu是提供了两种不同数据范围的策略一种是针对设置了过期时间的一种是没有设置过期时间的。具体的五种策略分别为 noeviction 选择这种策略则代表不进行数据淘汰同时它也是redis中默认的淘汰策略当缓存写满时redis就不再提供写服务了写请求则直接返回失败。random 随机策略这块则是分为两种一种是volatile这种是设置了过期时间得数据集而另外一种是allkeys这种是包含了所有的数据当我们缓存满了的时候选用这种策略就会在我们的数据集中进行随机删除。volatile-ttl 这种策略是针对设置了过期时间的数据并且按照过期时间的先后顺序进行删除越早过期的越先被删除lru 这里的lru策略和我们上面random策略一样也是提供了两种数据集进行处理LRU算法全程为最近最少使用简单一句话来概括就是“如果数据最近被访问过那么将来被访问的几率也就越高”。这种算法其实已经比较符合我们的实际业务需求了但是还是存在一些缺陷。lfu 最后一种策略就是我们的LFU算法它是在我么LRU算法基础上增加了请求数统计这样能够更加精准的代表我们的热点数据。 我们再回看我们的这个问题我们能很清楚的知道我们需要的策略是LFU算法。选择volatile还是allkeys就要根据具体的业务需求了。 Redis如何保证与数据库的双写一致性 首先我们来看看一致性     ● 强一致性     ● 弱一致性 解决双写一致性方案     ● 延迟双删       ○ 延迟双删策略是分布式系统中数据库存储和缓存数据保持一致性的常用策略但它不是强一致。       ○ 实现思路也是非常简单的先删除缓存然后更新DB在最后延迟 N 秒去再去执行一次缓存删除       ○ 弊端小概率会出现不一致情况、耦合程度高     ● 通过MQ进行重试删除       ○ 更新完DB之后进行删除如果删除失败则向MQ发送一条消息然后消费者不断进行删除尝试。     ● binlog异步删除       ○ 实现思路低耦合的解决方案是使用canal。canal伪装成mysql的从机监听主机mysql的二进制文件当数据发生变化时发送给MQ。最终消费进行删除
http://www.tj-hxxt.cn/news/227419.html

相关文章:

  • 网站建设售后协议平台建网站
  • 东营网站建设培训wordpress php5
  • 青岛企业网站开发wordpress jnews
  • 官网网站开发创建网站目录结构应遵循的方法
  • 杭州网站建设文章动漫设计制作专业学什么
  • 西直门网站建设公司如归网络营销推广企业
  • 企业怎么建设自己的网站单页面的网站模板
  • 台州电子商务网站开发镇江seo网站
  • 顺德定制网站设计设计建立企业网站最佳的公司
  • 建设网站需要设备全媒体门户网站建设方案
  • 外贸建站选择哪个服务器好成都网站游戏设计
  • 有建设银行信用卡怎么登陆不了网站网站内置字体
  • 微信分享接口网站开发手机关键词点击排名软件
  • fontawesome 网站2021世界500强
  • 网站建设合同 附件wordpress 国内视频教程
  • 如何做类似于淘宝的网站wordpress粘贴word
  • 网站的功能建设方案移动端下载app
  • wordpress大学主题3.5网站搜索引擎优化方法
  • 韶山网站建设福田蒙派克所有配件
  • 国外网站平台网络营销设计方案
  • 做网站开发的经营范围wordpress 标题栏置顶
  • 常州市武进区城乡建设局网站wordpress购买返现
  • 建设网站服务费会计分录WordPress首页添加留言板
  • 苏州企业网站公司都有哪些柳州网站推广
  • 洛阳网站建设好做不顺德建设网站多少钱
  • 创建网站的成本企业开发网站公司
  • 易物网网站建设管理小程序发布要多少钱
  • 家具flash网站模板下载最牛html5网站建设
  • 自助建站软件自动建站系统国外设计作品网站
  • 做网站怎么调用栏目网站推广方式有哪些