redis使用规范
1、控制key的长度,尽量使用简写,节约内存

2、集合类型数据,存储的元素数量尽量控制在转换阈值以下,节约内存

3、设置maxmemory+淘汰策略

  • 不控制redis的内存上限,会导致使用过多的内存资源,如果redis使用的内存大于物理内存上限时,内存的数据会和磁盘频繁交换,会使redis性能急剧下降,redis不可用
  • 如果不设置maxmemory或者设置为0,64位系统不限制内存,32位系统最多使用3GB内存
  • volatile-xxx只会对过期key进行淘汰,会有OOM
  • allkeys-xxx会对所有key进行淘汰,如果redis用来缓存,应该使用该策略

4、尽量避免使用大key,会给redis带来卡顿,另外如果出现redis内存出现大起大落,极有可能是大key导致的

  • redis集群迁移卡顿
  • 扩容时分配内存卡顿
  • 删除时卡顿
  • 网卡流量占用过多
  • string控制在10kb,集合类型元素个数不超过5000个
  • 大key拆分

5、如果非要使用bigkey,开启lazy-free机制或使用惰性删除:unlink key(redis 4.0)

  • bigkey的del删除操作会使redis卡顿
  • 小于redis4.0, 使用scan、hsan类命令渐进删除

6、避免大量key集中过期,使用随机过期时间

  • redis使用惰性删除、定时删除两种方式来处理过期key
  • 大量key同一时间过期,redis定时删除任务耗时增加,redis卡顿

7、尽量避免使用O(n)复杂度的命令,如果要使用关注N的数量、禁用keys命令

  • hgetall、lrange、zrange
  • 先查询数据元素的数量(LLEN/HLEN/SCARD/ZCARD)
  • 元素数量较少,可一次性查询全量数据
  • 元素数量非常多,分批查询数据(LRANGE/HASCAN/SSCAN/ZSCAN)

8、使用批量操作

  • 原生命令:mget、mset,但需要注意批量数量,不超过100
  • 非原生命令:pipeline(客户端实现)

9、redis集群版在使用lua有特殊要求

  • 所有的key,必须要在1个slot上,否则返回error

10、扫描线上实例时,设置休眠时间

  • 不管你是使用 SCAN 扫描线上实例,还是对实例做 bigkey 统计分析,我建议你在扫描时一定记得设置休眠时间。防止在扫描过程中,实例 OPS 过高对 Redis 产生性能抖动。

footman
1 声望0 粉丝

下一篇 »
mvcc和间隙锁