Redis性能管理

一、查看Redis内存使用

info memory

方法一:进入redis查看

127.0.0.1:6379> info memory
# Memory
used_memory:853336
used_memory_human:833.34K
used_memory_rss:10477568
used_memory_rss_human:9.99M
used_memory_peak:853336
used_memory_peak_human:833.34K
used_memory_peak_perc:100.01%
used_memory_overhead:841110
used_memory_startup:791416
used_memory_dataset:12226
used_memory_dataset_perc:19.74%
allocator_allocated:1258016
allocator_active:1503232
allocator_resident:8421376
total_system_memory:2080673792
total_system_memory_human:1.94G
used_memory_lua:37888
used_memory_lua_human:37.00K
used_memory_scripts:0
used_memory_scripts_human:0B
number_of_cached_scripts:0
maxmemory:0
maxmemory_human:0B
maxmemory_policy:noeviction
allocator_frag_ratio:1.19
allocator_frag_bytes:245216
allocator_rss_ratio:5.60
allocator_rss_bytes:6918144
rss_overhead_ratio:1.24
rss_overhead_bytes:2056192
mem_fragmentation_ratio:12.90
mem_fragmentation_bytes:9665248
mem_not_counted_for_evict:0
mem_replication_backlog:0
mem_clients_slaves:0
mem_clients_normal:49694
mem_aof_buffer:0
mem_allocator:jemalloc-5.1.0
active_defrag_running:0
lazyfree_pending_objects:0
127.0.0.1:6379>

方法二:redis外查看

[root@localhost ~]# redis-cli -h 192.168.122.10 -p 6379 info memory
# Memory
used_memory:853336
used_memory_human:833.34K
used_memory_rss:13807616
used_memory_rss_human:13.17M
used_memory_peak:853336
used_memory_peak_human:833.34K
used_memory_peak_perc:100.00%
used_memory_overhead:841110
used_memory_startup:791416
used_memory_dataset:12226
used_memory_dataset_perc:19.74%
allocator_allocated:1064912
allocator_active:1294336
allocator_resident:11046912
total_system_memory:2080673792
total_system_memory_human:1.94G
used_memory_lua:37888
used_memory_lua_human:37.00K
used_memory_scripts:0
used_memory_scripts_human:0B
number_of_cached_scripts:0
maxmemory:0
maxmemory_human:0B
maxmemory_policy:noeviction
allocator_frag_ratio:1.22
allocator_frag_bytes:229424
allocator_rss_ratio:8.53
allocator_rss_bytes:9752576
rss_overhead_ratio:1.25
rss_overhead_bytes:2760704
mem_fragmentation_ratio:17.45
mem_fragmentation_bytes:13016184
mem_not_counted_for_evict:0
mem_replication_backlog:0
mem_clients_slaves:0
mem_clients_normal:49694
mem_aof_buffer:0
mem_allocator:jemalloc-5.1.0
active_defrag_running:0
lazyfree_pending_objects:0
[root@localhost ~]#

二、内存碎片率

操作系统分配的内存值used_memory_rss除以Redis使用的内存值used_memory计算得出。

内存碎片是由操作系统低效的分配/回收物理内存导致的(不连续的物理内存分配)。

跟踪内存碎片率对理解Redis实例的资源性能是灰常重要的:

● 内存碎片率稍大于1是合理的,这个值表示内存碎片率比较低

● 内存碎片率超过1.5,说明Redis消耗了实际需要物理内存的150%,其中50%是内存碎片率。需要在redis-cli工具上输入shutdown save命令,并重启Redis服务器。

● 内存碎片率低于1的,说明Redis内存分配超出了物理内存,操作系统正在进行内存交换。需要增加可用物理内存或减少Redis内存占用。

三、内存使用率

redis实例的内存使用率超过可用最大内存,操作系统将开始进行内存与swap空间交换。

四、避免内存交换发生的方法

● 针对缓存数据大小选择安装Redis实例

● 尽可能的使用Hash数据结构存储

● 设置key的过期时间

1. Hash数据类型

hash用于存储对象。可以采用这样的命名方式:对象类别和ID构成键名,使用字段表示对象的属性,而字段值则存储属性值。

如:存储ID为2的汽车对象。

如果Hash中包含很少的字段,那么该类型的数据也将仅占用很少的磁盘空间。每一个Hash可以存储4294967295个键值对。

1.1 HSET/HGET/HDEL/HEXISTS/HLEN/HSETNX

redis 127.0.0.1:6379> hset myhash field1 "zhang"
#给键值为myhash的键设置字段为field1,值为zhang。
(integer) 1
redis 127.0.0.1:6379> hget myhash field1
#获取键值为myhash,字段为field1的值。
"zhang"
redis 127.0.0.1:6379> hget myhash field2
#myhash键中不存在field2字段,因此返回nil。
(nil)
redis 127.0.0.1:6379> hset myhash field2 "san"
#给myhash添加一个新的字段field2,其值为san。
(integer) 1
redis 127.0.0.1:6379> hlen myhash#hlen命令获取myhash键的字段数量。
(integer) 2
redis 127.0.0.1:6379> hexists myhash field1
#判断myhash键中是否存在字段名为field1的字段,由于存在,返回值为1。
(integer) 1
redis 127.0.0.1:6379> hdel myhash field1
#删除myhash键中字段名为field1的字段,删除成功返回1。
(integer) 1
redis 127.0.0.1:6379> hdel myhash field1
#再次删除myhash键中字段名为field1的字段,由于上一条命令已经将其删除,因为没有删除,返回0。
(integer) 0
redis 127.0.0.1:6379> hexists myhash field1
#判断myhash键中是否存在field1字段,由于上一条命令已经将其删除,因为返回0。
(integer) 0
redis 127.0.0.1:6379> hsetnx myhash field1 zhang
#通过hsetnx命令给myhash添加新字段field1,其值为zhang,因为该字段已经被删除,所以该命令添加成功并返回1。
(integer) 1
redis 127.0.0.1:6379> hsetnx myhash field1 zhang
#由于myhash的field1字段已经通过上一条命令添加成功,因为本条命令不做任何操作后返回0。
(integer) 0

1.2 HINCRBY

redis 127.0.0.1:6379> del myhash
#删除该键,便于后面示例的测试。
(integer) 1
redis 127.0.0.1:6379> hset myhash field 5
#准备测试数据,该myhash的field字段设定值5。
(integer) 1
redis 127.0.0.1:6379> hincrby myhash field 1
#hincrby命令给myhash的field字段的值加1,返回加后的结果。
(integer) 6
redis 127.0.0.1:6379> hincrby myhash field -1
#hincrby命令给myhash的field字段的值加-1,返回加后的结果。
(integer) 5
redis 127.0.0.1:6379> hincrby myhash field -10
#hincrby命令给myhash的field字段的值加-10,返回加后的结果。
(integer) -5

1.3 HGETALL/HKEYS/HVALS/HMGET/HMSET

redis 127.0.0.1:6379> del myhash
#删除该键,便于后面示例测试。
(integer) 1
redis 127.0.0.1:6379> hmset myhash field1 "hello" field2 "world"
#hmset命令为该键myhash,一次性设置多个字段,分别是field1="hello", field2="world"。
OK
redis 127.0.0.1:6379> hmget myhash field1 field2 field3
#hmget命令获取myhash键的多个字段,其中field3并不存在,因为在返回结果中与该字段对应的值为nil。
1) "hello"
2) "world"
3) (nil)
redis 127.0.0.1:6379> hgetall myhash
#hgetall命令返回myhash键的所有字段及其值,从结果中可以看出,他们是逐对列出的。
1) "field1"
2) "hello"
3) "field2"
4) "world"
redis 127.0.0.1:6379> hkeys myhash
#hkeys命令仅获取myhash键中所有字段的名字。
1) "field1"
2) "field2"
redis 127.0.0.1:6379> hvals myhash
#hvals命令仅获取myhash键中所有字段的值。
1) "hello"
2) "world"

2. 设置key的过期时间--SETEX

redis 127.0.0.1:6379> setex mykey 15 "hello"
#设置指定Key的过期时间为15秒。
OK
redis 127.0.0.1:6379> ttl mykey
#通过ttl命令查看一下指定Key的剩余存活时间(秒数),-2表示已经过期,-1表示永不过期。
(integer) 4
redis 127.0.0.1:6379> get mykey
#在该键的存活期内我们仍然可以获取到它的Value。
"hello"
redis 127.0.0.1:6379> ttl mykey
#该ttl命令的返回值显示,该Key已经过期。
(integer) -2
redis 127.0.0.1:6379> get mykey
#获取已过期的Key将返回nil。
(nil)

五、内回收key

内存清理策略,保证合理分配redis有限的内存资源。

当达到设置的最大阀值时,需选择一种key的回收策略,默认情况下回收策略是禁止删除的。

配置文件中修改maxmemory-policy属性值:

[root@localhost ~]# vim /etc/redis/6379.conf

##598行,取消注释,并指定回收策略
maxmemory-policy noeviction
常用的回收策略 说明
volatile-lru 使用LRU算法从已设置过期时间的数据集合中淘汰数据(移除最近最少使用的key,针对设置了TTL的key)
volatile-ttl 从已设置过期时间的数据集合中挑选即将过期的数据淘汰(移除最近过期的key)
volatile-random 从已设置过期时间的数据集合中随机挑选数据淘汰(在设置了TTL的key里随机移除)
allkeys-lru 使用LRU算法从所有数据集合中淘汰数据(移除最少使用的key,针对所有的key)
allkeys-random 从数据集合中任意选择数据淘汰(随机移除key)
noenviction 禁止淘汰数据(不删除直到写满时报错)

Redis性能管理的更多相关文章

  1. NoSQL 之 Redis配置与优化

    NoSQL 之 Redis配置与优化 1.关系数据库与非关系型数据库概述 2.关系数据库与非关系型数据库区别 3.非关系型数据库产生背景 4.Redis简介 5.Redis安装部署 6.Redis 命 ...

  2. [转]细说Redis监控和告警

    原文  https://zhuoroger.github.io/2016/08/20/redis-monitor-and-alarm/? 对于任何应用服务和组件,都需要一套完善可靠谱监控方案. 尤其r ...

  3. Pinpoint - 应用性能管理(APM)平台实践之部署篇

    0.0 前言 国内的APM行业这两年刚刚起步,但是在国外却比较成熟了,并且由于这两年人力成本的快速提高,国内外涌现了几家非常不错的APM企业,例如APPdynamic,Dynamic,NewRelic ...

  4. 使用redis构建可靠分布式锁

    关于分布式锁的概念,具体实现方式,直接参阅下面两个帖子,这里就不多介绍了. 分布式锁的多种实现方式 分布式锁总结 对于分布式锁的几种实现方式的优劣,这里再列举下 1. 数据库实现方式 优点:易理解 缺 ...

  5. Ignite性能测试以及对redis的对比

    测试方法 为了对Ignite做一个基本了解,做了一个性能测试,测试方法也比较简单主要是针对client模式,因为这种方法和使用redis的方式特别像.测试方法很简单主要是下面几点: 不作参数优化,默认 ...

  6. mac osx 安装redis扩展

    1 php -v查看php版本 2 brew search php|grep redis 搜索对应的redis   ps:如果没有brew 就根据http://brew.sh安装 3 brew ins ...

  7. Redis/HBase/Tair比较

    KV系统对比表 对比维度 Redis Redis Cluster Medis Hbase Tair 访问模式    支持Value大小 理论上不超过1GB(建议不超过1MB) 理论上可配置(默认配置1 ...

  8. Redis数据库

    Redis是k-v型数据库的典范,设计思想及数据结构实现都值得学习. 1.数据类型 value支持五种数据类型:1.字符串(strings)2.字符串列表(lists)3.字符串集合(sets)4.有 ...

  9. redis 学习笔记(2)

    redis-cluster 简介 redis-cluster是一个分布式.容错的redis实现,redis-cluster通过将各个单独的redis实例通过特定的协议连接到一起实现了分布式.集群化的目 ...

随机推荐

  1. Eclipse远程调试Java代码的三种方法

    Eclipse远程调试Java代码的三种方法, 第1种方法是用来调试已经启动的Java程序,Eclipse可以随时连接到远程Java程序进行调试, 第2种方法可以调试Java程序启动过程,但是Ecli ...

  2. 使用uiautomatorviewer,查看app页面元素,进行元素定位

    环境搭建: 安装adt,安装成功后,就可以在adt路径下的tools文件夹中找到uiautomatorviewer.bat 用来做什么? uiautomatorviewer.bat是用来扫描和分析An ...

  3. spring clould -多模块 -swagger2 配置 nginx 的正确设置

    #user nobody; worker_processes 2; #error_log logs/error.log; #error_log logs/error.log notice; #erro ...

  4. mysql数据库安装教程

    centos 7安装mysql教程 一.卸载mariadb 注:卸载mariadb,否则安装Mysql会出现冲突 [root@mysqlmaster ~]# rpm -qa |grep mariadb ...

  5. Angularjs实现下拉列表排序

    <select class="form-control underline" ng-model="reportform.score" ng-options ...

  6. Git 的配置 config

    Git 的配置 config Git 的配置 config config 文件简述 config 文件位置 信息查询 修改 config 文件 编辑配置文件 增加指定配置项 删除指定配置项 自助餐   ...

  7. Nginx 基础入门

    目录 Nginx 基础入门 1.Nginx简介 1.1.相关名词解释 2.Nginx优势 3.Nginx部署 4.Nginx配置文件 5.Nginx模块 6.Nginx配置文件 6.1.Locatio ...

  8. HDU 2018 母牛的故事 (递归入门)

    原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=2018 思路分析: 问题分析:这道题的递推关系非常类似斐波那契数列,由题意不难得到以下函数递推式: 对于 ...

  9. 在asp.net webfrom 中完成用户自定义导出

    asp.net原生控件实现自定义列导出功能 自定义列实现 最近负责开发公司内部使用的人事信息化系统时,有一个需求是这样的,需要在页面中可以用户每次导出Excel时自定义需要导出哪些列,经过半天的琢磨和 ...

  10. 【Java常用类】String

    文章目录 String String实例化的方式 方式一:通过字面量定义 方式二:new + 构造器的方式 String s = new String("abc")方式创建对象,在 ...