一些Redis的开发规范
1、使用规范
1.1、冷热数据区分
建议将热数据加载到Redis中,冷数据可以存储在MySQL或者ES中。
1.2、业务数据分离
不同业务建议放在不同的Redis,避免一个业务膨胀影响其他业务。
1.3、消息大小限制
Redis是单线程服务,消息过大会阻塞其他操作,建议保持单条记录在1KB以下,严禁超过50KB。
1.4、必须设置key失效时间
作为缓存使用时,key必须要设置失效时间
2、使用限制
2.1、严禁使用Keys
keys命令用来获取当前库下所有key
keys * 获取数据库所有的key
keys redis* 查找以redis开头的所有key
keys命令效率极低,会阻塞其他正常命令,DBA应该在生产上rename该命令进行禁用。
Redis2.8以上提供scan命令,scan通过游标进行迭代,每次执行只返回少量元素。
2.2、严禁使用 Flush
flush 命令会清空所有数据,属于高危操作。严禁使用,DBA 应该 rename 此命令,从根源禁用,仅 DBA 可操作。
2.3、严禁不设置范围的批量操作
2.3.1、严禁对 zset 的不设范围操作
ZRANGE、 ZRANGEBYSCORE等多个操作 ZSET 的函数,严禁使用 ZRANGE myzset 0 -1 等这种不设置范围的操作。请指定范围,如 ZRANGE myzset 0 100。如不确定长度,可使用 ZCARD 判断长度
2.3.2、严禁对大数据量 Key 使用 HGETALL
HGETALL会取出相关 HASH 的所有数据,如果数据条数过大,同样会引起阻塞,请确保业务可控。如不确定长度,可使用 HLEN 先判断长度
3、Key规范
3.1、键的设计
以业务名(或数据库名)为前缀(防止key冲突),用冒号分隔,比如业务名:表名:id,如果key过长,可以保证语义的前提下简写。
ugc:video:1
3.2、value的设计
- string类型控制在10KB以内,hash、list、set、zset元素个数不要超过5000。
- 非字符串的bigkey,不要使用del删除,使用hscan、sscan、zscan方式渐进式删除