redis中的big key问题

阅读数:94 评论数:0

跳转到新版页面

分类

应用软件

正文

一、big key

值很大时,在序列化/反序列化过程中花费的时间很大,因此当我们操作Big Key时,通常比较耗时,这就可能导致redis发生阻塞,从而降低redis性能。

1、几个对大key的特征描述

(1)一个String类型的的key,它的值为5MB

(2)一个List类型的key,它的列表数量为20000个

(3)一个ZSet类型的key,它的成员数量为10000个

(4)一个Hash格式的key,它的成员数量虽然只有1000个,但这些成员的value总大小为100MB

2、如何识别big key

(1)使用redis自带的命令redis-cli --bigkeys,可以在线扫描,不阻塞服务,但是内容不够精确

(2)开源工具redis-rdb-tools

这种方式是在redis实例上执行bgsave,bgsave会触发redis的快照备份,生成rdb持久化文件,然后对dump出来的rdb文件进行分析,找到其中的大key。

3、如何解决

(1)对大key进行拆分

(2)对大key进行清理

Redis自4.0起提供了UNLINK命令,该命令能够以非阻塞的方式缓慢逐步的清理传入的Key,通过UNLINK,你可以安全的删除大Key甚至特大Key。

(3)监控redis的内存、网络带宽、超时等指标

通过监控系统并设置合理的Redis内存报警阈值来提醒我们此时可能有大Key正在产生,如:Redis内存使用率超过70%,Redis内存1小时内增长率超过20%等。

(4)定期清理失效数据

(5)压缩value




相关推荐

一、redis-cli redis-cli,这个命令将打开redis终端。输入ping命令,如果有pong响应,说明正常启动。 用法:redis-cli [OPTIONS] [cmd [arg [ar

protected-mode是为了禁止公网访问redis,加强redis安全的。它启用的条件,有两个: (1)没有bind IP (2)没有设置访问密码。 <

一、单机模式 1、优点 (1)部署简单 (2)成本低 (3)高性能,因为不需要同步数据 2、缺点 (1)可靠性差 二、主从复制模式 主从模式配置很简单,只需要在从节点配置主节点的ip和端口号即可。

前置知识 1、requirepass验证客户端,对登录权限做限制,redis每个节点的requirepass可以是独立、不同的。 <p

在集群模式下,redis在接收到键任何命令时会先计算该键所在的槽,如果改键所在的槽位于当前节点,则直接执行命令,如果改键位于其它节点,则不执行该命令,返回重定向信息。比如hello这

1、sentinel不会存储数据。 2、客户端不会直接从redis中获取信息,而是从sentinel获取信息。 3、sentinel的默认端口是26379 <

redis-cli keys "s*" | xargs redis-cli del 另外还可以用-n指定操作的数据库编号 redis-cli -n 2 keys "s*" | xargs redis-

psubscribe pattern [pattern] 与subscribe一样,只是可以使用*匹配符匹配多个channel

ZSCORE key member 如果member元素不是有序集key的成员,或key不存在,返回nil

1、官方文档 The timeout will only be cleared by commands that delete or overwrite the contents of the key