使用Redis的一些最佳实践

您所在的位置:网站首页 若依如何使用redis过期策略 使用Redis的一些最佳实践

使用Redis的一些最佳实践

2024-06-30 07:55:40| 来源: 网络整理| 查看: 265

概述

本文主要介绍阿里云云数据库Redis过期Key的逐出策略,且介绍了使用Redis的一些最佳实践。

Redis过期Key清理策略 清理过期Key的算法 数据逐出算法 使用Redis的注意事项 详细信息 Redis过期Key清理策略

为了防止一次性清理大量过期Key导致Redis服务受影响,Redis会在CPU空闲时清理过期Key。具体Redis逐出过期Key的策略如下所示:

访问Key时,首先会判断Key是否过期,如果过期,则逐出过期Key。 robj *lookupKeyRead(redisDb *db, robj *key) { robj *val; expireIfNeeded(db,key); val = lookupKey(db,key); ... return val; } CPU在空闲时通过serverCron定时任务,逐出部分过期Key。 aeCreateTimeEvent(server.el, 1, serverCron, NULL, NULL) int serverCron(struct aeEventLoop *eventLoop, long long id, void *clientData) { ... databasesCron(); ... } void databasesCron(void) { /* Expire keys by random sampling. Not required for slaves + as master will synthesize DELs for us. */ if (server.active_expire_enabled && server.masterhost == NULL) activeExpireCycle(ACTIVE_EXPIRE_CYCLE_SLOW); ... } 每次在事件循环执行的时候,逐出部分过期Key。 void aeMain(aeEventLoop *eventLoop) { eventLoop->stop = 0; while (!eventLoop->stop) { if (eventLoop->beforesleep != NULL) eventLoop->beforesleep(eventLoop); aeProcessEvents(eventLoop, AE_ALL_EVENTS); } }

void beforeSleep(struct aeEventLoop *eventLoop) {   ...   /* Run a fast expire cycle (the called function will return    - ASAP if a fast cycle is not needed). */   if (server.active_expire_enabled && server.masterhost == NULL)     activeExpireCycle(ACTIVE_EXPIRE_CYCLE_FAST);   ...}

清理过期Key的算法

Redis过期Key清理的机制对清理的频率和最大时间都有限制,且会在尽量不影响正常服务的情况下,进行过期Key的清理,以达到长时间服务的最优性能。

Redis会周期性的随机测试一批设置了过期时间的Key并进行处理,测试到已过期的Key将被删除,具体的算法如下所示:

Redis配置项hz定义了serverCron定时任务的执行周期,该默认值为10,即CPU空闲时每秒执行10次。 每次过期Key清理的时间不超过CPU时间的25%,即若hz等于1,则一次清理时间最大为250ms。若hz等于10,则一次清理时间最大为25ms。 每次清理过期Key时都会依次遍历所有的库。 从一个库中随机抽取20个Key,判断是否过期,若过期,则逐出过期Key。 若有5个以上Key过期,则重复上一步步骤,否则遍历下一个库。 在清理过程中,若达到了CPU时间的25%,则退出清理过程。

具体注意事项如下所示:

Redis仅分配较少的时间进行过期Key清理,且存在一定随机性,如果您对过期清理有较高的要求,可以自行扫描触发或在控制台下发过期Key清理任务。 调高hz参数可以提升清理的频率,过期Key会更及时的被理,但hz太高会增加CPU时间的消耗,需要根据实际业务进行配置。 数据逐出算法

根据用户设置的逐出策略,选出待逐出的key,直到当前内存小于最大内存值为止。具体的逐出策略信息请参见默认的数据逐出策略。

使用Redis的注意事项 不要存放垃圾数据,且需要及时清理无用数据。即实验性的数据和下线业务数据需要及时删除。 Key尽量都设置过期时间。对具有时效性的Key设置过期时间,且可通过Redis自身过期Key清理策略,降低过期Key对于内存的占用,同时也能够减少业务的运维成本,不需要定期手动清理。 单Key不要过大。Redis单个string的value为43M,或list有几百万个成员,占用1G多内存,这种Key在访问时,网络传输延迟较大,需要分配的输出缓冲区也比较大,在定期清理的时候也容易造成比较高的延迟。因此最好能通过业务拆分或数据压缩等方式避免这种过大的Key产生。 不同业务使用一个Redis时,最好使用不同的逻辑库区分业务。Redis的过期Key清理策略和淘汰策略都会遍历各个库,因此将Key分布在不同的库有助于过期Key的及时清理。另外不同业务使用不同库,也有助于问题排查和无用数据的及时下线。 相关文档

如果需要查看详细的介绍,请参见Key的过期及逐出策略。

适用于 云数据库Redis


【本文地址】

公司简介

联系我们

今日新闻


点击排行

实验室常用的仪器、试剂和
说到实验室常用到的东西,主要就分为仪器、试剂和耗
不用再找了,全球10大实验
01、赛默飞世尔科技(热电)Thermo Fisher Scientif
三代水柜的量产巅峰T-72坦
作者:寞寒最近,西边闹腾挺大,本来小寞以为忙完这
通风柜跟实验室通风系统有
说到通风柜跟实验室通风,不少人都纠结二者到底是不
集消毒杀菌、烘干收纳为一
厨房是家里细菌较多的地方,潮湿的环境、没有完全密
实验室设备之全钢实验台如
全钢实验台是实验室家具中较为重要的家具之一,很多

推荐新闻


图片新闻

实验室药品柜的特性有哪些
实验室药品柜是实验室家具的重要组成部分之一,主要
小学科学实验中有哪些教学
计算机 计算器 一般 打孔器 打气筒 仪器车 显微镜
实验室各种仪器原理动图讲
1.紫外分光光谱UV分析原理:吸收紫外光能量,引起分
高中化学常见仪器及实验装
1、可加热仪器:2、计量仪器:(1)仪器A的名称:量
微生物操作主要设备和器具
今天盘点一下微生物操作主要设备和器具,别嫌我啰嗦
浅谈通风柜使用基本常识
 众所周知,通风柜功能中最主要的就是排气功能。在

专题文章

    CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭