★☆🐈★☆★☆★☆★☆★☆

Redis常用概念

  • Redis数据结构

    Redis(Remote Dictionary Server)是一种开源的内存数据库,它支持多种数据结构。Redis的数据结构是其强大之处,它可以用于各种不同的用途,包括缓存、队列、计数器、发布/订阅系统等。以下是Redis支持的主要数据结构:

    1. **字符串(String)**:
    - 用于存储文本或二进制数据。
    - 可以执行一些基本的字符串操作,如追加、截取、获取子字符串等。
    - 可以用于计数器、缓存等应用。

    2. **哈希表(Hash)**:
    - 类似于关联数组或字典,用于存储字段-值对。
    - 适用于存储对象的属性,每个字段可以看作对象的属性名,对应的值为属性的值。

    3. **列表(List)**:
    - 使用链表实现的有序集合。
    - 可以在列表的两端进行快速的插入和删除操作。
    - 适用于实现队列、栈、消息队列等数据结构。

    4. **集合(Set)**:
    - 无序的字符串集合,不允许重复元素。
    - 提供了集合操作,如并集、交集、差集等。
    - 适用于存储唯一值的集合。

    5. **有序集合(Sorted Set)**:
    - 类似于集合,但每个元素都关联一个分数,用于排序。
    - 可以按分数范围或元素排名来获取元素。
    - 适用于排行榜、带有权重的任务队列等场景。

    6. **位图(Bitmap)**:
    - 位图是由二进制位组成的数据结构。
    - 可以执行位操作,如与、或、异或,以及统计位中置位(1)的数量等操作。
    - 适用于存储布尔状态信息、进行位级别的计算等。

    7. **HyperLogLog(基数估计)**:
    - 用于估计一个集合中的不重复元素数量,占用固定的内存空间。
    - 适用于统计独立访问者数量、活跃用户数等。

    8. **地理空间数据(Geospatial)**:
    - Redis支持存储地理位置数据,并提供了一些地理空间操作,如计算距离、查找附近的元素等。
    - 适用于地理位置相关的应用,如位置服务、地理推荐等。

    这些数据结构使Redis非常灵活,可以应用于多种场景。Redis还提供了丰富的命令和功能,用于操作和查询这些数据结构,使其成为一个强大的缓存和数据存储引擎。

 

 

  • redis的5种基本数据类型使用场景,应用场景

    1. String(字符串): 这是最基本的数据类型,它可以存储任何类型的数据,比如字符串、整数、浮点数等。我们可以使用它来存储用户的登录信息、计数器、缓存数据等场景。

    2. Hash(哈希): 哈希类型适合存储对象,它可以将多个键值对存储在一个键下。我们可以使用它来存储用户信息、商品信息等。比如,我们可以将用户的姓名、年龄、性别等信息都存储在一个用户ID的哈希类型键下,方便查询和修改。

    3. List(列表): 列表类型适合存储一个有序的元素集合,可以进行插入、删除等操作。我们可以使用它来实现消息队列、最新消息列表等。比如,我们可以将用户的最新动态按时间顺序存储在一个列表中,方便获取最新的动态。

    4. Set(集合): 集合类型可以存储不重复的元素,并且支持增删查操作。我们可以使用它来存储用户的好友列表、标签列表等。比如,我们可以将用户的好友ID存储在一个集合中,方便查找某个用户的好友列表。

    5. Sorted Set(有序集合): 有序集合类型和集合类型类似,不同的是有序集合中的元素可以按照一个给定的分数进行排序。我们可以使用它来存储排行榜、热门文章等。比如,我们可以将用户的成绩存储在有序集合中,方便查找排名靠前的用户。

 

  • 惰性删除

    "惰性删除" 是指在数据存储或缓存系统中,不会立即删除已标记为删除的数据,而是在需要时才进行删除。这个概念通常用于优化性能,因为即使数据被删除了,仍然可以在某些情况下访问它,直到被系统或应用程序实际清理为止。

    在Redis中,有一个数据结构和过期时间的概念,这使得惰性删除成为可能。以下是关于Redis中的惰性删除的一些相关信息:

    1. **过期时间**:Redis中的键(key)可以设置过期时间,一旦过期时间到达,Redis将自动删除该键。这个过程是自动的,无需手动删除键。设置过期时间的命令通常是`EXPIRE`或`TTL`。

    2. **惰性删除**:当一个键过期后,Redis不会立即从内存中删除它。相反,它会在某些条件下进行惰性删除。具体来说,当尝试访问该键时,Redis会检查它是否已过期,如果过期了,Redis将删除该键并返回空值。

    3. **内存回收**:Redis使用一种称为"定期删除"的策略,以及一种称为"惰性删除"的策略来回收过期键的内存。定期删除会定期检查一些键,如果过期则删除。而惰性删除则是在访问键时检查过期情况,如果过期则删除。这两种策略结合起来确保了内存的有效回收。

    4. **持久化**:需要注意的是,惰性删除仅在内存中进行。如果你使用Redis的持久化功能(如RDB快照或AOF日志),过期的数据也会被记录在持久化文件中,以便在Redis重新启动后进行恢复。

    通过这种方式,Redis实现了一种高效的过期键管理机制,不会频繁地扫描整个数据库来删除过期数据,而是在需要时进行删除,从而降低了维护开销并提高了性能。但需要注意的是,过期键的删除是基于访问模式的,如果某个键永远不被访问,那么它可能会一直存在于内存中,直到过期时间到达。因此,在使用Redis时,需要谨慎管理键的过期时间,以确保不会因为未及时删除而导致内存占用过高。

 

  • 缓存穿透,缓存击穿,缓存雪崩是什么及解决方案

    缓存穿透、缓存击穿和缓存雪崩都是与缓存系统相关的性能问题,它们分别表示不同的情况和挑战。以下是它们的定义以及解决方案:

    1. **缓存穿透(Cache Miss)**:
    - 缓存穿透是指恶意或者恶意访问大量不存在于缓存中的数据,导致缓存无法命中,每次请求都需要访问后端数据库或其他存储系统。
    - 解决方案:
    - 使用布隆过滤器:布隆过滤器是一种数据结构,可以用来快速判断一个元素是否可能存在于缓存中,从而减少了无效查询的负载。
    - 缓存空对象:如果查询数据库后发现某个键对应的数据不存在,也将这个结果缓存起来,但设置一个较短的过期时间,以防止频繁的查询。

    2. **缓存击穿(Cache Miss with High Load)**:
    - 缓存击穿是指某个热门数据(在缓存中存在),在缓存过期后,同时有大量请求访问它,导致数据库或后端系统压力激增。
    - 解决方案:
    - 使用互斥锁(Mutex):在缓存失效时,使用互斥锁来阻止多个线程同时去查询数据库,只有一个线程去查询数据库,其他线程等待。
    - 预加载热门数据:提前加载或者定期刷新热门数据,以确保缓存中的数据不会在同一时间大规模失效。
    - 针对不同的数据设置不同的过期时间,以分散过期时间点的负载。

    3. **缓存雪崩(Cache Avalanche)**:
    - 缓存雪崩是指大量缓存数据在同一时间内失效,导致大量请求直接落到后端系统上,产生巨大压力。
    - 解决方案:
    - 使用随机过期时间:为不同的缓存数据设置稍微不同的过期时间,使得它们不会在同一时刻大规模失效。
    - 使用多级缓存:引入多级缓存系统,例如,本地缓存和分布式缓存,以降低单点故障的风险。
    - 设置持久性缓存:将一部分热门数据设置为持久性缓存,不过期,以确保始终可用。

    总的来说,缓存穿透、缓存击穿和缓存雪崩都是需要注意的缓存问题。合适的解决方案可以根据具体的应用场景和需求来选择,通常需要综合考虑使用布隆过滤器、互斥锁、合适的缓存过期策略以及多级缓存等方法来保护缓存系统的稳定性和性能。

 

posted @   qd372502  阅读(10)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示