Redis 过期删除策略、内存回收策略、单线程理解

不知从何开始Redis的内存淘汰策略也开始被人问及,卷!真的是太卷了。难不成要我们去阅读Redis源码吗,其实问题的答案,在Redis中的配置文件中全有,不需要你阅读源码、这个东西就是个老八股,估计问这个东西是想考察你们做的项目体量大不大。一般用 lru 就行。
在这里插入图片描述

内存回收策略

找到redis安装目录,找到redis.conf文件,找到如下代码,即可配置对应的内存回收策略

maxmemory-policy noeviction

至于内存策略有哪几种,文档中也写出来了,但是用洋文写的,下面用国语翻译一下。

在这里插入图片描述

当Redis使用内存超过了配置文件中设置的最大内存、或者大于物理机内存,将会触发内存回收策略

  1. volatile-lru -> remove the key with an expire set using an LRU algorithm(借助 lru 算法移除最近最少使用的过期 key)推荐
  2. allkeys-lru -> remove any key according to the LRU algorithm(移除最近最少使用的key,无论该 key 是否过期)不推荐
  3. volatile-random -> remove a random key with an expire set(从过期 key 中随机移除 key)也可以用用,但是效果没有第2种的好
  4. allkeys-random -> remove a random key, any key(随机移除 key,无论 key 是否过期)
  5. volatile-ttl -> remove the key with the nearest expire time (minor TTL) (删除快过期的 key)不推荐
  6. noeviction -> don’t expire at all, just return an error on write operations(这个是Redis默认的内存回收策略,没内存后写入会报错,建议改成 volatile-lru)

过期删除策略

这玩意我在配置文件中翻了一圈没找到对应的配置,那就肯定是要看redis源码了。我很爱看源码。但是看了下redis安装文件中的src文件,这玩意尼玛好像是用C语言写的,就好像很多人喜欢问 Synchronized 锁升级,但是这玩意的源码需要进行反编译查看,而且不是用 Java写的,叫我们怎么看呢。但是没关系,这些我都总结好了。
Redis用到的过期删除策略:惰性删除、定期删除、定时删除,这些都是前辈们的经验之谈,这玩意怎么来的?就好比Mybatis中用到了哪些设计模式,委派模式是其中的一个,同理 惰性删除、定期删除、定时删除,也是Redis用到的一部分过期删除策略。要想完全搞明白用到的所有过期删除策略,你需要把 src 文件下面所有的 .c 文件全部看一遍。

  • 惰性删除:访问某个key的时候,先检测key是否过期,过期了直接删除,返回null,没过期返回具体值。至于源码文件,在 src 目录下面有个 db.c 文件,里面有个 expireIfNeeded 函数,就 是 Redis 每次对 key 进行操作前都会调用 expireIfNeeded 函数,判断key是否过期,过期了就删除key、没过期就不删;
    在这里插入图片描述
  • 定期删除:每隔一定时间,取出部分key,筛出其中的过期key然后删除。具体源码自行翻阅 src目录中的 .c 文件
  • 定时删除:这个也很好理解,过期key到了过期时间自动删除。具体源码自行翻阅 src目录中的 .c 文件

RDB文件路径配置

修改 redis.conf 中的如下配置即可

# RDB文件名称
dbfilename dump.rdb
# RDB文件存放路径
dir /Users/zhangzixing/Desktop/redis持久化文件

在这里插入图片描述

主动生成RDB文件命令

没怎么用过这些命令,浅浅的记录一下~~~
阻塞Redis所有请求,直至RDB文件生成完成,不建议使用

SAVE

开启子线程,非阻塞生成RDB文件

BGSAVE

本机启动Redis

这个读者可以跳过,我经常忘记我电脑上Redis的安装路径,这里做个记录~

redis-server /usr/local/redis-6.0.10/etc/redis.conf
config set requirepass 123456

Redis 单线程个人理解

由于 Redis 的内存数据库,CPU不会成为Redis性能的瓶颈,内存执行指令速度非常快,是单个线程去执行指令,但是别忘了,Redis 还需要对 RDB、AOF 文件进行 IO 操作,IO 操作是多线程执行的。

到此本文结束,关注不迷路,后续分享更多经验之谈~~~~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/226381.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HNU-计算机网络-实验3-应用层和传输层协议分析(PacketTracer)

计算机网络 课程基础实验三应用层和传输层协议分析(PacketTracer) 计科210X 甘晴void 202108010XXX 【给助教的验收建议】 如果是助教,比起听同学读报告,更好的验收方式是随机抽取一个场景(URL/HTTPS/FTP&#xff09…

Vue3-12- 【v-for】循环一个整数

说明 v-for 这个东西就很神奇&#xff0c;可以直接循环一个整数&#xff0c;而且循环的初始值是从1 开始。使用案例 <template><div v-for"(num,indexB) in 6" :key"indexB">【索引 {{ indexB }}】 - 【数字 {{ num }}】 </div></t…

直播传媒公司网站搭建作用如何

直播已然成为抖快等平台的主要生态之一&#xff0c;近些年主播也成为了一种新行业&#xff0c;相关的mcn机构直播传播公司等也时有开业&#xff0c;以旗下主播带来高盈利&#xff0c;而在实际运作中也有一些痛点难题&#xff1a; 1、机构宣传展示难 不少散主播往往会选择合作…

湖农大邀请赛shell_rce漏洞复现

湖农大邀请赛 shell_rce 复现 在 2023 年湖南农业大学邀请赛的线上初赛中&#xff0c;有一道 shell_rce 题&#xff0c;本文将复现该题。 题目内容&#xff0c;打开即是代码&#xff1a; <?phpclass shell{public $exp;public function __destruct(){$str preg_replace…

KaiwuDB × 国网山东综能 | 分布式储能云边端一体化项目建设

项目背景 济南韩家峪村首个高光伏渗透率台区示范项目因其所处地理位置拥有丰富的光照资源&#xff0c;该区域住户 80% 以上的屋顶都安装了光伏板。仅 2022 年全年&#xff0c;光伏发电总量达到了百万千瓦时。 大量分布式光伏并网&#xff0c;在输出清洁电力的同时&#xff0c…

Gerrit 提交报错missing Change-Id in message footer

直接执行提示的命令&#xff1a; gitdir$(git rev-parse --git-dir); scp -p -P 29418 liyjgerrit.ingageapp.com:hooks/commit-msg ${gitdir}/hooks/ 如果报错&#xff1a; subsystem request failed on channel 0 在.git/hooks目录下看有没有生成commit-msg文件&#xff…

测序名词解释

测序深度&#xff08;Sequencing Depth&#xff09;是指&#xff1a;测序得到的碱基总量&#xff08;bp&#xff09;与基因组&#xff08;转录组或测序目标区域大小&#xff09;的比值&#xff0c;是评价测序量的指标之一。 测序深度的计算公式为&#xff1a; 测序深度 &…

一点技术细节

匈牙利算法&#xff1a; 14-4: 匈牙利算法 Hungarian Algorithm_哔哩哔哩_bilibili 课件&#xff1a;https://github.com/wangshusen/AdvancedAlgorithms.git SWin transformer&#xff1a; Swin Transformer论文精读【论文精读】_哔哩哔哩_bilibili patch:灰色 窗口&…

数据结构之---- 回溯算法

数据结构之---- 回溯算法 什么是回溯算法&#xff1f; 回溯算法是一种通过穷举来解决问题的方法&#xff0c;它的核心思想是从一个初始状态出发&#xff0c;暴力搜索所有可能的解决方案&#xff0c;当遇到正确的解则将其记录&#xff0c;直到找到解或者尝试了所有可能的选择都…

day01-报表技术POI

前言 报表[forms for reporting to the higher organizations]&#xff0c;就是向上级报告情况的表格。简单的说&#xff1a;报表就是用表格、图表等格式来动态显示数据&#xff0c;可以用公式表示为&#xff1a;“报表 多样的格式 动态的数据”。 1、开发环境搭建 功能说…

图扑物联 | WEB组态可视化软件

什么是组态&#xff1f; 组态的概念来自于20世纪70年代中期出现的第一代集散控制系统&#xff08;Distributed Control System&#xff09;&#xff0c;可理解为“配置”、“设置”等&#xff0c;是指通过人机开发界面&#xff0c;用类似“搭积木”的简单方式来搭建软件功能&a…

stm32H库的内部FLASH读写操作与结构体数组数据写入与读取

stm32H库的内部FLASH读写操作与结构体数组数据写入与读取 1.软硬件准备2.关于STM32的Flash的一些说明3.实验结果 参考博主-STM32系列(HAL库)——内部FLASH读写实验 1.软硬件准备 软件&#xff1a;CubeMX、SSCOM&#xff08;串口调试助手&#xff09; 硬件&#xff1a;SMT32F…

动态通讯录(并不难都能拿下)

文章目录 &#x1f680;前言&#x1f680;通讯录实现动态通讯录的初期准备模块化框架搭建 &#x1f680;实现接口函数 &#x1f680;前言 铁子们好啊&#xff01;今天咱们来整一个有意思的玩意——通讯录&#xff0c;相信大家对通讯录并不陌生&#xff0c;那接下来就跟着阿辉把…

基于ssm小区疫情防控管理系统论文

摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本小区疫情防控管理系统就是在这样的大环境下诞生&#xff0c;其可以帮助管理者在短时间内处理完毕庞大的数据…

微信小程序集成腾讯地图

微信小程序集成腾讯地图 微信小程序集成腾讯地图&#xff0c;实现用户附近停车位搜索显示。 腾讯开发者Key申请 官方地址&#xff1a;https://lbs.qq.com/ 下载工具JS 微信小程序JS代码 // pages/check-services.js const app getApp() // 引入SDK核心类 var QQMapWX …

Nginx配合Vue的history模式

加上一行代码就行&#xff1a; try_files $uri $uri/ /index.html;

PyQt6 QTreeWidget树控件

锋哥原创的PyQt6视频教程&#xff1a; 2024版 PyQt6 Python桌面开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili2024版 PyQt6 Python桌面开发 视频教程(无废话版) 玩命更新中~共计46条视频&#xff0c;包括&#xff1a;2024版 PyQt6 Python桌面开发 视频教程(无废话版…

Easy Excel生成复杂下Excel模板(下拉框)给用户下载

引言 文件的下载是一个非常常见的功能&#xff0c;也有一些非常好的框架可以使用&#xff0c;这里我们就介绍一种比较常见的场景&#xff0c;下载Excel模版&#xff0c;导入功能通常会配有一个模版下载的功能&#xff0c;根据下载的模版&#xff0c;填充数据然后再上传。 需求…

TrustGeo代码理解(七)preprocess.py

代码链接:https://github.com/ICDM-UESTC/TrustGeo 一、导入各种模块和数据库 # Load data and IP clusteringimport math import random import pandas as pd import numpy as np import argparse from sklearn import preprocessing from lib.utils import MaxMinScaler …

设计模式——外观模式(结构型)

引言 外观模式是一种结构型设计模式&#xff0c; 能为程序库、 框架或其他复杂类提供一个简单的接口。 ​ 问题 假设你必须在代码中使用某个复杂的库或框架中的众多对象。 正常情况下&#xff0c; 你需要负责所有对象的初始化工作、 管理其依赖关系并按正确的顺序执行方法等。…