Redis缓存服务器的配置
2015-11-06 10:16
615 查看
随着redis的发展,越来越多的架构用它取代了memcached作为缓存服务器的角色,它有几个很突出的特点:
1. 除了Hash,还提供了Sorted Set, List等数据结构
2. 可以持久化到磁盘
3. 支持cluster (3.0)
它的性能和memcached不相上下,再加上流行的其他组件(比如队列)也会用到redis,从架构简单出发,已经没有必要混用redis和memcached了。
写篇短文介绍一下用redis作为缓存服务器配置时候需要注意几个点。
作为缓存服务器,如果不加以限制内存的话,就很有可能出现将整台服务器内存都耗光的情况,可以在redis的配置文件里面设置:
?
如果内存到达了指定的上限,还要往redis里面添加更多的缓存内容,需要设置清理内容的策略:
?
清理策略有多种,redis的官方文档有一篇很详细的说明: http://redis.io/topics/lru-cache
redis提供了INFO这个命令,能够随时监控服务器的状态,只用telnet到对应服务器的端口,执行命令即可:
?
在输出的信息里面有这几项和缓存的状态比较有关系:
?
通过计算hits和miss,我们可以得到缓存的命中率:14414110 / (14414110 + 3228654) = 81% ,一个缓存失效机制,和过期时间设计良好的系统,命中率可以做到95%以上,对于整体性能提升是很大的。
used_memory,expired_keys,evicted_keys这3个信息的具体含义,redis的官方也有一篇很详细的说明:http://redis.io/commands/info
有个ruby gem叫redis-stat,它利用INFO命令展现出更直观的信息报表,推荐:
https://github.com/junegunn/redis-stat
Rails在用redis作为缓存的时候,配置很简单,官方文档是用schema的方式来写的:
?
由于实在太简单了,很多人就直接用这个默认设置了,但实际上还有一些很有用的参数可以通过hash options的方式来写,比如压缩超过32K的数据压缩以后再放入缓存,再比如设置默认所有的key失效时间为8小时:
?
用一个实际案例来作为例子,一台redis缓存服务器在优化配置之前,占用4.2G左右的内存,缓存命中率在70%左右。
我们先在服务器上执行BGSAVE命令,将内存dump下来,然后用 https://github.com/sripathikrishnan/redis-rdb-tools这个工具,将dump的数据,解析成csv文件:
?
用excel打开分析,按key进行排序和统计,我们可以看到哪一些类型的缓存在服务器上最多,调整这个类型缓存的失效时间和失效机制,再通过redis-stat来观察进行微调,提高整体的命中率。
通过分析占用内存比较大的key,发现有30%左右的相同类型key,用了95%的内存,这些缓存大部分是html的片段缓存,通过设置compress_threshold和compress参数,让整体内存占用从4.2G,下降到了1.3G。
1. 除了Hash,还提供了Sorted Set, List等数据结构
2. 可以持久化到磁盘
3. 支持cluster (3.0)
它的性能和memcached不相上下,再加上流行的其他组件(比如队列)也会用到redis,从架构简单出发,已经没有必要混用redis和memcached了。
写篇短文介绍一下用redis作为缓存服务器配置时候需要注意几个点。
Redis配置
作为缓存服务器,如果不加以限制内存的话,就很有可能出现将整台服务器内存都耗光的情况,可以在redis的配置文件里面设置:?
?
Redis监控
redis提供了INFO这个命令,能够随时监控服务器的状态,只用telnet到对应服务器的端口,执行命令即可:?
?
used_memory,expired_keys,evicted_keys这3个信息的具体含义,redis的官方也有一篇很详细的说明:http://redis.io/commands/info
有个ruby gem叫redis-stat,它利用INFO命令展现出更直观的信息报表,推荐:
https://github.com/junegunn/redis-stat
优化Rails的缓存配置
Rails在用redis作为缓存的时候,配置很简单,官方文档是用schema的方式来写的:?
?
我们先在服务器上执行BGSAVE命令,将内存dump下来,然后用 https://github.com/sripathikrishnan/redis-rdb-tools这个工具,将dump的数据,解析成csv文件:
?
通过分析占用内存比较大的key,发现有30%左右的相同类型key,用了95%的内存,这些缓存大部分是html的片段缓存,通过设置compress_threshold和compress参数,让整体内存占用从4.2G,下降到了1.3G。
相关文章推荐
- 内存数据库Redis小Demo 包括持久性测试
- Redis常用命令
- Using Redis to store php session
- redis 学习笔记(1)-编译、启动、停止
- redis 学习笔记(2)-client端示例代码
- redis,mongodb,hbase,mola,aerospike,geode,对比
- redis中各种数据类型对应的jedis操作命令
- redis持久化RDB和AOF
- RedisCacheTool参考其中的文件读写功能
- (5)分布式下的爬虫Scrapy应该如何做-windows下的redis的安装与配置
- redist技术
- ImportError: No module named redis
- Redis hash 类型及操作
- Redis常用方法
- Redis应用中的对象序列化
- windows、php安装redis扩展
- 搭建redis给mysql做缓存
- 征服Redis系列
- 为Symfony2和Redis正名,基于PHP的10亿请求/周网站打造
- 分布式日志收集之Logstash 笔记(一)