`
qieyi28
  • 浏览: 152904 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论
阅读更多

性能相关的数据指标

      (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

  1. 使用swap危害:磁盘性能下降,持久化时间过长,可能出现暂停服务。
  2. 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简介、单REDIS实例配置、主从结构配置、客户端程序

    Redis 性能优化 配置说明.rar

    Redis 性能优化 配置说明.rar

    redis-windows-7.0.11

    此外,redis-windows还提供了一些有用的功能,如监控Redis服务器的性能、查看Redis服务器的状态和信息、执行Redis命令等。 总之,redis-windows是一个非常方便的工具,可以帮助Windows用户快速地安装和使用Redis。

    Redis安装配置详细教程PDF

    Redis支持多种数据结构,包括字符串、哈希、列表、集合、有序集合等,使其非常适合用于构建高性能、可扩展的应用程序。本教程将详细介绍如何安装和配置Redis,并提供一些常见的用例和最佳实践。 1. 准备工作 2. 下载...

    redis安装配置指南

    在centos6.5下源码安装配置redis。Redis 是一个高性能的key-value数据库。 redis的出现,很大程度补偿了memcached这类keyvalue存储的不足,在部 分场合可以对关系数据库起到很好的补充作用。它提供了Python,Ruby,...

    Redis官方Cluster搭建配置步骤详解

    Redis集群并 不支持处理多个keys的命令,因为这需要在不同的节点间移动数据,从而达不到像Redis那样的性能,在高负载的情况下可能会导致不可预料的错误. Redis 集群通过分区来提供一定程度的可用性,在实际环境中当某个...

    redis安装配置详细教程.pdf

    Redis的主要特点包括高性能、多样化的数据结构、支持事务、发布订阅机制、高可用性、简单易用等。 Redis的读写速度非常快,可以达到每秒数十万次的操作,因此常被用作缓存。其支持多种类型的数据结构,如字符串、...

    spring集成redis单节点、集群、哨兵配置

    Redis 是一个开源的 key-value 存储系统,由于出众的性能,大部分互联网企业都用来做服务器端缓存。Redis 支持单实例模式,集群主从模式、哨兵模式等部署

    Redis学习笔记-安装、性能、复制等

    一、Redis 介绍 二、Redis 性能介绍 三、Redis 功能 四、Redis 安装及配置 五、Redis 启动 六、Redis 的数据类型 七、Redis 的master/slave 配置

    redis-5.0.4.tar.gz下载及redis安装过程

    redis-benchmark 性能测试工具 redis-check-aof 日志文件检测工(比如断电造成日志损坏,可以检测并修复) redis-check-dump 快照文件检测工具,效果类上 redis-cli 客户端 redis-server 服务端 10: 启动与连接 ...

    Redis+nginx集群部署

    Tomcat+Nginx+Redis搭建高性能负载均衡集群Session共享

    redis 完整版教程(公司内部请某培训机构的教程)

    Redis 配置 Redis 命令 Redis 键 Redis 字符串 Redis 哈希 Redis 列表 Redis 集合(有序集合) Redis HyperLogLog Redis 发布订阅 Redis 事物 Redis 脚本 Redis 链接 Redis 服务器 Redis 数据备份与恢复 Redis 安全 ...

    分布式存储极致性能Redis6视频.zip

    02_redis官网查阅和基本配置 03_逐渐又加入了多线程特性 04_多线程io多路复用入门简介 05_TK Mapper之一键生成代码 06_srm框架整合理论说明 07_缓存案例-A 08_缓存案例-B 09_类型应用落地-A 10_类型应用落地-B 11_...

    Redis面试题50道(含答案)_.pdf

    1、什么是 Redis? 2、Redis 相比 memcached 有哪些优势? 3、Redis 支持哪几种数据类型? 4、Redis 主要消耗什么物理资源? 5、Redis 的全称是什么? ...50、修改配置不重启 Redis 会实时生效吗?

    SSM项目-redis缓存策略和配置实现

    实现redis缓存策略和Spring集成redis配置 1.1 Redis是一个key-value存储系统,支持多种存储结构,如String,Hash,list,zset等; 1.2 Redis采用内存中数据集的形式,因此读写性能优异; 1.3 Redis支持数据持久化,支持...

    redis-windows-7.2.3.zip

    Redis 是一个高性能的key-value数据库

    Redis错误配置详解

    在无需额外配置应用层的前提下,Redis独特的数据类型、指令和命令调优就可以满足应用的需求,但是错误的配置,更确切的说那些机外设备可能导致操作麻烦和性能问题。虽然导致了一些令人头疼的问题,但是解决方案是...

    Redis实战.pdf

    Redis 是一个高性能的key-value数据库。 redis的出现,很大程度补偿了memcached这类keyvalue存储的不足,在部 分场合可以对关系数据库起到很好的补充作用。它提供了Python,Ruby,Erlang,PHP客户端,使用很方便。 ...

    RedisCache.zip

    并且自定义了Redis缓存配置,内容进行了重点的注解,同时对序列化数据进行了分类自定义设计,根据需求进行自动匹配CacheManager,本项目具有高效快捷的性能。

    基于redis事件库开发,高性能socket性能测试工具

    基于redis事件库开发,one epoll per thread模型,超高性能。 框架默认支持http性能测试,可轻松扩展到支持socket/rpc/http/redis/sqls等所有基于socket的性能测试。为socket性能测试提供通用解决方案。 支持随机...

Global site tag (gtag.js) - Google Analytics