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 产生性能抖动。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。