LOGO OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 开发文档 其他文档  
 
网站管理员

Redis入门必须了解哪些知识

admin
2025年8月10日 22:0 本文热度 92

Redis是一种开源的基于BSD许可的内存数据库,可用作数据库、缓存、消息代理等,是NoSQL型数据库

Redis的特点

  1. Redis是基于内存的,操作速度非常快

  2. Redis是单进程单线程的,线程安全,采用IO多路复用机制

  3. Redis支持丰富的数据类型,字符串(String)、哈希(Hash)、列表(List)、集合(Set)、有序集合(sorted set)等

  4. Redis所有操作都是原子性的,要么全部成功,要么全部失败

Redis为什么这么快?

redis速度非常快,可达到每秒十万级的吞吐量,这基于以下几点原因

  1. redis是基于内存实现的,内存的读写速度要远高于硬盘的读写速度

  2. redis主体是单线程的,没有锁的问题。说明:redis整体不是单线程的,处理请求时是单线程执行

  3. 特殊的数据结构,redis中字符串用的是SDS动态字符串

    SDS与C的字符串:


    1. C中字符串未记录字符串长度,查询字符串长度时需要遍历整个字符串,时间复杂度为O(n),并且在扩充和缩短字符串时,要注意缓冲区溢出和内存泄漏问题

    2. SDS字符串的len存储了字符串长度信息,查询字符串长度时间复杂度为O(1),在扩充字符串时会先检查空间是否满足需求空间,如果不满足,则会先对SDS空间进行扩展,避免了缓冲区溢出

    3. SDS字符串减少了内存分配次数,在扩充字符串时会执行空间预分配(空间分配策略),在修改后字符串长度时,不仅分配了必须的空间,还会分配一定大小的free未使用空间(修改后长度小于1MB,则和字符串长度相等,反之,最大为1MB);在缩短字符串时,采用了惰性空间释放,即修改字符串长度后,不会立即释放空间,而是将空间分配到free未使用空间中,以便于下次使用

    4. SDS字符串是二进制安全的,因为buf存储的不是字符,存储的是二进制数据

  4. I/O多路复用

    Redis服务器是一个事件驱动程序,包含了文件事件和时间事件。文件事件就是redis服务器和其他端进行通信时产生的相应的文件;时间事件是redis内部的一些在给定时间内要进行的操作

    文件事件处理器是单线程执行的,但内部实现了I/O多路复用,即内部通过监听同时监听多个Socket连接,快速响应连接请求,但在内部I/O多路复用程序会将Socket放在一个有序的队列中,通过文件事件分派器有序分配给事件处理器进行处理,一个Socket的事件执行完毕后,才会执行下一个Socket,即是单线程。但这里也要注意事件处理器里并不是单线程的

Redis数据的更新、过期可采用的策略是什么?

  1. 数据更新策略(redis缓存与DB数据保证一致性)

    Cache-Aside pattern 缓存更新模式


在查询时,首先去查询缓存,如果命中了缓存,就取出返回数据。如果没有命中缓存,则去数据库进行查询,并保存在redis缓存中,这样保证了缓存的数据会进行更新;对数据进行更新的时候,先进行DB数据的更新,再删除缓存,这样避免了旧数据缓存一直存在(查询时一直命中旧数据缓存)

  1. 数据过期策略

    1. 定期删除 优点:节约了内存 缺点:cpu压力大

      redis会间隔一段时间(默认100ms)去随机抽取一些设置了过期时间的缓存,检查其是否过期。随机抽取的原因是,如果按照一定数量去顺序查询时,后面的过期缓存可能长时间不能被清理,若每次都是全量的检查时,数据量大,cpu压力。

    2. 惰性删除 优点:cpu压力小 缺点:内存压力大

      redis不进行主动的删除,当查询数据时,若该数据没有过期,则返回数据,反之,则删除数据,避免了cpu压力大的情况,但是若过期数据长期未被查询,则一直存留,增加了内存的压力

Redis的淘汰机制有哪些?

在数据过期策略中提到惰性删除时,可能会有数据长时间未被删除,再加上未过期数据,那么就可能达到内存限制的上限,此时需要进行数据淘汰

  1. 新写入数据时报错(默认策略)

  2. 在键空间中,随机移除某个key

  3. 在键空间中,移除最近很少使用的key(LRU算法推荐)

Redis持久化有哪些方式?

  1. RDB

    快照形式,定时在redis需要做持久化时,redis会开启子进程,将redis中的数据写入dump.rdb文件中保存在硬盘

    优点:RDB存储效率高,文件体积小,恢复时速度快于AOF

    缺点:定时执行,未保存数据,redis就重启了,不能保证数据完整性

  2. AOF

    默认每秒钟一次,将redis的修改命令全部保存在一个AOF文件中,每当redis服务器做一次修改命令,都将该命令保存下来,从而达到持久化

    优点:数据足够完整,即便丢失也仅丢失了一秒的数据

    缺点:相对于RDB文件,恢复数据速度慢,文件体积大

    从优缺点中可以看出当你的程序需要高度保证数据的完整性时还是采用AOF方式更加可靠

Redis缓存雪崩、穿透、击穿的原因和解决方案有哪些?

缓存雪崩:

原因:存在缓存设置了过期时间且大量缓存在短时间段内过期的情况

解决方案:

  1. 设置永久不过期(不推荐)

  2. 在可接受的范围内,随机设置过期时间

缓存穿透:

原因:

  1. 缓存大面积无法命中

  2. 接口被攻击,非常规查询,如:查询id<0,使得缓存无法命中

解决方案:

  1. 布隆过滤器

  2. 做一些通用的简单校验,例如:查询时,若id<=0,则不进行查询

  3. 缓存一条全空数据,过期时间要尽可能小一点,效果可能不太理想

缓存击穿:

原因:大量的请求命中相同一个key,在此key失效时,对应的请求全部落到数据库上

解决方案:

  1. 加锁,排队进行请求,若key不存在(不论是过期还是首次查询无缓存),则进行一次DB查询,然后将数据缓存进redis

  2. 设置永久不过期(不推荐)


阅读原文:原文链接


该文章在 2025/8/11 10:32:14 编辑过
关键字查询
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2025 ClickSun All Rights Reserved