2026-10-20 12:12:35
Redis 开发规范
一、键名设计规范
可读性和可管理性
键名应具有明确的业务含义,便于理解和维护。
建议以业务名(或数据库名)作为前缀,以防止键名冲突。
使用冒号(:)作为分隔符,例如:业务名:表名:id。
简洁性
在保证语义的前提下,应尽量控制键名的长度。
当键名数量较多时,过长的键名会显著增加内存占用。
字符限制
键名中不允许包含空格、换行、单双引号以及其他转义字符。
这些特殊字符可能导致解析错误或安全问题。
二、Value 设计规范
拒绝大key
对于string类型,建议将value大小控制在10KB以内。
对于hash、list、set、zset等复杂数据类型,元素个数不应超过5000。
生命周期管理
应根据业务需求合理设置key的过期时间,避免数据长期驻留Redis。
可以使用expire命令设置过期时间,条件允许时可以打散过期时间,防止数据集中过期导致性能问题。
对于不过期的数据,应重点关注其空闲时间(idletime),及时清理无用数据。
强制过期策略
在项目中,一般应强制要求所有数据都设置过期时间。
这样可以避免由于Redis问题导致服务不可用,同时也有助于保持Redis的内存使用在可控范围内。
三、命令使用规范
避免使用高复杂度命令
应特别关注命令的时间复杂度,避免使用O(N)复杂度的命令处理大量数据。
例如,禁止在线上环境中使用keys、flushall、flushdb等高风险命令。
可以通过Redis的rename机制禁掉这些命令,或者使用scan命令进行渐进式处理。
推荐使用批量操作
对于需要处理多个key或value的场景,推荐使用批量操作命令以提高效率。
原生命令如mget、mset等支持批量操作。
对于非原生命令,可以使用pipeline技术来提高效率。
谨慎使用事务
Redis的事务性能相对较弱,不建议在需要高性能的场景中使用。
如果需要保证多个操作的原子性,可以考虑使用Lua脚本或其他分布式事务解决方案。