Redis学习笔记

99 阅读4分钟

Redis学习笔记

  1. Redis概述
  • Redis是一个开源的、基于内存的数据结构存储系统,可用作数据库、缓存和消息代理。它支持多种数据结构,如字符串、哈希表、列表、集合、有序集合等。
  • 具有高性能、持久化、多种数据类型支持、原子操作、数据备份等特性,广泛应用于缓存、计数器、排行榜、消息队列、实时分析等场景。
  1. 数据结构与应用场景
  • 字符串(String)
  • 应用场景包括缓存用户信息、计数器(如点赞数、浏览量)、分布式锁等。
  • 示例:通过SET key value设置键值对,GET key获取值,INCR key实现原子自增操作。
  • 哈希表(Hash)
  • 适合存储对象,如用户信息、商品信息等,可对对象的单个属性进行操作。
  • 操作命令有HSET key field valueHGET key fieldHGETALL key等。
  • 列表(List)
  • 可用于实现消息队列、文章列表、时间线等功能。
  • 相关命令如LPUSH key value(从头部插入元素)、RPUSH key value(从尾部插入元素)、LPOP key(从头部弹出元素)、BRPOP key timeout(阻塞式从尾部弹出元素)。
  • 集合(Set) - 用于去重、好友关系、共同关注等场景。
  • 操作包括SADD key member(添加元素)、SMEMBERS key(获取所有元素)、SINTER key1 key2(求交集)等。
  • 有序集合(Sorted Set) - 适用于排行榜、按权重排序的数据等。
  • 命令如ZADD key score member(添加元素并指定分数)、ZRANGE key start stop [WITHSCORES](按排名范围获取元素)。
  1. 持久化策略
  • RDB持久化 - 原理是在指定时间间隔内,将内存中的数据集快照写入磁盘。
  • 优点是数据恢复速度快,缺点是可能会丢失最后一次快照后的部分数据。
  • 配置参数如save <seconds> <changes>指定触发快照的条件。
  • AOF持久化
  • 以日志形式记录服务器所处理的每一个写、删除操作,在服务器启动时会重新执行这些命令来恢复数据。
  • 优点是数据安全性高,缺点是文件体积较大,恢复速度相对较慢。
  • 配置参数包括appendonly yes/no开启或关闭AOF,appendfsync always/everysec/no指定同步策略。
  1. 缓存策略与优化
  • 缓存穿透
  • 问题描述:查询一个不存在的数据,导致请求绕过缓存直接打到数据库,造成数据库压力过大。
  • 解决方案:缓存空对象、使用布隆过滤器等。
  • 缓存雪崩
  • 问题描述:大量缓存同时过期或缓存服务宕机,导致大量请求直接访问数据库。
  • 解决方案:设置缓存过期时间随机化、使用分布式缓存架构、限流降级等。
  • 缓存热点 - 问题描述:某些热点数据访问频繁,导致缓存节点负载过高。
  • 解决方案:热点数据分散存储、热点数据预加载等。
  1. 集群与分布式
  • 主从复制
  • 原理:一个主节点(Master)负责写操作,多个从节点(Slave)负责读操作,从节点从主节点复制数据。
  • 优点是提高读性能、实现数据备份,缺点是不具备自动故障转移能力。
  • Redis Sentinel - 功能:用于监控主从节点状态,实现自动故障转移。
  • 配置多个Sentinel节点,当主节点故障时,Sentinel会选举出一个从节点升级为主节点。
  • Redis Cluster
  • 特点:将数据分片存储在多个节点上,支持自动分片、故障转移、动态扩缩容。
  • 数据通过哈希槽(Hash Slot)分布在不同节点,节点之间通过Gossip协议进行通信。
  1. 性能优化
  • 内存优化
  • 合理设置数据结构,避免内存浪费,如使用整数对象代替字符串存储整数。
  • 控制键值对数量,及时清理过期数据。
  • 网络优化 - 使用长连接减少连接建立和断开的开销。
  • 优化批量操作,减少网络往返次数。
  • 配置优化 - 根据实际场景调整参数,如maxmemory(设置最大内存)、maxclients(设置最大客户端连接数)等。
  1. 案例分析
  • 以某电商系统为例,介绍Redis在缓存商品信息、购物车、用户订单状态等方面的应用,以及如何通过Redis实现分布式锁解决库存超卖问题。
  • 分析在高并发场景下,Redis如何与数据库协同工作,保证系统的高性能和数据一致性。