一些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的设计

  1. string类型控制在10KB以内,hash、list、set、zset元素个数不要超过5000。
  2. 非字符串的bigkey,不要使用del删除,使用hscan、sscan、zscan方式渐进式删除