转自:http://www.open-open.com/lib/view/open1419670554109.html#

随着Redis的发展,越来越多的架构用它取代了memcached作为缓存服务器的角色,它有几个很突出的特点:
1. 除了Hash,还提供了Sorted Set, List等数据结构
2. 可以持久化到磁盘
3. 支持cluster (3.0)

它的性能和memcached不相上下,再加上流行的其他组件(比如队列)也会用到redis,从架构简单出发,已经没有必要混用redis和memcached了。

写篇短文介绍一下用redis作为缓存服务器配置时候需要注意几个点。

Redis配置

作为缓存服务器,如果不加以限制内存的话,就很有可能出现将整台服务器内存都耗光的情况,可以在redis的配置文件里面设置:

# 限定最多使用1.5GB内存
maxmemory 1536mb

如果内存到达了指定的上限,还要往redis里面添加更多的缓存内容,需要设置清理内容的策略:

# 设置策略为清理最少使用的key对应的数据
maxmemory-policy allkeys-lru

清理策略有多种,redis的官方文档有一篇很详细的说明: http://redis.io/topics/lru-cache

Redis监控

redis提供了INFO这个命令,能够随时监控服务器的状态,只用telnet到对应服务器的端口,执行命令即可:

telnet localhost 6379
info

在输出的信息里面有这几项和缓存的状态比较有关系:

keyspace_hits:14414110
keyspace_misses:3228654
used_memory:433264648
expired_keys:1333536
evicted_keys:1547380

通过计算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的缓存配置

Rails在用redis作为缓存的时候,配置很简单,官方文档是用schema的方式来写的:

config.cache_store = :redis_store, "redis://localhost:6379/0/cache"

由于实在太简单了,很多人就直接用这个默认设置了,但实际上还有一些很有用的参数可以通过hash options的方式来写,比如压缩超过32K的数据压缩以后再放入缓存,再比如设置默认所有的key失效时间为8小时:

config.cache_store = :redis_store, {:host => 'redis.server', :port => 6379, :compress => true, :expires_in => 8.hours, :compress_threshold => 32.kilobytes}

用一个实际案例来作为例子,一台redis缓存服务器在优化配置之前,占用4.2G左右的内存,缓存命中率在70%左右。
我们先在服务器上执行BGSAVE命令,将内存dump下来,然后用https://github.com/sripathikrishnan/redis-rdb-tools 这个工具,将dump的数据,解析成csv文件:

rdb -c memory /var/redis/6379/dump.rdb > memory.csv

用excel打开分析,按key进行排序和统计,我们可以看到哪一些类型的缓存在服务器上最多,调整这个类型缓存的失效时间和失效机制,再通过redis-stat来观察进行微调,提高整体的命中率。
通过分析占用内存比较大的key,发现有30%左右的相同类型key,用了95%的内存,这些缓存大部分是html的片段缓存,通过设置compress_threshold和compress参数,让整体内存占用从4.2G,下降到了1.3G。

来自:https://ruby-china.org/topics/22761

Redis 作为缓存服务器的配置相关推荐

  1. HAProxy 的负载均衡服务器,Redis 的缓存服务器

    问答社区网络 StackExchange 由 100 多个网站构成,其中包括了 Alexa 排名第 54 的 StackOverflow.StackExchang 有 400 万用户,每月 5.6 亿 ...

  2. Memcached Redis构建缓存服务器

    一.Memcached介绍 RDBMS即关系数据库管理系统(Relational Database Management System) 许多Web应用都将数据保存到 RDBMS中,应用服务器从中读取 ...

  3. c语言 连接哨兵 redis6,Redis哨兵--缓存服务器

    redis哨兵 说明:通过缓存服务器可以有效的提升用户的访问效 1.注意事项: A:缓存的数据结构应该选用K-V结构,只要K唯一那么结果必然相同 B:缓存总的数据不可能一直储存,需要定期将内存数据进行 ...

  4. squid 3 反向代理 缓存服务器 安装配置精华指南 by lbj

    squid-3.0.STABLE21 安装配置 by lbj 作用:作为反向代理/缓存服务器 系统:redhat linux 企业版 5.4 linux 要有gcc编译器,使用squid-3.0.ST ...

  5. Redis作为缓存服务器

    1.ICache的Redis实现没有放在'Framework.Cache/Logic'中.如果是以前,我会认为这样不好.我会这样做,'Framework.Cache'项目引用Redis项目或直接从Nu ...

  6. redis java 缓存服务器_java中对Redis的缓存进行操作

    Redis 是一个NoSQL数据库,也是一个高性能的key-value数据库.一般我们在做Java项目的时候,通常会了加快查询效率,减少和数据库的连接次数,我们都会在代码中加入缓存功能.Redis的高 ...

  7. Redis作为MySQL缓存服务器的使用

    server1:192.168.1.11  安装nginx和php为用户提供服务访问入口 server3:192.168.1.13  安装mysql,存储数据 server2:192.168.1.12 ...

  8. memcacheredis构建缓存服务器

    memcache&redis构建缓存服务器 前言 Memcached Redis Redis持久化 Redis主从集群 Redis哨兵模式 前言 学习来源:https://www.bilibi ...

  9. 缓存服务器 MemcachedRedis

    文章目录 一.前言 1.NoSQL的优点/缺点 2.关系型数据库与非关系型数据库的区别 (1)关系型数据库 (2)非关系型数据库 二.Memcached 1.特点 2.服务框架 3.配置安装Memca ...

最新文章

  1. 【Java源码分析】LinkedList源码分析
  2. phpcms分页查询
  3. UVA10905孩子们的游戏
  4. openstack上传镜像失败_制作云window10镜像
  5. gdbserver yum 安装_(OK) 编译cBPM—CentOS7—gdb—gdbserver—成功—调试
  6. Scrapy网络爬虫框架实战[以腾讯新闻网为例]
  7. 【华为云技术分享】关于Linux下Nginx的安装及配置
  8. keras 多输出问题
  9. dpkg:处理 xxx (--configure)时出错解决办法(转载)
  10. tf.GraphKeys,tf.add_to_collection() 与 tf.get_collection()
  11. Mysql安装的目录结构详解
  12. vmware vsphere出现“需要整合虚拟机磁盘”的告警处理方法(完整版)
  13. Spring AOP原理分析(二)--@EnableAspectJAutoProxy功能分析
  14. 伺服电机编码器与转子磁极相位对齐方法
  15. 2020神舟几号发射_神舟九号和神舟十号是什么时候发射的,宇航员分别是谁?...
  16. Exp7 网络欺诈防范 20164323段钊阳
  17. SQL查询-查询所有员工的姓名及其直接上级的姓名,没有领导的员工也需要查询
  18. 【转载】刘未鹏的C++学习历程 + 小诗一首
  19. Spark中组件Mllib的学习16之分布式行矩阵的四种形式
  20. 结束计算机进程的快捷键,结束进程快捷键在哪 电脑结束进程快捷键操作方法...

热门文章

  1. java设计模式简述
  2. 2018年各大互联网前端面试题三(阿里)
  3. sql server转oracle需要注意的几点
  4. wpf custom control
  5. 下一代Asp.net开发规范OWIN(2)—— Katana介绍以及使用
  6. JQuery UI 1.8.13发布看看有哪些变动
  7. 质量糟糕的代码会在项目中像病毒一样传播,尽量在源头控制好代码质量、强调范例的重要性...
  8. SDM450+android8.1播放左声道音频文件和右声道音频文件,左右喇叭都有声音问题
  9. Android的开机流程及对应源码位置分析
  10. 将SVN与BUG跟踪管理集成