• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

Redis-大厂程序员是怎么用的 | 青训营

武飞扬头像
CodeJuzi
帮助1

什么是Redis?

Redis(Remote Dictionary Server) 是一个开源的高性能内存数据存储系统,它支持多种数据结构,如字符串(Strings)、哈希(Hashes)、列表(Lists)、集合(Sets)、有序集合(Sorted Sets)等。Redis的设计目标是提供一个快速、可扩展、灵活的数据存储解决方案,常被称为数据结构服务器,能够用于缓存、消息队列、会话存储等多种场景。

Redis的特点

  • 高性能: Redis的数据存储在内存中,因此读写速度非常快,适用于对性能要求较高的应用场景。
  • 丰富的数据结构: Redis支持多种数据结构,能够满足不同类型的数据存储需求。
  • 持久化: Redis支持数据持久化,可以将数据保存到磁盘上,以防止数据丢失。
  • 分布式: Redis支持分布式部署,可以搭建Redis集群来提高系统的可用性和容错性。
  • 发布订阅: Redis支持发布订阅模式,可以用作消息队列或实时通知。
  • 事务: Redis支持事务,可以批量执行多个命令,保证一系列操作的原子性。

Redis的应用场景

  1. 缓存: Redis常被用作缓存,将热门数据存储在内存中,提高读取速度。对于高访问量的应用,使用Redis缓存可以显著减轻数据库的负担。
  2. 会话存储: Redis可用于存储会话数据,特别适用于分布式系统中,以确保用户在多个服务器上的会话状态一致。
  3. 计数器和统计: Redis的原子操作特性使其非常适合实现计数器和统计功能,如点赞、评论数、在线用户数等。
  4. 消息队列: Redis的发布订阅模式和List数据结构可用于实现消息队列,支持任务异步处理和实时消息通知。
  5. 排行榜和计时器: Redis的有序集合数据结构支持排行榜功能,可以用于存储并实时更新排名信息,如热门商品排行、用户积分等。
  6. 分布式锁: Redis的原子操作和过期特性可以用于实现分布式锁,确保在分布式环境下的资源同步访问。
  7. 地理位置: Redis的地理位置数据结构(GeoHash)可以用于存储和查询地理位置信息,如附近的商店、活动等。
  8. 实时统计和日志分析: Redis的高性能和数据结构可用于实时统计和日志分析,如实时用户活动监控、访问日志统计等。

Redis使用的注意事项

BigKey

"大Key"是指存储在Redis中的某个数据项的大小超过了一定阈值,通常这个阈值是10KB。大Key可能是一个很大的字符串、列表、哈希等数据结构,其存在会对Redis的性能产生负面影响,具体体现在以下几个方面:

  1. 内存占用: 大Key占用较多内存,会导致Redis的内存使用率增加,可能影响Redis的稳定性和可用性。
  2. 网络传输: 在进行数据复制、持久化等操作时,大Key需要在网络中传输,可能增加网络负载和传输时间。
  3. 阻塞: 对于大Key的读写操作可能会阻塞Redis的其他操作,导致延迟增加。
  4. CPU消耗: 对大Key的处理需要占用较多的CPU资源,可能导致Redis的性能下降。

为避免大Key对Redis性能的影响,通常的做法是将大Key拆分成多个小的数据项,使用列表、集合、有序集合等数据结构代替。

HotKey

热Key: "热Key"是指被频繁访问的Key,通常因为某些热门操作(如热门商品、热门文章等)导致这些Key被频繁读写。热Key可能会导致Redis的性能瓶颈,具体问题包括:

  1. 并发瓶颈: 多个客户端同时访问热Key可能导致并发瓶颈,影响性能。
  2. 内存消耗: 热Key的数据可能频繁读写,导致内存使用率升高,影响其他数据的存储和访问。
  3. 缓存失效: 如果热Key的缓存时间设置不合理,可能导致缓存频繁失效,增加数据库的负担。

采取策略:

  1. 缓存策略: 设置合理的缓存策略,考虑热Key的过期时间、淘汰策略等,以平衡热Key和冷数据的存储。
  2. 分片: 对于热Key,可以考虑将其分散到不同的Redis实例中,减轻单个实例的压力。
  3. 读写分离: 如果热Key主要用于读操作,可以考虑引入读写分离,将读操作分担到多个从节点。
  4. 使用缓存穿透保护策略: 针对可能的缓存穿透问题,可以使用布隆过滤器等技术进行保护。

慢查询

Redis慢查询是指执行时间较长的Redis命令,可能会对Redis服务器的性能产生负面影响。慢查询可以通过Redis的Slow Log功能进行记录和监控,有助于识别性能瓶颈、优化查询以及排查问题。

Slow Log的作用: Slow Log是Redis提供的一个记录慢查询的功能。每当一个Redis命令执行的时间超过设置的阈值时,就会被记录到Slow Log中。这些记录包括命令的具体信息、执行时长和执行时间等,有助于开发者识别问题、优化查询和性能调优。

慢查询的设置和阈值: 慢查询的阈值可以通过配置文件或命令来设置。在配置文件中,你可以通过slowlog-log-slower-than选项设置一个时间(以微秒为单位),超过这个时间的命令会被记录。你也可以通过slowlog-max-len选项设置Slow Log的最大长度,超过这个长度后,旧的记录会被删除。

Slow Log的查询: 可以使用SLOWLOG GET命令来获取Slow Log中的记录。可以指定获取的记录数量,也可以获取全部记录。每条记录包括命令的执行时刻、执行时长和命令参数等信息。

缓存击穿、缓存雪崩

缓存雪崩

缓存雪崩是指在某个时间段内,缓存中的大量数据同时失效或被清除,导致大量请求直接访问数据库,造成数据库负载急剧增加,甚至引起数据库崩溃。主要原因可能包括:

  1. 大规模失效: 缓存中的大量数据在同一时刻过期,导致许多请求同时访问数据库。
  2. 缓存服务器宕机: 缓存服务器发生宕机,导致无法命中缓存,请求直接访问数据库。
  3. 缓存数据不均匀: 缓存数据的过期时间不均匀,导致在某个时间段内大量数据同时失效。

解决方案:

  1. 设置随机过期时间: 为了避免大规模失效,可以在缓存数据的过期时间上增加一个随机的时间值,使得缓存数据的过期时间分散开。
  2. 使用多级缓存: 引入多级缓存,如本地缓存和分布式缓存,可以在一级缓存失效时,尽量从二级缓存获取数据,减轻数据库负载。
  3. 热点数据永不过期: 对于一些热点数据,可以将其设置为永不过期,以保证即使缓存失效,热点数据仍然可用。
  4. 限流和降级: 在缓存失效时,可以通过限流和降级策略,控制请求的访问量,避免瞬间大量请求访问数据库。

缓存穿透

缓存穿透是指查询一个数据库中不存在的数据,由于缓存未命中,每次请求都直接访问数据库,造成数据库压力增加。主要原因可能包括:

  1. 恶意攻击: 恶意攻击者故意查询不存在的数据,以此来击穿缓存,导致大量请求访问数据库。
  2. 查询条件不合理: 查询条件不合理或输入错误,导致查询的数据在数据库中不存在。

解决方案:

  1. 缓存空值: 当查询的数据在数据库中不存在时,也将这个空结果缓存起来,设置较短的过期时间,防止恶意攻击持续请求。
  2. 布隆过滤器: 使用布隆过滤器来判断请求的数据是否存在于数据库中,如果不存在,直接拦截,避免访问数据库。
  3. 热点数据预加载: 针对一些热点数据,可以在系统启动时或者定时任务中将其预加载到缓存中,避免缓存穿透。
  4. 请求合并: 当多个请求查询相同的数据时,可以合并请求,只查询一次数据库,减少数据库访问压力。

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhgbagjj
系列文章
更多 icon
同类精品
更多 icon
继续加载