tencent cloud

腾讯云分布式缓存数据库(兼容 Redis)

动态与公告
产品动态
公告
新手指引
产品简介
产品概述
产品优势
应用场景
存储引擎
产品系列
产品版本
规格与性能
读写分离
多可用区部署
地域和可用区
名词解释
购买指南
计费概述
定价中心
购买实例
续费说明(包年包月)
退费说明(包年包月)
欠费说明
按量转包年包月
快速入门
快速创建实例
连接 Redis 实例
操作指南
操作总览
连接数据库实例
管理实例
升级实例
管理节点(Redis/ValKey 版)
管理多可用区
备份与恢复
账号管理
参数配置
慢查询
访问管理
网络与安全
监控与告警
事件管理(Redis/ValKey 版)
数据迁移
Redis 版全球复制
数据库审计
诊断优化
Sentinel 模式
开发准则
命名规则
基本使用准则
Key 与 Value 设计原则
命令使用准则
客户端程序设计准则
连接池配置
命令参考
命令参考概览
Redis 版与 Valkey 版命令兼容性
大版本命令使用差异
Proxy 架构与直连模式的使用差异
命令更多操作(Redis/Valkey 版)
Memcached 版命令兼容性
实践教程
基于 Spring Boot 搭建 Redis 客户端监控
Redis 客户端连接配置策略与实践
集群架构全局 SCAN 使用指南
实例安全下线
热 Key 与 大 key
可用区迁移方案
故障处理
连接异常
Redisson 客户端超时重连异常分析及解决方案
性能排查与调优
API 文档
History
Introduction
API Category
Making API Requests
Instance APIs
Parameter Management APIs
Other APIs
Backup and Restoration APIs
Region APIs
Monitoring and Management APIs
Log APIs
Data Types
Error Codes
常见问题
使用常见问题
连接登录问题
购买相关问题
相关协议
服务等级协议
Terms of Service
词汇表
联系我们

命令使用准则

PDF
聚焦模式
字号
最后更新时间: 2024-11-05 09:39:24

关注 O(N) 命令中的 N

hgetall、lrange、smembers、zrange、sinter 等命令建议不要过多地使用,当使用时,需要明确 N 的值。
Redis 中的 hscan、sscan 和 zscan 命令可以用于遍历哈希表、集合和有序集合。这些命令可以通过迭代器逐步扫描数据集中的元素,而不会像 hgetall、smembers 和 zrange 那样一次性返回所有元素。在实际使用中,建议在使用这些命令时指定合适的 COUNT 参数,以避免一次性返回过多的元素导致 Redis 的性能下降。通常情况下,每次遍历返回1000个元素左右是比较合适的选择。但是具体的数量限制还取决于 Redis 的实际环境和硬件配置,需要根据实际情况进行调整。

禁用命令

禁止线上使用 keys、flushall、flushdb 等,因为 CRedis 是单线程工作,这些命令执行时间过长,易导致命令执行阻塞。建议通过 scan 的方式渐进式处理,或通过参数 disable-command-list 配置禁用命令。
FLUSHDB 和 FLUSHALL:这两个命令可以清空 Redis 中的所有数据,因此在生产环境中应该避免使用。
KEYS:此命令可以返回与指定模式匹配的所有键,但由于它会阻塞 Redis 服务器,因此在生产环境中不建议使用。
RANDOMKEY:此命令可以随机返回一个键,但由于它会阻塞 Redis 服务器,因此在生产环境中不建议使用。
INFO:此命令可以返回 Redis 服务器的各种统计信息和配置选项,但由于它会阻塞 Redis 服务器,因此在生产环境中不建议使用。
CONFIG:此命令可以用于修改 Redis 服务器的配置选项,但由于它可能会导致服务器崩溃,因此在生产环境中应该谨慎使用。
SHUTDOWN:此命令可以关闭 Redis 服务器,但由于它会导致数据丢失,因此在生产环境中应该避免使用。
BGREWRITEAOF 和 BGSAVE:这两个命令可以用于异步地重写 AOF 文件和 RDB 快照文件,但由于它们可能会消耗大量的系统资源,因此在生产环境中应该谨慎使用。

合理使用 Select

Redis 多数据库采用递增数字的命名方式,在使用过程中可随时使用 SELECT 更换数据库。数据库索引号 Index 用数字值指定,以 0 作为起始索引值。
Redis 支持多数据库操作方式,在标准版场景客户可以根据多 DB 进行数据区分。但是 Redis 本身是单线程处理数据,即使使用多 DB,业务请求也会受到其他DB 操作影响。在集群版场景,建议客户优先使用0号 DB,非0 DB 不支持扩容。并且在客户请求时,可以不执行 select 0,减少非必要交互。

适当使用批量操作

应用侧访问 Redis,其中较多一部分耗时是网络 RTT。如果应用需要做大量的 get 或者 set,可以适当使用 mget、mset 进行批量数据操作以降低网络 RTT 开销。使用 mget、mset 一般元素个数不超过500,mget 和 mset 的操作 Key 越大时,后端如果出现抖动或者扩容时,对业务影响也会更大。
原生命令:例如 mget、mset。
非原生命令:可以使用 pipeline 提高效率。
说明:
注意控制一次批量操作的元素个数,建议在500以内,同时注意批量操作的元素中是否有 Big key。
原生是原子操作,pipeline 是非原子操作。
pipeline 可以打包不同的命令,原生不支持。
pipeline 需要客户端和服务端同时支持。

不建议使用事务

Redis 的事务功能较弱,不支持回滚,而且集群版本要求一次事务操作的 Key 必须在同一个 Slot 上。

集群版使用 Lua 的特殊要求

所有 Key 都应该由 KEYS 数组来传递。redis.call/pcall 里面调用的 Redis 命令,Key 的位置必须是 KEYS array, 否则直接返回如下错误信息:error,"-ERR bad lua script for redis cluster,all the keys that the script uses should be passed using the KEYS array"
单个 Lua 脚本操作的 Key 必须在同一个节点上,否则直接返回如下错误信息:error, "-ERR eval/evalsha command keys must in same slotrn"

关于 monitor 命令

Monitor 本身对 Redis 的性能有一定的影响。日常使用时,只用于分析命令的执行,不用于监控。若不进行相关问题排查和分析时,不建议开启。必要情况下,使用 Monitor 命令时,需要注意及时停止,不要长时间开启。

禁止将 Redis 作为消息队列

严禁将 Redis 当作消息队列使用,否则可能会有容量、网络、效率、功能方面的多种问题。

帮助和支持

本页内容是否解决了您的问题?

填写满意度调查问卷,共创更好文档体验。

文档反馈