iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >Redis数据删除方式有哪些
  • 684
分享到

Redis数据删除方式有哪些

2024-04-02 19:04:59 684人浏览 八月长安
摘要

小编给大家分享一下Redis数据删除方式有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!同步和异步删除1.DEL 和 UNL

小编给大家分享一下Redis数据删除方式有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

同步和异步删除

1.DEL 和 UNLINK

Redis服务自身对Key的删除,可以分为「同步删除」和「异步删除」。使用DEL命令会触发「同步删除」,如果Key是一个有很多元素的复杂类型,这个过程可能会堵塞一下Redis服务自身,从而影响用户的访问。如果使用UNLINK命令,Redis服务会先计算删除Key的成本,从而更智能地做出「同步删除」或「异步删除」的选择。注意,只有4.0版本后,才有UNLINK命令。

2.成本计算

那么,成本是如何计算的呢?对于list,hash,set,zset的对象类型,如果长度大于64(由宏LAZYFREE_THRESHOLD定义),才会采用异步删除的手段,从当前db先释放该key,再由另外一个线程做异步删除。对于长度不大于64的复杂类型,异步删除比同步删除还多了一些函数调用与多线程同步的代价,所以同步删除更好。对于string对象,底层的数据结构sds是一份连续的内存,内存分配器回收这块内存的复杂度是O(1),所以采用同步删除也不会堵塞服务。

总的来说,我们作为用户,都能用UNLINK替代DEL。

Key的驱逐

1.定义

Redis处理命令前根据内存容量是否触达上限而进行的Key驱逐。

2.驱逐策略

Redis通过参数maxmemory来选择不同的驱逐策略:

  • volatile-random 从已设置过期时间的数据集(server.db[i].expires)中任意选择数据驱逐;volatile-lru 从数据集(server.db[i].dict)中挑选最近最少使用的数据驱逐(2.8默认);

  • volatile-ttl 从已设置过期时间的数据集(server.db[i].expires)中寻找最近即将过期(ttl最小)的key来驱逐;

  • allkeys-random 从数据集(server.db[i].dict)中任意选择数据驱逐;

  • allkeys-lru 从数据集(server.db[i].dict)中挑选最近最少使用的数据驱逐;

  • noeviction 禁止驱逐数据,永远不驱逐,仅对写操作返回一个错误(4.0默认);

在4.0版本后,还增加了以下两种驱逐策略。

  • volatile-lfu在过期集合中使用LFU链来驱逐数据;

  • allkeys-lfu 从数据集(server.db[i].dict)使用LFU算法来驱逐数据;

3.简述

Redis在处理命令前,会看看容量是否触达上限。

如果驱逐策略为noeviction,则不会驱逐Key,而是返回写失败。4.0后,在返回写入失败前,还会先检测lazyfree线程是否还有待删除的Key,没有才会给用户返回写入失败。

对于其他策略,都会根据相应定义,进行Key的驱逐,这里不再详述。

在4.0或以上的版本,Key的驱逐会基于参数lazyfree_lazy_eviction,来决定采用unlink还是del。在2.8版本,则只会用del。lazyfree_lazy_eviction参数在Qcloud 4.0上是no。

这里试问,主从节点都会进行「驱逐」么?

答案是都会的,各自会因应自身的驱逐策略进行驱逐,并且Master节点驱逐的删除命令还会传播到Slave节点。

Key的访问淘汰

1.定义

访问一个已过期的Key会触发对其的删除。

2.简述

与Key的驱逐一样,Key的访问淘汰同样是基于访问事件来触发的。

主从角色的节点在处理访问淘汰上的逻辑是不同的。

对于Slave节点,访问到了已过期的Key,Slave节点会返回该Key不存在,但不会主动删除该Key。删除的动作,还是会从Master上同步过来。

对于Master节点,在4.0或以上的版本,会根据参数lazyfree-lazy-expire,来决定用DEL还是UNLINK。对于2.8版本,则只能用DEL了。这些删除的动作,都会同步到Slave与AOF文件中。

在Qcloud 4.0以上的版本,默认是开启异步删除的,即lazyfree-lazy-expire=yes

Key的定时淘汰

1.定义

Redis自身的定时调度把已过期Key删除。

2.简述

多久会执行一次定时调度呢?

redis服务的参数hz能控制定时淘汰的频率,hz默认是10,即每秒能调度100次。

刚才说「访问淘汰」的逻辑只会在Master角色上发生,那「访问淘汰」也是吗?

一般来说,Slave节点不会进行定时淘汰,它只会等待从Master节点同步过来的删除命令,这样就保持了主从之间的一致性。然而,有些时候,用户会把Slave节点设置成可写,那么Slave上写的带有过期时间的Key,因为Master是不知道的,就一直不会淘汰掉。所以在版本4.0以后,Redis增加了单独的逻辑,在定时淘汰中删除这些在slave节点上写入的过期Key。

对于Master节点,根据宏ACTIVE_EXPIRE_CYCLE_SLOW,能选择两种淘汰模式,分别是“FAST淘汰”和“SLOW淘汰”,前者每次淘汰只能花1毫秒,不能花更多了,后者是Qcloud默认的选项,这样能在每次调度中淘汰更多的Key,但会花更多的CPU时间在淘汰上,降低了处理的访问吞吐量。下面我们针对“SLOW淘汰”展开描述。

SLOW淘汰模式,以hz=10为例,每次调度的总时间是100ms,这里调度不会25%的cpu时间,即25ms。

每淘汰多少个key,就检测一次是否超25ms呢?

如果每淘汰1个Key就检测一次,无疑代价太大。从源码上看,定时淘汰会尝试遍历每个db,遍历完了或者时间到了就退出循环。第一层循环是遍历各个db,第二层循环是遍历db里面的一批批key,一批key是20个,如果第三层循环结束后有大于5个key是成功淘汰的(说明这个db很多淘汰key),那么二层就继续循环,如果小于等于5个key,说明这个db没有很多key需要淘汰,则退出二层循环,第三层循环是一批key里面逐个key进行淘汰。即最多320个key进行判断后,就会看看是否已经超过cpu占用时间。

在4.0或以上的版本,会根据参数lazyfree-lazy-expire(默认no)来做DEL还是UNLINK。在Qcloud的4.0以上版本,这里会特意配置成yes,以便尽量采用UNLINK操作。2.8版本不支持lazyfree-lazy-expire,就只能选择DEL命令。

这里的定时淘汰,也会以命令的形式,传播到Slave节点与记录到AOF文件中。

以上是“Redis数据删除方式有哪些”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网数据库频道!

您可能感兴趣的文档:

--结束END--

本文标题: Redis数据删除方式有哪些

本文链接: https://www.lsjlt.com/news/64393.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Redis数据删除方式有哪些
    小编给大家分享一下Redis数据删除方式有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!同步和异步删除1.DEL 和 UNL...
    99+
    2024-04-02
  • redis删除数据的方法有哪些
    DEL key:删除指定的key及其对应的数据。 DEL key1 key2 key3…:一次删除多个key及其对应的数据。 DE...
    99+
    2024-04-09
    redis
  • hbase删除数据的方式有哪些
    HBase删除数据的方式有以下几种: 使用delete命令:可以通过HBase的delete命令来删除单行数据或多行数据。 ...
    99+
    2024-03-05
    hbase
  • Redis批量删除Key的方式有哪些
    本文小编为大家详细介绍“Redis批量删除Key的方式有哪些”,内容详细,步骤清晰,细节处理妥当,希望这篇“Redis批量删除Key的方式有哪些”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。一.使用命令行批量删除...
    99+
    2023-07-06
  • redis删除数据的方法有哪几种
    DEL key [key …]: 删除指定的key及其关联的值。 FLUSHDB: 删除当前数据库中的所有key。 FL...
    99+
    2024-04-09
    redis
  • mysql删除数据的方法有哪些
    MySQL删除数据的方法有以下几种:1. 使用 DELETE FROM 语句:使用 DELETE FROM 语句可以...
    99+
    2023-09-27
    mysql
  • MySQL删除数据库的方法有哪些
    这篇文章将为大家详细讲解有关MySQL删除数据库的方法有哪些,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。删除数据库的命令是:“DROP DATABASE 数据库名;”;...
    99+
    2024-04-02
  • oracle删除表数据的方法有哪些
    这篇文章将为大家详细讲解有关oracle删除表数据的方法有哪些,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。oracle如何删除表数据删除表内容的两种方法1、trunca...
    99+
    2024-04-02
  • plsql删除表数据的方法有哪些
    在PL/SQL中,我们可以使用以下方法来删除表数据:1. 使用DELETE语句:DELETE语句用于从表中删除行。可以使用WHERE子句指定要删除的行。```sqlDELETE FROM table_name;DELET...
    99+
    2023-08-11
    plsql
  • redis数据清理的方式有哪些
    Redis数据清理的方式包括:1. 过期键清理:Redis支持自动过期键清理,可以通过设置键的过期时间来实现数据的自动清理。2. 手...
    99+
    2023-08-20
    redis
  • java删除cookie的方式有哪些
    在Java中删除cookie,有以下几种方式:1. 使用response对象的addCookie()方法,将要删除的cookie的值...
    99+
    2023-09-29
    java
  • python中有哪些dict的删除方式
    本篇文章为大家展示了python中有哪些dict的删除方式,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。python的五大特点是什么python的五大特点:1.简单易学,开发程序时,专注的是解决问题...
    99+
    2023-06-14
  • devExpress GridView删除行的方式有哪些
    devExpress GridView提供了多种删除行的方式,以下是一些常见的方式: 使用GridView的默认删除按钮:Gri...
    99+
    2023-10-23
    devExpress GridView
  • redis定时删除功能有哪些
    redis定时删除功能有哪些?这个问题可能是我们日常学习或工作经常见到的。希望通过这个问题能让你收获颇深。下面是小编给大家带来的参考内容,让我们一起来看看吧!Redis超时删除三种可能的答案,它们分别代表了...
    99+
    2024-04-02
  • linux怎么删除redis所有数据
    要删除Redis中的所有数据,可以使用以下方法:1. 使用Redis的`FLUSHALL`命令来清空所有数据库中的数据。可以使用以下...
    99+
    2023-09-01
    linux redis
  • redis如何删除hash所有数据
    要删除Redis中的所有哈希数据,可以使用DEL命令来删除指定的哈希键。如果要删除所有哈希数据,可以使用SCAN命令来遍历所有哈希键...
    99+
    2024-04-09
    redis
  • Oracle怎么删除数据,Oracle数据删除的三种方式
    目录oracle怎么删除数据drop命令truncate命令delete命令关于truncate的小小总结最后Oracle怎么删除数据 删除表(记录和结构)的语句delete——trun...
    99+
    2023-02-15
    Oracle删除数据 Oracle数据删除 Oracle怎么删除数据
  • JS删除数组中某个元素的方式有哪些
    本篇内容主要讲解“JS删除数组中某个元素的方式有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“JS删除数组中某个元素的方式有哪些”吧!第一种:删除最后一个元素slice 删除 va...
    99+
    2023-07-05
  • redis删除hash的实现方式
    目录Redis删除hash方式redis之hash类型解读redis中存取hash类型常用命令hash命令小结总结redis删除hash方式 在工作中遇到删除hash类型的缓存时遇到了,怎样也删不掉redis里面的缓存,...
    99+
    2023-01-28
    redis删除hash redis hash redis hash删除
  • Redis的数据持久化方式有哪些优缺点
    Redis的数据持久化方式有RDB持久化和AOF持久化两种。 RDB持久化的优缺点如下: 优点: RDB持久化是将内存中的数据以快...
    99+
    2024-04-09
    Redis
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作