分布式缓存服务 DCS-DCS使用规范:命令使用规范
命令使用规范
原则 |
原则说明 |
备注 |
---|---|---|
谨慎使用O(N)复杂度的命令 |
时间复杂度为O(N)的命令,需要特别注意N的值。避免N过大,造成Redis阻塞以及CPU使用率冲高。 |
例如:hgetall、lrange、smembers、zrange、sinter这些命令都是做全集操作,如果元素很多,会消耗大量CPU资源。可使用hscan、sscan、zscan这些分批扫描的命令替代。 |
禁用高危命令 |
禁止使用flushall、keys、hgetall等命令,或对命令进行重命名限制使用。 |
请参考命令重命名的内容。 |
慎重使用select |
Redis多数据库支持较弱,多业务用多数据库实际还是单线程处理,会有干扰。最好是拆分使用多个Redis。 |
- |
使用批量操作提高效率 |
如果有批量操作,可使用mget、mset或pipeline,提高效率,但要注意控制一次批量操作的元素个数。 |
mget、mset和pipeline的区别如下:
|
避免在lua脚本中使用耗时代码 |
lua脚本的执行超时时间为5秒钟,建议不要在lua脚本中使用比较耗时的代码。 |
比如长时间的sleep、大的循环等语句。 |
避免在lua脚本中使用随机函数 |
调用lua脚本时,建议不要使用随机函数去指定key,否则在主备节点上执行结果不一致,从而导致主备节点数据不一致。 |
- |
遵循集群实例使用lua的限制 |
遵循集群实例使用lua的限制。 |
|
对mget,hmget等批量命令做并行和异步IO优化 |
某些客户端对于MGET,HMGET这些命令没有做特殊处理,串行执行再合并返回,效率较低,建议做并行优化。 |
例如Jedis对于MGET命令在集群中执行的场景就没有特殊优化,串行执行,比起lettuce中并行pipeline,异步IO的实现,性能差距可达到数十倍,该场景建议使用Jedis的客户端自行实现slot分组和pipeline的功能。 |
禁止使用del命令直接删除大Key |
使用del命令直接删除大Key(主要是集合类型)会导致节点阻塞,影响后续请求。 |
Redis 4.0后的版本可以通过UNLINK命令安全地删除大Key,该命令是异步非阻塞的。 对于Redis 4.0之前的版本:
|
- ModelArts推理部署_OBS导入_模型包规范-华为云
- 华为云CodeArts API_API质量_API规范_API审核
- ModelArts推理部署_创建AI应用_自定义镜像规范-华为云
- 华为云CodeArts API_如何在CodeArts API中设置API的设计规范?
- GaussDB命令_GaussDB数据库命令_高斯数据库命令-华为云
- 华为云CodeArts API_APIFirst_API设计_API设计规范_API全生命周期
- 云端开发环境服务_IDE _云开发
- GaussDB查版本命令_GaussDB命令参考_高斯数据库查版本命令-华为云
- 云手机使用
- 华为云手机怎么使用_云手机使用教程_部署云手机_云手机使用方法