Redis简介,设置redis内存大小,设置redis淘汰机制,查看内存占用情况,内存占用分析

为什么使用Redis缓存数据库

我们日常的开发,无非是对数据的处理。程序的定义也可以这样狭义的解释:算法+数据。可见数据库是多么重要的工具。但是关系型数据库的读写能力在200-1000次/秒不等,服务器好点可能更多,这导致在高并发的情况下,我们需要访问的数据可能会被锁住,使得响应速度变得异常的慢,体验很差。同时,如果数据很多,我们在做一些比较重的筛选查询时,可能会非常的慢。

什么是Redis

上述的问题,无非是因为磁盘的读写过低,那么有没有办法将将数据库放进内存呐。所以就有了Redis,Redis是一款nosql的数据库,也是一种键值对数据库。相比传统的关系型数据库,跑在内存里的Redis,无疑是非常快速的,读写数据也达到了30万次/秒,这无非是巨大的提升。同时Redis提供了持久化的支持,数据会同时写进磁盘,使得Redis可以完全代替关系型数据库。

官方定义:redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。

在这里插入图片描述

如何持久化

https://blog.csdn.net/qq_39569480/article/details/125603603

内存管理

redis是个基于内存的缓存数据库,既然是基于内存的,那肯定就会有存满的时候,虽然可以限制redis使用内存的大小,但如果真的存满了,再有新的数据过来肯定就存不进去了,此时redis会执行既定的一些淘汰策略,下面一块看一下设置redis占用内存大小和redis几种种淘汰策略。

1.首先来看一下设置Redis最大占用内存

这里我使用的是win版redis找到安装目录下的redis.windows.conf文件(保存文件退出,重启redis服务),设置maxmemory参数,maxmemory是bytes字节类型,注意转换。修改如下所示
默认是没有限制内存大小的也就是无限制。

获取当前设置内存占用大小

config get maxmemory

设置最大内存限制

config set maxmemory 2GB

在这里插入图片描述
设置maxmemory参数,maxmemory是bytes字节类型,注意转换。
这里我设置了2G=214789585byte
在这里插入图片描述
设置好以上参数后,那么当redis占用内存达到2G时 就无法继续写入新的数据了,这时需要淘汰掉一些内存数据。那么接下来继续往下看。

redis内存淘汰机制

当Redis的内存使用达到设置的maxmemory上限时,Redis会根据所配置的eviction policy(淘汰策略)来决定如何处理新的写入操作。以下是几种常见的淘汰策略:

1.noeviction(默认):当内存使用达到上限时,新的写入操作会被禁止,客户端会收到错误信息。

2.allkeys-lru:当内存使用达到上限时,Redis会尝试淘汰最近最少使用的键(Key),以便为新的写入操作腾出空间。

3.allkeys-random:当内存使用达到上限时,Redis会随机选择一些键进行淘汰,以便为新的写入操作腾出空间。

4.volatile-lru:当内存使用达到上限时,Redis会尝试淘汰设置了过期时间的键中,最近最少使用的键(Key),以便为新的写入操作腾出空间。

5.volatile-random:当内存使用达到上限时,Redis会随机选择一些设置了过期时间的键进行淘汰,以便为新的写入操作腾出空间。

获取当前内存淘汰策略

 config get maxmemory-policy

命令方式修改

config set maxmemory-policy allkeys-lru  //通过命令修改淘汰策略

配置文件直接添加(保存文件退出,重启redis服务)
在这里插入图片描述

查看当前内存占用情况

当我们想查看当前内存占用了多少时,可使用redis.cli客户端查看
首先通过auth pwd通过验证
然后使用info memory查看内存占用的详细信息

used_memory和used_memory_human代表当前内存占用大小

used_memory_peak和used_memory_peak_human表示使用内存最大时的占用量
在这里插入图片描述

当然也可以直接使用 info 查看更详细的信息
在这里插入图片描述

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

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

相关文章

排序链表——力扣148

文章目录 题目描述法一 自顶向下归并排序法二)自底向上归并排序 题目描述 题目的进阶问题要求达到 O(nlogn) 的时间复杂度和 O(1) 的空间复杂度,时间复杂度是 O(nlogn) 的排序算法包括归并排序、堆排序和快速排序(快速排序的最差时间复杂度是…

【C#】.Net Framework框架下的Authorize权限类

2023年,第31周,第3篇文章。给自己一个目标,然后坚持总会有收货,不信你试试! 在C#的.NET Framework中,你可以使用Authorize类来处理权限认证。Authorize类位于System.Web.Mvc命名空间中,它提供了…

关于Docker的知识点

Docker是一个快速交付应用、运行应用的技术。 Docker基本操作--容器 示例:创建运行一个Nginx容器

Python不是一门伟大的语言

作为一门简洁易用、生态蓬勃且具有高泛用性的编程语言,Python一直以来都被不少人称作“编程语言中的瑞士军刀”。 尤其随着近来AI热潮席卷全球,Python在编程语言圈中的地位也随之水涨船高,甚至一度被视作AI专用语言或大数据专用语言。 然而…

QT第四讲

思维导图 基于QT的网络聊天室 widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include<QTcpServer> //服务器类 #include<QTcpSocket> //客户端类 #include<QMessageBox> //对话框类 #include<QList…

二叉树的层序遍历(两种方法:迭代+递归)

题目&#xff1a; 给你二叉树的根节点 root &#xff0c;返回其节点值的 层序遍历 。 &#xff08;即逐层地&#xff0c;从左到右访问所有节点&#xff09;。 输入&#xff1a;root [3,9,20,null,null,15,7] 输出&#xff1a;[[3],[9,20],[15,7]] 解题思路&#xff1a;迭代法…

string类的模拟实现

文章目录 string类的模拟实现string基本框架的实现operator的实现string常用函数的实现 string类的模拟实现 前文对于string的常用函数做了讲解&#xff0c;由于string是一个面试官常考的点&#xff0c;总喜欢让模拟实现string类&#xff0c;下面来模拟实现一下string&#xf…

优化企业集成架构:iPaaS集成平台助力数字化转型

前言 在数字化时代全面来临之际&#xff0c;企业正面临着前所未有的挑战与机遇。技术的迅猛发展与数字化转型正在彻底颠覆各行各业的格局&#xff0c;不断推动着企业迈向新的前程。然而&#xff0c;这一数字化时代亦衍生出一系列复杂而深奥的难题&#xff1a;各异系统之间数据…

Vite创建Vue+TS项目引入文件路径报错

使用vite搭建vue3脚手架的时候&#xff0c;发现main.ts中引入App.vue编辑器会报错&#xff0c;但是不影响代码运行。 报错信息&#xff1a;TS2307: Cannot find module ‘./App.vue’ or its corresponding type declarations. 翻译过来是找不到模块或者相关的声明类型&#…

如何快速模拟一个后端 API

第一步&#xff1a;创建一个文件夹&#xff0c;用来存储你的数据 数据&#xff1a; {"todos": [{ "id": 1, "text": "学习html44", "done": false },{ "id": 2, "text": "学习css", "…

Redis7学习笔记01

一、redis7实战教程简洁 1、大纲&#xff1a; ①、适合对象&#xff0c;从小白到熟手&#xff0c;一套全包圆 ②、Redis专题-大厂面试题&#xff0c;含100道 ③、Redis专题-真实需求生产真实案例 ④、Redis7新特性 2、小白篇高阶篇&#xff1a; 3、大厂面试题&#xff1a…

自动化测试——APP测试

一、环境配置 1、安装jdk 配置环境变量 2、Android SDK 环境安装 3、Appium Server安装 4、模拟器安装 5、安装appium-python-client Python第三方库 二、APP自动化测试原理 三、Desired Capabilites——APPium自动化配置项 1、设置参数 2、操作系统 3、选择版本 4、设备名称…

TCP KeepAlive与HTTP Keep-Alive

TCP KeepAlive与HTTP Keep-Alive TCP KeepAliveHTTP Keep-AliveTCP服务器怎么检测客户端断开连接 TCP KeepAlive TCP连接建立之后&#xff0c;如果应用程序或者上层协议一直不发送数据&#xff0c;或者隔很长时间才发送一次数据&#xff0c;那么TCP需要判断是应用程序掉线了还…

Android Studio 启用设备远程调试配置完整步聚

启用手机设置->开发者选项-无线调试,然后选择允许 已启用后无线调试变成绿色 ,点击无线调试进入详情页面 点击Android Studio的Device Manager 下的WIFI图标 会弹出下图窗口 打开手机的开发者选项中的WIFI调试(无线调试)下的使用二维码配对设备进行扫描. 设备配对成功后手机…

Unity Shader - if 和 keyword 的指令比较

文章目录 环境TestingIf4Sampleunity shaderlab 中的 TestingIf4Sample.shadergraphics analyzer 中的 TestingIf4Sample.glsl TestingKW4Sampleunity shaderlab 中的 TestingKW4Sample.shadergraphics analyzer 中的 TestingKW4Sample.glsl 比较 环境 Unity : 2020.3.37f1 Pi…

在Linux中用strsignal函数输出对各种信号的描述

2023年7月29日&#xff0c;周六上午 目录 函数原型Linux有多少种信号使用示例 函数原型 #include <string.h>char* strsignal(int signum);strsignal函数接受一个整数参数signum&#xff0c;表示信号的编号。 用于把信号编号转换成一个简短的对这个信号编号的描述。 L…

JAVA SE -- 第十一天

&#xff08;全部来自“韩顺平教育”&#xff09; 异常-Exception 一、异常介绍 1、基本介绍 Java语言中&#xff0c;将程序执行中发生的不正常情况为“异常”&#xff08;开发过程中的语法错误和逻辑错误不是异常&#xff09; 2、执行过程中发生的异常事件可分为两大类 …

FPGA2-采集OV5640乒乓缓存后经USB3.0发送到上位机显示

1.场景 基于特权A7系列开发板&#xff0c;采用OV5640摄像头实时采集图像数据&#xff0c;并将其经过USB3.0传输到上位机显示。这是验证数据流能力的很好的项目。其中&#xff0c;用到的软件版本&#xff0c;如下表所示&#xff0c;基本的硬件情况如下。该项目对应FPGA工程源码…

图注意力网络论文详解和PyTorch实现

图神经网络(gnn)是一类功能强大的神经网络&#xff0c;它对图结构数据进行操作。它们通过从节点的局部邻域聚合信息来学习节点表示(嵌入)。这个概念在图表示学习文献中被称为“消息传递”。 消息(嵌入)通过多个GNN层在图中的节点之间传递。每个节点聚合来自其邻居的消息以更新其…

MyBatis(二)

文章目录 一.MyBatis的模式开发1.1 定义数据表和实体类1.2 配置数据源和MyBatis1.3 编写Mapper接口和增加xxxMapper.xml1.4 测试我们功能的是否实现. 二. Mybatis的增删查改操作2.1 单表查询2.2 多表查询三.动态SQL的实现3.1 什么是动态SQL3.2 动态SQL的使用if标签的使用trim标…