Redis6.0新特性简述和验证分析——ACL权限控制、TLS加密管理、多线程IO

本文介绍了Redis6.0的三大新特性:ACL权限控制增强了数据安全性,TLS加密管理提供了安全的访问控制,多线程IO提高了性能。ACL允许细粒度的权限分配,TLS支持加密连接,多线程IO则提升了并发处理能力。文章详细探讨了这些功能的配置、使用和性能影响。
摘要由CSDN通过智能技术生成

目录

1. 简介

2. 新功能测试验证

2.1 新功能——ACL权限控制

2.1.1 ACL简介

2.1.2 ACL 参数解析

2.1.3 ACL 赋权配置及示例

(1)ACL权限持久化方式

(2)ACL权限持久化配置示例

2.1.4 ACL部分源码简析

(1)ACL初始化

(2)ACL权限加载

(3)ACL用户操作

2.2 新功能——TLS加密管理

2.2.1 TLS简介

2.2.2 TLS 配置与示例

(1)TLS 编译示例

2.2.3 Redis TLS使用示例

2.2.4 TLS部分源码简析

(1)TLS初始化

(2)TLS读写

2.2.5 TLS局限性

2.3新功能——多线程IO

2.3.1 多线程IO简介

2.3.2 多线程IO实现及配置示例

(1)多线程IO流程

(2)多线程IO参数解析

2.3.3多线程IO使用及性能对比

(1)Redis版本间对比测试

(2)Redis CPU间性能对比测试

2.3.4 多线程IO部分源码简析

(1)多线程IO初始化

(2)多线程IO任务处理

3. 小结


1. 简介

Redis(Remote Dictionary Server),即远程字典服务,是一个使用 C编写的开源(BSD许可)、包含多种数据结构、支持网络、基于内存、可选持久性的键值对存储数据库,是现在最受欢迎的NoSQL数据库之一。依赖于Redis的高性能、多数据类型等特性,Redis应用场景十分广泛,可用于游戏缓存应用、互联网缓存应用、电商高并发应用及其他缓存加速访问应用,能有效承载巨大的读写压力,轻松实现高并发访问。

Redis最新版本为Redis6.X,其中有Redis6.0.X及Redis6.2.X两个分支。Redis6.0中已于2020年上半年发布,6.0版本最新已发布至6.0.15。Redis6.0带来了诸多新功能:

  • 新增ACL权限控制,可实现账号的权限管控;
  • 新增TLS加密管理,可实现Redis加密访问控制;
  • 多线程IO,可实现单个Redis实例更高性能。

除此之外,Redis6.0还有RESP3协议、客户端缓存加速及redis-benchmark、redis-cli优化等新功能。

本文主要对Redis6.0的ACL权限管控、TLS加密管理及多线程IO进行了测试验证和解析。

2. 新功能测试验证

2.1 新功能——ACL权限控制

2.1.1 ACL简介

Redis ACL 是Access Control List(访问控制列表)的缩写,该功能允许对访问 Redis 的连接做一些可执行命令和可访问 KEY 的限制。它的工作方式是,在连接之后,要求客户端进行身份验证,以提供用户名和有效密码,如果身份验证成功,该客户端连接与给定用户绑定,并具有该用户的访问权限。

Redis6.0版本之前,用户只有一个default用户,同一Redis实例所有读写操作都共享此用户,难免出现误操作删除数据或泄露数据情况。虽然可以使用rename命令禁用部分敏感操作,但也同时意味着需要进行敏感操作时,将有额外操作需要进行,权限管控复杂且不完善。在Redis6.0之后,通过ACL(权限管理)功能,可以设置不同的用户并对其授权命令或数据权限。这一功能,可以有效降低用户误操作导致数据丢失或数据泄露风险。其中,密码由SHA256进行加密。

Tips:linux下sha256加密方式:echo -n passowrd | sha256sum

2.1.2 ACL 参数解析

本章节简要说明ACL常用命令,以及笔者使用时遇到的问题和需关注的地方。

常用的命令如下:

参数 说明
CAT 查看类别
DELUSER 删除用户
GENPASS 创建密码
GETUSER 获得用户
HELP 帮助
LIST 查看用户详情
LOAD 加载aclfile
SAVE 保存至aclfile
SETUSER 设置用户
USERS 查看用户
WHOAMI 查看当前用户
LOG 显示日志

1)ACL CAT示例:

ACL将所有命令分为21子类,ACL可以较细粒度地进行权限划分,但部分命令同时处于不同的权限子类中,设置多个子类权限时,需关注这些命令权限问题。

2)ACL LIST 示例:

通过ACL生成的用户以如下default、test账号为例,进行简要说明:

参数 说明
user test 代表用户是test
on 代表用户是启用的,如果是off,代表用户是禁用的,在off状态下,登录会失败;
#e...cc7 是sha256加密后的密码串
~* ~为添加指定模式的键(~*代表allkeys)
+ 代表用户可以使用该命令,如果是 - ,代表用户无法使用该命令
@ 用户可以使用某类别命令,类别可以通过acl cat获得

3)ACL SETUSER示例:

ACL SETUSER时,可通过“>”符号分次设置多个密码且密码均为有效;可通过“<”符号使密码无效化,不建议同一账号设置过多密码。当密码无法找回时,可先删除账号再建立相同权限用户方式更新密码,以防有效密码过多导致密码泄露进而导致数据泄露。

对default用户的权限设置需谨慎。笔者进行测试时,设置了一个与default完全相同的admin用户并将default用户权限缩小,因操作原因出现了权限不可用情况,尽可能保留default权限不删减。

普通用户赋权后,可通过auth username password方式登录普通账号。此方式登录需使用6.0及以上版本redis-cli客户端,低版本客户端无法识别,多版本混用需注意。

笔者测试时,一个实例中生成7000+普通账号,redis运行正常权限管控正常。示例如下:

acl setuser test1 >Admin123 ~* +get #账号test1,密码Admin123
acl setuser test2 >Admin123 ~* +set
acl setuser test2 >Admin123 ~* * +get +set
...
acl setuser test7000 >Admin123 ~* +@all
acl list #7000个用户显示正常
auth test7000 Admin123 #登陆正常

2.1.3 ACL 赋权配置及示例

(1)ACL权限持久化方式

通过上述的ACL SETUSER方式,对用户的账号进行了赋权后可进行持久化。Redis 实现ACL权限持久化的方式主要有两种:

① redis.conf方式:直接将账号密码持久化保存在redis.conf中;

② aclfile方式:将账号密码保存至users.acl文件中,并把users.acl 路径写入redis.conf。

两种方式中,更推荐aclfile方式。因为redis.conf方式加载配置需要重启Redis,而aclfile方式执行acl load即可。

此外,我们可以在客户端对账户密码进行操作,如果使用redis.conf方式,可通过config rewrite持久化;如果使用aclfile方式,可使用acl save进行持久化。

对比项 redis.conf方式 aclfile方式
加载配置 重启Redis 执行acl load
持久化配置 执行config rewrite 执行acl save

(2)ACL权限持久化配置示例

两种持久化方式的示例如下:

① redis.conf方式

cat redis.conf | grep "~*"可得:

② aclfile方式

  • cat users.acl,查看账号密码权限:
  • 10
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值