文档章节

Redis_注意事项

sand_ant
 sand_ant
发布于 2016/06/21 14:02
字数 877
阅读 54
收藏 0

「深度学习福利」大神带你进阶工程师,立即查看>>>

注意事项

设置最大内存

一定要设置最大内存,否则物理内存用爆了就会大量使用Swap,写RDB文件时变得非常缓慢。
如果不限制导致内存占用过大时,可能会被linux内核强制kill
可以在/var/log/messages文件中看见如下信息:
Out of memory: Kill process 2030 (redis-server) score 679 or sacrifice child

内存限制

如果超过最大内存而且没有设置删除策略或者删除策略已不满足,则无法写入

不要使用过长的key

Key 可以是任意类型,最后都存成byte[]
Key 不能太长,比如1024字节,但也不追求太短,建议用":"分隔表名,用"."作为单词间的连接。

key数量限制

一个实例最大可以存储 2^32个key
hash, list, set, sorted set, 可以存储 2^32个元素

value长度限制

单个value长度限制为最大512M

RDB&AOF

  • 每次保存 RDB 的时候,Redis 都要 fork() 出一个子进程,并由子进程来进行实际的持久化工作。
    在数据集比较庞大时, fork() 可能会非常耗时,造成服务器在某某毫秒内停止处理客户端;
    如果数据集非常巨大,并且 CPU 时间非常紧张的话,那么这种停止时间甚至可能会长达整整一秒
  • 当子进程完成对新 RDB 文件的写入时,Redis 用新 RDB 文件替换原来的 RDB 文件,并删除旧的 RDB 文件 RDB 文件需要保存整个数据集的状态, 所以它并不是一个轻松的操作。 因此你可能会至少 5 分钟才保存一次 RDB 文件。
  • AOF为追加操作,每次耗时不会太长,2.2之后的版本可以配置追加的达到一定大小后自动重写AOF,减小无用的存储
    在不重写的情况下,如果你对一个计数器调用了 100 次 INCR , 那么仅仅是为了保存这个计数器的当前值, AOF 文件就需要使用 100 条记录
  • AOF的恢复速度比RDB慢得多
  • AOF 在过去曾经发生过这样的 bug : 因为个别命令的原因,导致 AOF 文件在重新载入时,无法将数据集恢复成保存时的原样。 (举个例子,阻塞命令 BRPOPLPUSH 就曾经引起过这样的 bug 。) 测试套件里为这种情况添加了测试: 它们会自动生成随机的、复杂的数据集, 并通过重新载入这些数据来确保一切正常。 虽然这种 bug 在 AOF 文件中并不常见, 但是对比来说, RDB 几乎是不可能出现这种 bug 的。
  • 如果 RDB 持久化和 AOF 持久化都被打开了, 那么程序会优先使用 AOF 文件来恢复数据集

生产环境代码不要使用keys指令

keys执行会做全库扫描,非常消耗redis服务器的cup,对于单核cup的redis来说,频繁的keys操作,会导致CPU很容易就被占满

修改最大连接数

linux的默认连接数(128),和redis的默认最大连接数量(511)一般对于生产环境来说都太小。生产环境或者压测环境注意修改相应的数值为合适的值,redis客户端的最大连接数不要忘记调整

sand_ant
粉丝 3
博文 35
码字总数 18706
作品 0
无锡
私信 提问
加载中
请先登录后再评论。
用vertx实现高吞吐量的站点计数器

工具:vertx,redis,mongodb,log4j 源代码地址:https://github.com/jianglibo/visitrank 先看架构图: 如果你不熟悉vertx,请先google一下。我这里将vertx当作一个容器,上面所有的圆圈要...

jianglibo
2014/04/03
4.3K
3
PHP框架--XiunoPHP

XiunoPHP 是一款面向高负载应用的 PHP 开发框架,PHPer 通过它可以快速的简单的开发出高负载项目。 XiunoPHP 前身名为 Xiuno Framework,更名后版本号从 v1.0 开始计算。已经经过了多年的实际...

匿名
2013/03/20
2.5K
0
Redis 分片实现--Redis Shard

redis-shard 是 Redis 分区的 Python API ,基于对 key 和 key tag 进行 CRC32 checksum 计算,可参考文章 http://antirez.com/post/redis-presharding.html . 该项目由知乎网开发。 使用限制...

匿名
2012/10/24
5.6K
0
c-string转换工具集合--stringencoders

c-string转换工具集合,比标准实现快2倍以上(如果有的话)。——该项目被Google Chrome使用。 包括以下C字符串转换工具 base64, standard base64, web/url safe, with configurable alphabe...

江斌
2012/11/07
4.8K
1
Nginx-Redis

Nginx-Redis 是为 nginx-perl 准备的异步 redis 客户端。 示例代码: use Nginx::Redis; ngxredis '127.0.0.1:6379', ['GET', 'mykey'], sub { my ($reply) = @; unless ($reply) { warn "er......

匿名
2012/11/19
3.1K
0

没有更多内容

加载失败,请刷新页面

加载更多

倒计时一周,HOLOS千人大会即将召开!

8月10日消息,Holos霍洛斯星际云自由能源将于2020年8月17日在深圳召开千人媒体发布会。据了解,此次发布会将请到众多行业领袖、区块链技术精英、数十位国家级专科院士以及多位能源行业重量级...

osc_njd5t1rw
41分钟前
17
0
Goroutine 泄露排查

我们在发布一个 go 应用时,默认都会启用两个 http handler: 一个是 pprof,方便线上动态追踪问题;另外一个是 prometheus 的 metrics,这样就可以通过 grafana 准实时的监控当前 runtime 信...

ms2008
2019/06/03
0
0
如何在Python中打印到stderr? - How to print to stderr in Python?

问题: There are several ways to write to stderr: 有几种写stderr的方法: # Note: this first one does not work in Python 3print >> sys.stderr, "spam"sys.stderr.write("spam\n")......

法国红酒甜
43分钟前
15
0
关于JWT Token 自动续期的解决方案

前言 在前后端分离的开发模式下,前端用户登录成功后后端服务会给用户颁发一个jwt token。前端(如vue)在接收到jwt token后会将token存储到LocalStorage中。 后续每次请求都会将此token放在请...

飘渺Jam
07/16
20
0
5G时代会不会导致编程语言大灭绝,JS的前景是否会更好-诺禾

首先,5G打开了工业互联网的大门,同时5G也会推动一系列技术的发展,包括物联网、大数据、边缘计算、人工智能等等,而这些技术的发展又会推动各种技术平台的发展,从而形成以技术平台为基础来...

osc_jo2m8l1r
43分钟前
11
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部