首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

面试官:redis中的大key要如何删除?

今天来聊聊面试中的高频考点:如何处理redis缓存中的大key? 大 key 其实并不是指 key 的值很大,而是 key 对应的 value 很大,占了很大内存。 为什么会有大Key?...参考标准大致如下: String 类型的值大于 1 MB Hash、List、Set、ZSet类型的元素的个数超过 5000个 影响的后果 大key会带来以下四种危害: 资源消耗:大Key会占用较多的内存资源...内存分布不均:在redis cluster集群模式中,大key一般不会分片分布,造成单节点内存占用过高,出现数据倾斜的情况。...数据一致性和恢复问题:在主从复制和数据迁移场景中,大Key可能导致同步和迁移延迟,增加数据丢失的风险,同时可能延长故障恢复时间。 如何查找大key?...针对大key,肯定是要删除的,那怎么删除才最高效呢?直接用del命令行不行?答案是不行。Redis 官方文档描述到: 1、String 类型的key,DEL 时间复杂度是 O(1),大key除外。

1.1K10
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Redis中设置了过期时间的Key,那么你还要知道些什么?

    熟悉Redis的同学应该知道,Redis的每个Key都可以设置一个过期时间,当达到过期时间的时候,这个key就会被自动删除。这就是Redis的过期策略。...127.0.0.1:6379> ttl incr_key(integer) 277 LPUSH: //新增一个list类型的key,并添加一个为1的值127.0.0.1:6379> LPUSH list...以下的版本中,使用expire命令更新一个已经设置了过期时间的key的过期时间会失败。...定期删除 定期删除的原理是,Redis会将所有设置了过期时间的key放入一个字典中,然后每隔一段时间从字典中随机一些key检查过期时间并删除已过期的key。...Redis默认每秒进行10次过期扫描: 1、从过期字典中随机20个key 2、删除这20个key中已过期的 3、如果超过25%的key过期,则重复第一步 同时,为了保证不出现循环过度的情况,Redis还设置了扫描的时间上限

    3.3K10

    对于Redis中设置了过期时间的Key,你需要知道这些内容「建议收藏」

    熟悉Redis的同学应该知道,Redis的每个Key都可以设置一个过期时间,当达到过期时间的时候,这个key就会被自动删除。...127.0.0.1:6379> ttl incr_key (integer) 277 LPUSH: //新增一个list类型的key,并添加一个为1的值 127.0.0.1:6379> LPUSH list...295 在Redis2.1.3以下的版本中,使用expire命令更新一个已经设置了过期时间的key的过期时间会失败。...定期删除 定期删除的原理是,Redis会将所有设置了过期时间的key放入一个字典中,然后每隔一段时间从字典中随机一些key检查过期时间并删除已过期的key。...Redis默认每秒进行10次过期扫描: 从过期字典中随机20个key 删除这20个key中已过期的 如果超过25%的key过期,则重复第一步 同时,为了保证不出现循环过度的情况,Redis

    1.1K10

    使用 System.Text.Json 时,如何处理 Dictionary 中 Key 为自定义类型的问题

    在使用 System.Text.Json 进行 JSON 序列化和反序列化操作时,我们会遇到一个问题:如何处理字典中的 Key 为自定义类型的问题。...同样的,在反序列化 JSON 字符串时,JSON 对象中的 Key 会被反序列化为一个 CustomType 类型的对象,而不是我们想要的字符串。...我们将 CustomType 类型的 Key 属性作为字典的 Key,在序列化操作中,将 Key 属性序列化为字符串,并在反序列化操作中,将字符串反序列化为 Key 属性。...我们将 CustomType 类型的 Key 属性作为字典的 Key,在序列化操作中,将 Key 属性序列化为字符串,并在反序列化操作中,将字符串反序列化为 Key 属性。...总结 本文通过一个实例,介绍了如何使用 System.Text.Json 进行序列化和反序列化操作时,处理字典中 Key 为自定义类型的问题。

    34720

    redis命令之操作字符串

    Redis的字符串就是一个由字节组成的序列,他们和很多编程语言里的字符没有什么明显区别,更多的适合js中的字符串类似,字符串可以存储以下三张从类型的值: - 字符串,字符类型 - 整数 - 浮点数...用户可以通过给定一个任意的数值,对存储着整数或者浮点数的字符串执行自增或自减操作,在有需要的时候,Redis还会将整数转换成浮点数。...整数的取值范围和系统的长整数取值范围相同,而浮点数的取值范围和精度则和IEEE 754标准的双精度浮点数(double)相同。...接下来看一下redis操作字符串类型的命令 命令 描述 SET key value 设置指定 key 的值 GET key 获取指定 key 的值 GETRANGE key start end 获取一个有偏移量...GETBIT key offset 对 key 所储存的字符串看做是二进制串,并返回串中偏移量为offset的二进制位的值。 MGET key1 [key2..]

    40820

    Redis 列表

    在Redis中,可以对列表两端插入(push)和弹出(pop),还可以获取指定范围的元素列表、获取指定索引下标的元素等。...如果 key 不存在,一个空列表会被创建并执行 LPUSH 操作。 当 key 存在但不是列表类型时,返回一个错误。 在Redis 2.4版本以前的 LPUSH 命令,都只接受单个 value 值。...当存在多个给定 key 时, BLPOP 按给定 key 参数排列的先后顺序,依次检查各个列表。...linkedlist(链表):当列表类型无法满足ziplist的条件时,Redis会使用 linkedlist 作为列表的内部实现。...quicklist (快速列表) Redis 3.2 版本及以上才有该内部编码:quicklist 是一个 ziplist 的双向链表。双向链表是由多个节点(Node)组成的。

    83020

    如何使用构建在 Redis 之上的 BullMQ 库在 Node.js 中实现一个消息队列。

    在这篇文章中,我们将使用建立在Redis之上的BullMQ库,在Node.js中实现一个消息队列。我们将实现两个消息队列。一个用于为特定订单添加退款任务。...mkdir messaging_queuecd messaging_queuenpm initnpm i express bullmq -D步骤2:队列的实现首先,创建一个 refundQueue.js...文件中编写代码来实现Express服务器。...步骤6:Docker设置为了运行BullMQ的代码,我们需要在本地计算机上运行一个Redis服务器。因此,我们将使用Docker。...:6379 stdin_open: true现在,使用以下命令启动Redis容器:docker-compose up -d现在,我们可以运行我们的Express服务器:node index.js我正在参与

    78800

    基于开源方案构建统一的文件在线预览与office协同编辑平台的架构与实现历程

    界面,并在界面中完成使用OnlyOffice的JS api请求的操作。...其中具体type的取值0表示断开连接,1表示建立连接 key String 目标文档在OnlyOffice中处理的唯一标识ID,注意这里的key与业务系统中目标文件实际的唯一ID并非一个概念,不能混为一谈...status Integer 文档当前的操作状态类型,取值说明:1: 文档正在被编辑2:文件已准备好保存3:文档保存发生错误4:文件关闭,没有变化6:文档正在被编辑,但是当前状态已经被保存7:强制保存文档时发生错误...从上一章的阐述中,我们知道OnlyOffice的功能实现严重依赖单机本地的缓存数据信息,在集群部署的场景下,过度依赖本地缓存的弊端就显现出来了。...通过随机分发+Redis记住文档与节点映射的方式,先随机选择一个节点,然后记录下此文件与OnlyOffice节点之间的映射关系,然后后面对此文件的请求始终分发到该OnlyOffice节点上。

    3.5K52

    Redis入坟(一)redis的前世今生、redis基础及存储结构源码讲解

    Redis,但是只知道可以做缓存,只知道 get set 方法 3、不知道 Redis 其他数据类型、各种数据类型的底层存储结构的同学 基于最新版本:5.0.5 1....key 是字符串,但是 Redis 没有直接使用 C 的字符数组,而是存储在自定义的 SDS中。...BITOP NOT destkey key , 对给定 key 求逻辑非, 并将结果保存到 destkey 。...把所有相关的值聚集到一个 key 中,节省内存空间 只使用一个 key,减少 key 冲突 当需要批量获取值的时候,只需要使用一个命令,减少内存/IO/CPU 的消耗 Hash 不适合的场景: Field...在这样一个链表中,如果我们要查找某个数据,那么需要从头开始逐个进行比较,直到找到包含数据的那个节点,或者找到第一个比给定数据大的节点为止(没找到)。 也就是说,时间复杂度为 O(n)。

    1.1K50

    Redis 不良人

    /redis-server方式启动使用的是redis-server这个shell脚本中默认配置 如何在启动Redis时指定配置文件启动 注意:默认的Redis安装完成之后在安装目录没有任何配置文件,需要在源码目录中复制...TYPE 作用:返回给定key所储存的值的类型 # 10. RENAME 作用:将key改名为newKey 常用操作命令 命令 描述 Redis Type 命令 返回 key 所储存的值的类型。...Redis Move 命令 将当前数据库的 key 移动到给定的数据库 db 当中。 Redis RANDOMKEY 命令 从当前数据库中随机返回一个 key 。...Redis Spop 命令 移除并返回集合中的一个随机元素 ZSet 类型 内存存储模型 ?...Redis Zunionstore 命令 计算给定的一个或多个有序集的并集,并存储在新的 key 中 Redis Zremrangebyrank 命令 移除有序集合中给定的排名区间的所有成员 Redis

    43540

    Redis常用数据类型使用及基本知识

    cluster forget :从集群中移除 node_id 指定的节点(保证空槽道)。...其他特性: Key-value字典结构存储,存储在内存,key是string类型,value根据不同的数据类型而不同 它的出世就是为了解决磁盘的性能问题,既然是解决性能问题,所以它是一个以key-value...//切换数据库 select 0 我们刚才讲过它是一个key-value的方式,所以: //存值: set zwq 666 //取值: get zwq 我是不是能像数据库的一样每个业务用不同的db?...但是常用的其实就5个。 String 我们刚才已经知道了redis里面都是key-value的结构存储的,那么string数据类型那个value可以存储什么?...1、把所有相关的值聚集到一个大key中,节省内存空间 2、只使用一个key,减少key冲突 3、当需要批量获取值的时候,只需要使用一个命令,减少内存/IO/CPU 的消耗 但是,它也有一个不足:

    32630

    redis 学习(15)-- GEO

    key] [storedist key] 含义:以给定的经纬度为中心,返回包含的位置元素当中,与中心距离不超过给定最大距离的所有位置元素。...sort取值范围 asc:根据中心位置,按照从近到远的方式返回位置元素 desc:根据中心位置,按照从远到近的方式返回位置元素 store key:将返回结果而的地理位置信息保存到指定键 storedist...key:将返回结果距离中心节点的距离保存到指定键 5.georadiusbymember key member radius unit [withcoord][withdist][withhash][...COUNT count][sort][store key][storedist key] 含义:以给定的元素为中心,返回包含的位置元素当中,与中心距离不超过给定最大距离的所有位置元素。...key:将返回结果距离中心节点的距离保存到指定键 演示 由于我的 redis 版本是 3.0.7,geo 功能是在 redis-3.2 后引入的,所以这里我直接贴出演示命令,就不在重装 redis 了

    47450

    Redis基础篇

    key 是字符串,但是 Redis 没有直接使用 C 的字符数组,而是存储在自定义的 SDS中。...问题 2、为什么 Redis 要用 SDS 实现字符串? 我们知道,C 语言本身没有字符串类型(只能用字符数组 char[]实现)。 1、使用字符数组必须先给目标变量分配足够的空间,否则可能会溢出。...1、把所有相关的值聚集到一个 key 中,节省内存空间 2、只使用一个 key,减少 key 冲突 3、当需要批量获取值的时候,只需要使用一个命令,减少内存/IO/CPU 的消耗 Hash 不适合的场景...在这样一个链表中,如果我们要查找某个数据,那么需要从头开始逐个进行比较,直到找到包含数据的那个节点,或者找到第一个比给定数据大的节点为止(没找到)。 也就是说,时间复杂度为 O(n)。...23 比 26 小,说明待查数据 23 在原链表中不存在   在这个查找过程中,由于新增加的指针,我们不再需要与链表中每个节点逐个进行比较了。需要比较的节点数大概只有原来的一半。这就是跳跃表。

    46720

    redis学习笔记

    O(1) append key value:将给定的value追加到原值的末尾。O(N),其中N为新追加内容的长度。 strlen key:获取值的长度。...quicklist是Redis 3.2中新引入的数据结构(参考:《Redis5设计与源码分析-陈雷等》) list-max-ziplist-size配置节点所占内存大小。...实际上每个ziplist节点所占的内存会在该值上下浮动 考虑quicklistNode节点个数较多时,我们经常访问的是两端的数据,为了进一步节省空间,Redis允许对中间的quicklistNode节点进行压缩...zllen:记录了压缩列表包含的节点数量 entryX:列表包含的各个节点 prev_len:表示前一个 entry 的长度。prev_len 有两种取值情况:1 字节或 5 字节。...O(N),其中N为用户给定的HyperLogLog数量 6.3 Geospatial 6.3.1 简介 Redis 3.2 中增加了对GEO类型的支持。GEO,Geographic,地理信息的缩写。

    93030

    【Redis面试】基础题总结(中)

    ,在线伸缩等场景 Redis集群中数据的分片逻辑: redis集群的功能限制 redis集群方案在扩展redis的处理能力的同时,也带来了一些使用上的限制 1.key批量支持有限:如mset...中取值,当按照分值的范围访问有序集合列表时可以直接从zsl中取值,采用了空间换时间的策略。...4.如何利用redis实现分布式session 在web开发中,我们会把用户的登录信息存储在session中,而session是依赖与cookie的,即服务器创建session时会给他分配一个唯一的id...第二是验证令牌的程序,就是在用户再次访问服务器时,我们获取到了它之前的身份标识,那么我们就要验证一下这个标识是否存在了。验证的过程很简单,我们从Redis中尝试获取一下就可以知道结果。...13.客户端如何路由? 既然 Redis 集群中的数据是分片存储的,那我们该如何知道某个 key 存在哪个节点上呢?即我们需要一个查询路由,该路由根据给定的 key,返回存储该键值的机器地址。

    21620

    Zepto这样操作元素属性

    如果没有给定value参数,则读取对象集合中第一个元素的属性值。 当给定了value参数。则设置对象集合中所有元素的该属性的值。...紧接着再看当前选中的元素集合中第一个元素是否存在并且节点类型是否为element类型,如果是,再调用getAttribute获取name属性,结果不为null或者undefined的话直接返回,否则统一返回...html() 获取或设置对象集合中元素的HTML内容。当没有给定content参数时,返回对象集合中第一个元素。当给定content参数时,用其替换对象集合中每个元素的内容。...text() 获取或者设置所有对象集合中元素的文本内容。 当没有给定content参数时,返回当前对象集合中第一个元素的文本内容(包含子节点中的文本内容)。...(2017-06-05) 向zepto.js学习如何手动触发DOM事件(2017-06-07) 谁说你只是"会用"jQuery?

    2.4K70

    Redis系列:Redis的数据结构

    Redis 中字符串类型常用命令: SET key value # 设置指定key的值 GET key # 获取指定key的值 SETEX key seconds value...每个链表的节点由一个 listNode 结构来表示,每个节点都有指向前置节点和后置节点的指针,同时表头节点的前置和后置节点都指向 NULL。列表有两个特点:有序、可以重复。...# 返回 key 所储存的值的类型 TTL key # 返回给定 key 的剩余生存时间(TTL, time to live),以秒为单位...BitMap通过最小的单位bit来进行0|1的设置,表示某个元素的值或者状态,时间复杂度为O(1) Bitmap 类型非常适合二值状态统计的场景,这里的二值状态就是指集合元素的取值就只有 0 和 1 两种...Redis 2.8.9 版本新增的数据类型,是一种用于「统计基数」的数据集合类型,基数统计就是指统计一个集合中不重复的元素个数。

    42020
    领券