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

news2024/11/18 9:24:32

为什么使用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.coloradmin.cn/o/803064.html

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

相关文章

w10修改cmd用户中文名

注销当前使用的账户,使用Administrator登录。右击左下角的开始,找到注销 一般注销之后,是没有Administrator登录的,因为Windows自动将它禁用了,所以在注销之前,你应该先右击我的电脑,点击管理&a…

学习笔记十三:云服务器通过Kubeadm安装k8s1.25,供后续试验用

Kubeadm安装k8s1.25 k8s环境规划:初始化安装k8s集群的实验环境先建生产环境服务器,后面可以通过生成镜像克隆node环境修改主机名配置yum源关闭防火墙关闭selinux配置时间同步配置主机 hosts 文件,相互之间通过主机名互相访问 **192.168.40.18…

argo workflows archived 归档设置

由于工作需要配置argo workflows归档,介绍一下大致步骤: 文章目录 1.在k8s中是找这个configmap2.编辑configmap3 配置数据库用户名和密码:4.把workflow这个pod删掉,让他重新生成一个 1.在k8s中是找这个configmap kubectl get cm -n argo2.编…

SpringBoot集成Lock4j 底层使用Redission 实现分布锁

Lock4j 在分布式系统中,实现锁的功能对于保证数据一致性和避免并发冲突是非常重要的。Lock4j是一个简单易用的分布式锁框架,而Redisson是一个功能强大的分布式解决方案,可以与Lock4j进行集成。 操作步骤 第一步:添加依赖 首先&…

uniAPP 视频图片预览组件

效果图 思路&#xff1a;处理文件列表&#xff0c;根据文件类型归类 已兼容 H5 ios 设备&#xff0c;测试已通过 浙政钉&#xff0c;微信小程序 视频资源因为&#xff0c;没有预览图&#xff0c;用灰色图层加播放按钮代替 <template><!--视频图片预览组件 -->&l…

【2023最新教程】6个步骤从0到1开发自动化测试框架(0基础也能看懂)

一、序言 随着项目版本的快速迭代、APP测试有以下几个特点&#xff1a; 首先&#xff0c;功能点多且细&#xff0c;测试工作量大&#xff0c;容易遗漏&#xff1b;其次&#xff0c;代码模块常改动&#xff0c;回归测试很频繁&#xff0c;测试重复低效&#xff1b;最后&#x…

使用MyBatis(1)

目录 一、什么是MyBatis 二、搭建MyBatis开发环境 &#x1f345;添加MyBatis依赖 &#x1f345;在数据库添加数据 &#x1f345;设置MyBatis配置 &#x1f388;数据库的相关连接信息&#x1f388;xml的保存和设置路径 三、使用MyBatis模式和语法操作数据库 &#x1f34…

BGP的介绍

目录 BGP基础 BGP的发展历史 BGP在企业中的应用 距离矢量型协议和路径矢量型协议的区别 BGP的特征 1.可控性 2.可靠性 3.AS-BY-AS BGP的对等关系 BGP的数据包 1.open报文 2.Keepalive报文 3.Update报文 4.Notification 报文 5.Route-refresh报文 BGP的状态机 …

GitLab备份升级

数据备份(默认的备份目录在/var/opt/gitlab/backups/下&#xff0c;生成一个以时间节点命名的tar包。) gitlab-rake gitlab:backup:create新建repo源&#xff0c;升级新版本的gitlab vim /etc/yum.repos.d/gitlab-ce.repo [gitlab-ce] namegitlab-ce baseurlhttps://mirrors.…

EMQ X 集群部署

EMQ X 消息服务器集群基于 Erlang/OTP 分布式设计,集群原理可简述为下述两条规则: MQTT 客户端订阅主题时,所在节点订阅成功后广播通知其他节点:某个主题(Topic)被本节点订阅。 MQTT 客户端发布消息时,所在节点会根据消息主题(Topic),检索订阅并路由消息到相关节点。 1. 集…

ICLR 2023 | 用于分布外泛化的拓扑感知鲁棒优化

论文链接&#xff1a;https://openreview.net/pdf?idylMq8MBnAp 代码链接&#xff1a;GitHub - joffery/TRO: The Pytorch implementation for "Topology-aware Robust Optimization for Out-of-Distribution Generalization" (ICLR 2023) 01. 研究背景 近年来&…

虹科分享 | 工业4.0:IO-Link wireless等先进通信技术是不可或缺的支柱

近年来&#xff0c;随着工业4.0&#xff08;工业革命4.0&#xff09;的提出&#xff0c;制造业转型浪潮拉开帷幕。工业4.0是将数字技术整合到传统的制造流程中&#xff0c;从而创建智能工厂。对此类工厂的最初要求是工厂各个层面的完全连接&#xff0c;从制造车间一直到管理和云…

重大更新|Sui主网即将上线流动性质押,助力资产再流通

Sui社区一直提议官方上线流动质押功能&#xff0c;现在通过SIP过程&#xff0c;已经升级该协议以实现这一功能。 Sui使用委托权益证明机制&#xff08;DPoS&#xff09;来选择和奖励负责运营网络的验证节点。为了保障网络安全&#xff0c;验证节点通过质押SUI token获得质押奖…

win10小任务栏显示日期

win10存在一个问题, 就是任务栏为小任务栏时, 无法显示系统日期, 只能显示时间, 对这个问题有两个办法, 1, 把小任务栏改为大任务栏, 日期就能显示出来 但如果你就是想用小任务栏, 不想用大任务栏, 又想显示日期, 只靠win10内置的设置是没法实现的, 只能借助其他软件, 具体看…

HTTP协议揭秘:探寻互联网的背后密码、探秘数据传输的奥秘

HTTP&#xff08;超文本传输协议&#xff1a;Hypertext Transfer Protocol&#xff09;是一种用于在Web上传输数据的协议&#xff0c;它是互联网上最重要的应用层协议之一。从诞生至今&#xff0c;HTTP一直扮演着连接世界的通信桥梁的角色&#xff0c;在互联网的发展和普及中发…

数组练习题,数组的动态初始化

数组的遍历 定义一个数组&#xff0c;求和 int[] arr {1,2,3,4,5,6,7};int sum 0;for (int i 0; i <arr.length ; i) {sum sum arr[i];}System.out.println(sum);定义一个数组&#xff0c;统计数组里面一共有多少能够被3 整除的数字&#xff1a; int[] arr1 {4,62,8…

JavaScript快速入门:ComPDFKit PDF SDK 快速构建 Web端 PDF阅读器

JavaScript快速入门&#xff1a;ComPDFKit PDF SDK 快速构建 Web端 PDF阅读器 在当今丰富的网络环境中&#xff0c;处理 PDF 文档已成为企业和开发人员的必需品。ComPDFKit 是一款支持 Web 平台并且功能强大的 PDF SDK&#xff0c;开发人员可以利用它创建 PDF 查看器和编辑器&…

了解Unity编辑器之组件篇Playables和Rendering(十)

Playables 一、Playable Director&#xff1a;是一种用于控制和管理剧情、动画和音频的工具。它作为一个中央控制器&#xff0c;可以管理播放动画剧情、视频剧情和音频剧情&#xff0c;以及它们之间的时间、顺序和交互。 Playable Director组件具有以下作用&#xff1a; 剧情控…

数据结构初阶--栈和队列

目录 一.栈 1.栈的定义 2.顺序栈的功能实现 2.1.顺序栈的定义 2.2.顺序栈的初始化 2.3.顺序栈的判空 2.4.顺序栈的入栈 2.5.顺序栈的出栈 2.6.顺序栈的取栈顶元素 2.7.顺序栈的求栈的大小 2.8.顺序栈的销毁 2.9.完整程序 Stack.h Stack.c test.c 二.队列 1.队…

S475支持 ModbusRTU 转 MQTT协议采集网关

6路模拟量输入和2路RS485串口是一种功能强大的通信接口&#xff0c;可以接入多种设备和系统&#xff0c;支持4-20mA输出的传感器以及开关量输入输出。本文将详细介绍6路模拟量输入和2路RS485串口的应用场景和功能&#xff0c;重点介绍其在SCADA、HMI、远程数据监控以及采集控制…