性能相关的数据指标
(1)最近在项目中遇到Redis的一个问题,在初启动redis时(或 flashdb 清除当前所有的keys),从redis的pool中获取数据是很快的,可随着访问次数的增加,key的增加,速度会越来越慢,当清理(flashdb)keys时速度回到最初的速度,非常的快。
(2)基于这样的现象,我们首先就需要查看一下当前的radis 的配置信息情况:
查看配置 ,我们线上redis_version:2.6.14,最大内存设置的4g,没有设置MAXMEMORY POLICY,采用的默认配置。
maxmemory 4g
# The default is:
# maxmemory-policy volatile-lru
查看info,最大时使用了3.73G
# Memory
used_memory:37306816 # Redis 分配的内存总量
used_memory_human:35.58M(与used_memory相等)
used_memory_rss:38125568 # Redis 分配的内存总量(包括内存碎片)
used_memory_peak:3999999912#Redis所用内存的高峰值
used_memory_peak_human:3.73G (与used_memory_peak相等)
used_memory_lua:31744
mem_fragmentation_ratio:1.02 # 内存碎片比率
mem_allocator:jemalloc-3.2.0
内存碎片比率:
(3) 我们知道,Redis设置配置文件的maxmemory参数,可以控制其最大可用内存(字节)。那么当所需内存,超了maxmemory怎么办? 这里就需要配置中的maxmemory-policy 。
这里特别需要注意的是,如果不给maxmemory设置值的话,那么就会有一个默认值0,这样就不会给redis的空间限制。
特别需要注意的是,不设置maxmemory, 如果你运行redis的服务器内存在你可以预见的业务增长空间可以存放所有业务数据,若无法保证,那么不设置maxmemory的限制,很有可能会导致redis-server 在运行一段时间后oom
- 使用swap危害:磁盘性能下降,持久化时间过长,可能出现暂停服务。
- oom危害:暂停服务,意外Crash(windows版本上十分明显)
最近在项目中遇到Redis的maxmemory达到使用上限的问题,特地又回过头来看了下关于maxmemory的配置。
在我本机上我给radis 设置了1.20G的内存空间,当空间达到或者说将要达到的时候就会触发一种处理机制也就是过期策略。
redis 中的默认的过期策略是 volatile-lru 。
设置方式
config set maxmemory-policy volatile-lru
maxmemory-policy 六种方式
1、volatile-lru:只对设置了过期时间的key进行LRU(默认值)
2、allkeys-lru : 删除lru算法的key
3、volatile-random:随机删除即将过期key
4、allkeys-random:随机删除
5、volatile-ttl : 删除即将过期的
6、noeviction : 永不过期,返回错误
(4) 在这里我发现一个问题,就是这个策略的选择,在我没有设置maxmemory-policy 时,上面已经说了,默认是volatile-lru,但是他是只对设置了过期时间做处理,我们假设一下,如果说我们设置的key并没有过期那 策略机制要如何处理?
在这里我做了一个测试,我做了一个循环添加key ,我这里value是在数据库查询的实体类(这样能够保证对内存空间变化的有个清晰的观测),
在key创建的时候,我就给设定过期时间(7天),最后很不幸,我的radis感觉已经死掉了,几分钟都不动。
应用radis就是为了速度,可是现在却有点本末倒置了,用了radis反而确是更慢了,我将radis注掉之后,直接在数据库上取都要比此时的radis快。在这里就要想到另一个问题,那就是你这里为什么要设置7天,而不是设置1天,或者1个小时,1分钟?,但是我想说,如果只是设置短短的时间那么是否应用radis就没有什么必要了。毕竟radis也是有消耗的,那么这时候我们就要考虑你过期时间的设置,不过你这里就需要了解你keys生成和销毁的数量和速度,使其达到一个平衡。
在这里我使用了另一种策略:volatile-random(随机删除即将过期key),
首先打开radis配置文件(radis.conf)
进行如下配置
maxmemory-policy volatile-random maxmemory 567824856
同样,继续用上面的循环创建key的方法,不过我是每次循环都创建两个key,第一个key名称是redisCacheKeyTest_+i,并且设置时间为(7)天,第二个key名称设置为redisCacheKeyTest10000_+i设置时间为(30min),此时在运行时,你就可以观察redis 的info:
(图中的是刚开始的值,evicted_keys是0),
(5)随着key的创建,used_memory会慢慢达到最高,此时你可以查看一下你当前redis的所有的key,(命令:keys *) 这样你就会看到所有的key (redisCacheKeyTest_ 和 redisCacheKeyTest10000_ ),
此时的redis内存空间已经接近满了,redis策略机制它的作用就显现出来了,你会发现evicted_keys的值会一段数值一段数值的增加,并且观察你的内存空间的使用情况,你会很明显发现,内存空间会突然减少,然后在慢慢增加。 内存空间值的变化就是因为redis策略发挥了作用,它将一部分key删除掉了,到底是删除那些key了呢?我们查看一下 redis的info,你会发现此时几乎前缀为redisCacheKeyTest10000_的key就都消失了。因为期初我设置的前缀为redisCacheKeyTest10000_的key设置的过期时间为30min,而前缀为redisCacheKeyTest的key过期时间为7天,显而易见,volatile-random 删除了随机删除前缀为redisCacheKeyTest10000_的key。此时,我们的测试就结束了。
相关推荐
在深入研究Redis性能相关配置之前,我们需要理解Redis的基本概念和工作原理。 1. Redis简介: Redis作为一个开源的、网络化的、非关系型数据库,支持数据类型如字符串、哈希、列表、集合、有序集合等。其数据持久化...
Redis 是一个高性能的键值数据库,常被用作缓存和数据存储解决方案。Docker 则是一种流行的容器化平台,可以方便地打包、部署和运行应用程序,包括 Redis。在这个场景中,我们有一个针对 Redis 3.2 版本的自定义配置...
在本文中,我们将深入探讨如何在SpringBoot应用中集成Redis集群以及如何配置Redis服务器。首先,Redis是一个开源的、基于键值对的数据存储系统,常用于数据库、缓存和消息中间件。它以其高性能和易用性而备受青睐。...
Redis是一种基于内存的NoSQL数据库,具有高性能、低延迟和高可用的特点。本文档旨在指导用户如何安装和配置Redis,实现高效的数据存储和管理。 一、下载和解压Redis 下载Redis的最新版本可以从官方网站...
Redis集群配置文件是实现Redis高可用性和数据分片的关键组件。在Redis集群中,数据被分散存储在多个节点上,每个节点负责一部分数据,从而提高了系统的扩展性和容错性。以下将详细介绍Redis集群配置文件的相关知识,...
Redis 是一款开源的键值存储系统,以其高性能、低延迟的特点在缓存、消息队列等领域有着广泛的应用。下面详细介绍如何安装与配置 Redis。 ##### 1. 下载与安装 Redis - **下载 Redis**:通过 wget 命令下载最新...
Redis是一种开源的高性能键值存储系统,可用于构建缓存、消息队列等应用场景。它支持多种数据结构,如字符串、哈希、列表、集合等,并且可以将数据持久化到磁盘。 #### 二、Redis安装步骤 根据提供的部分文件内容,...
在Linux系统中,Redis是一个广泛使用的高性能键值存储系统,常用于数据库、缓存和消息代理等场景。本文将详细讲解如何在Linux环境下安装Redis,以及如何配置主服务器和从服务器。 首先,让我们从安装Redis开始。在...
Redis性能测试报告旨在详细记录和分析Redis中间件的性能,以确保其在实际生产环境中的稳定性和效率。报告涵盖了测试的各个方面,包括测试范围、目标、环境需求、方案以及结果的呈现。 首先,测试范围明确指出是针对...
Redis则是一款高性能的键值存储系统,常用于数据缓存、消息队列等场景。当Spring Boot与Redis结合时,可以实现高效的数据处理和应用性能提升。本篇文章将深入探讨如何在Spring Boot中实现对Redis集群的零配置整合,...
Redis是当前最流行的NoSQL数据库之一,具有高性能、低延迟、支持事务等特点。下面将详细介绍Redis的安装配置。 安装Redis 在Windows平台上安装Redis,可以从GitHub上下载Redis的Windows版本,下载完成后,解压缩...
首先,Redis是一个高性能的键值存储系统,广泛应用于缓存、消息队列等场景。在Kubernetes上部署Redis,可以利用其自动容错和负载均衡的能力,提高服务的稳定性和可扩展性。而配置文件`redis.master.conf`和`redis....
Redis 是一款高性能的键值数据库,广泛应用于缓存、消息队列等场景。在分布式系统中,为了保证数据的高可用性和持久性,通常会采用主从复制(Master-Slave Replication)的架构。本教程将通过一个简单的示例介绍如何...
在本文中,我们将详细介绍如何配置 Redis 主从服务器,以实现高可用性和高性能的缓存系统。 Redis 概述 Redis 是一个开源的、基于内存的数据存储系统,可以用作数据库、缓存和消息队列等。Redis 的特点是高性能、...
而Redis是一个高性能的键值数据存储系统,常被用作缓存和消息代理,提升应用程序的性能和响应速度。Sentinel是Redis的一个高可用性解决方案,它可以监控Redis实例,并在主节点出现问题时自动进行故障转移,确保服务...
Redis 是一个高性能的键值存储系统,常用于缓存、...以上是 Redis 配置文件中的主要选项,每个配置项都直接影响 Redis 的运行效果和性能。根据实际需求调整这些参数,可以优化 Redis 服务器以满足特定场景下的需求。
Linux系统中安装和配置Redis数据库及其主从复制是一个复杂但非常重要的过程。...掌握Redis的安装和配置是进行高性能数据库操作和数据备份的前提。熟练地配置和使用Redis将极大地提高开发效率和系统性能。
Redis 是一个高性能的键值数据库,常用于缓存、数据持久化和消息队列等场景。标题提到“redis 配置文件 不可以直接使用”,这可能指的是Redis默认的配置文件`redis.conf`在某些特定环境或需求下需要进行调整才能正常...
本手册将指导您如何安装和配置 Redis 群集,确保高可用性和高性能。 1. Redis 安装 Redis 安装非常简单,首先需要从官方网站下载 Redis 稳定版本,例如 Redis 5.0.4。然后,使用 yum 安装 gcc 和 tcl,接着将 ...
而Redis,作为一个高性能的键值数据库,常被用于缓存、消息队列等多种场景,大大提升了应用的性能。本文将详细介绍如何在Spring Boot项目中集成Redis,以实现高效的数据存储和检索。 首先,集成Redis需要在Spring ...