17、Redis6.0新功能

news2024/11/24 12:36:25

文章目录

  • 17、Redis6.0新功能
    • 17.1 ACL
      • 17.1.1 简介
      • 17.1.2 命令
    • 17.2 IO多线程
      • 17.2.1 简介
      • 17.2.2 原理架构
    • 17.3 工具支持 Cluster
    • 17.4 Redis新功能持续关注


Redis 6 入门到精通-讲师:王泽

世态炎凉,世界并不善良

17、Redis6.0新功能

17.1 ACL

17.1.1 简介

Redis ACL是Access Control List(访问控制列表)的缩写,该功能允许根据可以执行的命令和可以访问的键来限制某些连接。

在Redis 5版本之前,Redis 安全规则只有密码控制 还有通过rename 来调整高危命令比如 flushdb , KEYS* , shutdown 等。

Redis 6 则提供ACL的功能对用户进行更细粒度的权限控制 :

(1)接入权限:用户名和密码
(2)可以执行的命令
(3)可以操作的 KEY

参考官网

17.1.2 命令

1、使用acl list命令展现用户权限列表
(1)数据说明
在这里插入图片描述

2、使用acl cat命令

(1)查看添加权限指令类别

127.0.0.1:6379> acl cat
 1) "keyspace"
 2) "read"
 3) "write"
 4) "set"
 5) "sortedset"
 6) "list"
 7) "hash"
 8) "string"
 9) "bitmap"
10) "hyperloglog"
11) "geo"
12) "stream"
13) "pubsub"
14) "admin"
15) "fast"
16) "slow"
17) "blocking"
18) "dangerous"
19) "connection"
20) "transaction"
21) "scripting"

(2)加参数类型名可以查看类型下具体命令

127.0.0.1:6379> acl cat string
 1) "getset"
 2) "setrange"
 3) "strlen"
 4) "incrbyfloat"
 5) "setnx"
 6) "getex"
 7) "substr"
 8) "set"
 9) "getdel"
10) "decrby"
11) "stralgo"
12) "psetex"
13) "get"
14) "msetnx"
15) "incrby"
16) "mset"
17) "setex"
18) "append"
19) "incr"
20) "mget"
21) "decr"
22) "getrange"

3、使用acl whoami命令查看当前用户

127.0.0.1:6379> acl whoami
"default"

4、使用aclsetuser命令创建和编辑用户ACL

(1)ACL规则
下面是有效ACL规则的列表。某些规则只是用于激活或删除标志,或对用户ACL执行给定更改的单个单词。其他规则是字符前缀,它们与命令或类别名称、键模式等连接在一起。

ACL规则

类型参数说明
启动和禁用用户on激活某用户账号
启动和禁用用户off禁用某用户账号。注意,已验证的连接仍然可以工作。如果默认用户被标记为off,则新连接将在未进行身份验证的情况下启动,并要求用户使用AUTH选项发送AUTH或HELLO,以便以某种方式进行身份验证。
权限的添加删除+<command>将指令添加到用户可以调用的指令列表中
权限的添加删除-<command>从用户可执行指令列表移除指令
权限的添加删除+@<category>添加该类别中用户要调用的所有指令,有效类别为@admin、@set、@sortedset…等,通过调用ACL CAT命令查看完整列表。特殊类别@all表示所有命令,包括当前存在于服务器中的命令,以及将来将通过模块加载的命令。
权限的添加删除-@<actegory>从用户可调用指令中移除类别
权限的添加删除allcommands+@all的别名
权限的添加删除nocommand-@all的别名
可操作键的添加或删除权限的添加删除~<pattern>添加可作为用户可操作的键的模式。例如~*允许所有的键

(2)通过命令创建新用户默认权限

127.0.0.1:6379> acl setuser user1
OK
127.0.0.1:6379> acl list
1) "user default on nopass ~* &* +@all"
2) "user user1 off &* -@all"

在上面的示例中,我根本没有指定任何规则。

如果用户不存在,这将使用just created的默认属性来创建用户。

如果用户已经存在,则上面的命令将不执行任何操作。

(3)设置有用户名、密码、ACL权限、并启用的用户

127.0.0.1:6379> acl setuser user2 on >password ~cached:* +get
OK

(4)切换用户,验证权限

127.0.0.1:6379> auth user2 password
OK
127.0.0.1:6379> acl whoami
(error) NOPERM this user has no permissions to access one of the keys used as arguments
# 提示没有权限
127.0.0.1:6379> get foo
(error) NOPERM this user has no permissions to run the 'acl' command or its subcommand
# 只能对cached:开口的key做出get操作
127.0.0.1:6379> get cached:1211
(nil)
127.0.0.1:6379> set cached:1211 1211
(error) NOPERM this user has no permissions to run the 'set' command or its subcommand

17.2 IO多线程

17.2.1 简介

Redis6终于支撑多线程了,告别单线程了吗?

IO多线程其实指客户端交互部分的网络IO交互处理模块多线程,而非执行命令多线程。

Redis6执行命令依然是单线程。

17.2.2 原理架构

Redis 6 加入多线程,但跟 Memcached 这种从 IO处理到数据访问多线程的实现模式有些差异。

Redis 的多线程部分只是用来处理网络数据的读写和协议解析,执行命令仍然是单线程。

之所以这么设计是不想因为多线程而变得复杂,需要去控制 key、lua、事务,LPUSH/LPOP 等等的并发问题。

整体的设计大体如下:

在这里插入图片描述

另外,多线程IO默认也是不开启的,需要再配置文件中配置

# 设置线程数量
io-threads 4
# 是否开启
io-threads-do-reads  yes 

在这里插入图片描述

17.3 工具支持 Cluster

之前老版Redis想要搭集群需要单独安装ruby环境,Redis 5 将 redis-trib.rb 的功能集成到 redis-cli ,不需要在额外安装,用redis-cli就可以实现redis集群快速搭建。

另外官方 redis-benchmark 工具开始支持 cluster 模式了,通过多线程的方式对多个分片进行压测。

在这里插入图片描述

[root@centos7-101 ~]# redis-benchmark --help
Usage: redis-benchmark [-h <host>] [-p <port>] [-c <clients>] [-n <requests>] [-k <boolean>]

 -h <hostname>      Server hostname (default 127.0.0.1)
 -p <port>          Server port (default 6379)
 -s <socket>        Server socket (overrides host and port)
 -a <password>      Password for Redis Auth
 --user <username>  Used to send ACL style 'AUTH username pass'. Needs -a.
 -c <clients>       Number of parallel connections (default 50)
 -n <requests>      Total number of requests (default 100000)
 -d <size>          Data size of SET/GET value in bytes (default 3)
 --dbnum <db>       SELECT the specified db number (default 0)
 --threads <num>    Enable multi-thread mode.
 --cluster          Enable cluster mode.
 --enable-tracking  Send CLIENT TRACKING on before starting benchmark.
 -k <boolean>       1=keep alive 0=reconnect (default 1)
 -r <keyspacelen>   Use random keys for SET/GET/INCR, random values for SADD,
                    random members and scores for ZADD.
  Using this option the benchmark will expand the string __rand_int__
  inside an argument with a 12 digits number in the specified range
  from 0 to keyspacelen-1. The substitution changes every time a command
  is executed. Default tests use this to hit random keys in the
  specified range.
 -P <numreq>        Pipeline <numreq> requests. Default 1 (no pipeline).
 -q                 Quiet. Just show query/sec values
 --precision        Number of decimal places to display in latency output (default 0)
 --csv              Output in CSV format
 -l                 Loop. Run the tests forever
 -t <tests>         Only run the comma separated list of tests. The test
                    names are the same as the ones produced as output.
 -I                 Idle mode. Just open N idle connections and wait.
 --help             Output this help and exit.
 --version          Output version and exit.

Examples:

 Run the benchmark with the default configuration against 127.0.0.1:6379:
   $ redis-benchmark

 Use 20 parallel clients, for a total of 100k requests, against 192.168.1.1:
   $ redis-benchmark -h 192.168.1.1 -p 6379 -n 100000 -c 20

 Fill 127.0.0.1:6379 with about 1 million keys only using the SET test:
   $ redis-benchmark -t set -n 1000000 -r 100000000

 Benchmark 127.0.0.1:6379 for a few commands producing CSV output:
   $ redis-benchmark -t ping,set,get -n 100000 --csv

 Benchmark a specific command line:
   $ redis-benchmark -r 10000 -n 10000 eval 'return redis.call("ping")' 0

 Fill a list with 10000 random elements:
   $ redis-benchmark -r 10000 -n 10000 lpush mylist __rand_int__

 On user specified command lines __rand_int__ is replaced with a random integer
 with a range of values selected by the -r option.

17.4 Redis新功能持续关注

Redis6新功能还有:

1、RESP3新的 Redis 通信协议:

优化服务端与客户端之间通信

2、Client side caching客户端缓存:

基于 RESP3 协议实现的客户端缓存功能。为了进一步提升缓存的性能,将客户端经常访问的数据cache到客户端。

减少TCP网络交互。

3、Proxy集群代理模式:

Proxy 功能,让 Cluster 拥有像单实例一样的接入方式,降低大家使用cluster的门槛。

不过需要注意的是代理不改变 Cluster 的功能限制,不支持的命令还是不会支持,比如跨 slot 的多Key操作。

4、Modules API

Redis 6中模块API开发进展非常大,因为Redis Labs为了开发复杂的功能,从一开始就用上Redis模块。

Redis可以变成一个框架,利用Modules来构建不同系统,而不需要从头开始写然后还要BSD许可。

Redis一开始就是一个向编写各种系统开放的平台。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/80156.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何利用场追迹控制衍射的包含

1. 摘要 VirtualLab Fusion包括一系列建模方法便于用户可以地调整光学仿真的精度级别和时间。不仅如此&#xff0c;这种功能还有助于隔离物理原因产生的不同影响。在本示例中&#xff0c;我们提出了一个清晰的工作流程配置一个仿真&#xff0c;以便在物理光学模拟中考虑或忽略衍…

MOSFET 和 IGBT 栅极驱动器电路的基本原理学习笔记(六)变压器耦合栅极驱动

变压器耦合栅极驱动 1.单端变压器耦合栅极驱动电路 2.双端变压器耦合栅极驱动 在高电压栅极驱动 IC 出现以前&#xff0c;使用栅极驱动变压器是唯一一种在离线或类似高电压电路中驱动高侧开关的可行解决方案。 现在&#xff0c;两种解决方案同时存在并且各有利弊&#xff0c;…

基础数据结构线性表

基础数据结构 1.基础概念 数据结构是一种具有一定逻辑关系&#xff0c;在计算机中应用某种存储结构&#xff0c;并且封装了相应操作的数据元素的集合。它包含三方面的内容&#xff0c;逻辑关系、存储关系以及操作。 一般而言&#xff0c;数据结构的选择首先会从抽象数据类型…

springboot整合Canal实时同步数据库表

一、Canal介绍 1、应用场景 在前面的统计分析功能中&#xff0c;我们采取了服务调用获取统计数据&#xff0c;这样耦合度高&#xff0c;效率相对较低&#xff0c;目前我采取另一种实现方式&#xff0c;通过实时同步数据库表的方式实现&#xff0c;例如我们要统计每天注册与登…

语雀的技术栈与富文本编辑讨论分享

目录前言什么是语雀富文本编辑器的发展历程语雀结构简析语雀核心语雀渲染器语雀前端技术业务层编辑器语雀编辑器演化过程语雀研发流程关于语雀的讨论为何文档编写不是一种标准化的中台能力内容类产品典型类别业务所需编辑器开发成本如何&#xff1f;文本编辑器代码编辑器公式编…

[附源码]Python计算机毕业设计SSM基于的网上拍卖系统(程序+LW)

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

13.javase_动漫美女拼图实战

资料地址&#xff1a;https://cowtransfer.com/s/4573fe572f9c4a 项目效果&#xff1a; 练习编程逻辑思维&#xff0c;提高和锻炼自己能力。 一. 绘制游戏界面 1.1窗体绘制 第一个方法&#xff1a;initFrame()&#xff0c;用于窗体的基本设置 public void initFrame() { thi…

每天一个面试题:悲观锁、乐观锁,对比Hashtable和concurrentHashMap

每天一个面试题&#xff1a;悲观锁、乐观锁Hashtable和concurrentHashMap总结开始全新的学习&#xff0c;沉淀才会有产出&#xff0c;一步一脚印&#xff01; 面试题系列搞起来&#xff0c;这个专栏并非单纯的八股文&#xff0c;我会在技术的基础上&#xff0c;Debug解析&#…

戴维南定理(Thevenin‘s theorem)

戴维南定理&#xff1a;含独立电源的线性电阻单口网络N&#xff0c;就端口特性而言&#xff0c;可以等效为一个电压源和电阻串联的单口网络。电压源的电压等于单口网络在负载开路时的电压uoc&#xff1b;电阻R0是单口网络内全部独立电源为零值时所得单口网络N0的等效电阻。 例子…

JavaScript基本语法

1.JavaScript词法结构 所谓词法结构是指一套基础性规则&#xff0c;用来描述如何使用这门语言来编写程序&#xff0c;包括如下几项&#xff1a; 字符集unicode 区分大小写 &#xff08;true和TRUE&#xff09; 忽略空白字符&#xff08;空格、制表符和换行符&#xff09…

UG鼠标和键盘操作

UG鼠标和键盘操作角色操作鼠标操作选择放大/缩小旋转平移确认适合窗口正视于X/Y/Z视图显示样式九宫图设置键盘操作ESCF8角色操作 角色包含了用户的自定义配置&#xff0c;包括内容、演示、快捷键、工具栏等&#xff0c;通过&#xff1a;菜单-首选项-用户界面-角色 进行导入导出…

【C语言程序设计】实验 8

目录 1. 整数排序 2. 二维数组按每行数据之和升序 3. 字符串排序 4. 二维数组各行元素之和 5. 二位整数数组交换两行 6. 插入排序 7. 10进制转2进制&#xff0c;8进制和16进制数&#xff08;数组&#xff09; 1. 整数排序 【问题描述】从键盘输入n(0<n<21)个整…

微服务同时接入多个Kafka

准备工作 自己搭建一个Kafka 从官方下载Kafka&#xff0c;选择对应Spring Boot 的版本&#xff0c;好在Kafka支持的版本范围比较广&#xff0c;当前最新版本是3.2.1,支持2.12-3.2.1 范围的版本&#xff0c;覆盖了Spring Boot 2.0x-Spring Boot 3.0.x。Apache Kafka 解压安装 …

CMake中target_compile_definitions的使用

CMake中的target_compile_definitions命令用于向target添加编译定义&#xff0c;其格式如下&#xff1a; target_compile_definitions(<target><INTERFACE|PUBLIC|PRIVATE> [items1...][<INTERFACE|PUBLIC|PRIVATE> [items2...] ...]) 指定在编译给定的<…

网络原理初识

网络原理初识 文章目录网络原理初识网络发展历程独立模式网络互联IP地址端口号网络协议OSI七层TCP/ IP协议封装与分用封装一.应用层二.传输层三.网络层四.数据链路层五.物理层分用六.物理层七.数据链路层八.网络层九.传输层十.应用层网络发展历程 独立模式 一开始电脑之间是相…

【InnoDB ClusterSet】快速部署

快速部署 InnoDB ClusterSet 文章目录快速部署 InnoDB ClusterSet前言前期准备架构设计部署过程1. 使用配置账号通过 MySQL Shell 连接到 InnoDB Cluster 任一成员2. 为主 InnoDB Cluster 实例设置变量3. 创建以当前集群作为主集群的 ClusterSet4. 为每个独立服务器实例添加配置…

382. 链表随机节点-哈希表法

382. 链表随机节点-哈希表法 给你一个单链表&#xff0c;随机选择链表的一个节点&#xff0c;并返回相应的节点值。每个节点 被选中的概率一样 。 实现 Solution 类&#xff1a; Solution(ListNode head) 使用整数数组初始化对象。 int getRandom() 从链表中随机选择一个节点…

Vue Element动态生成的表单如何用 el-form 校验

<el-form :model"dynamicValidateForm" ref"dynamicValidateForm" label-width"100px" class"demo-dynamic"><el-form-item prop"email" label"邮箱" :rules"[{ required: true, message: 请输入…

研究良久,终于发现了他代码写的快且bug少的原因

前言 读者诸君&#xff0c;今日我们适当放松一下&#xff0c;不钻研枯燥的知识和源码&#xff0c;分享一套高效的摸鱼绝活。 我有一位程序员朋友&#xff0c;当时在一个团队中开发Android应用&#xff0c;历经多次考核后发现&#xff1a; 在组内以及与iOS团队的对比中: 他的任…

java项目请求url存在特殊字符 400错误

java项目请求url特殊字符 400错误 1 现象 请求路径带特殊字符&#xff0c;就会400错误&#xff0c;这就泄露了服务器版本和报错信息&#xff0c;无疑是敏感信息泄露&#xff0c;实属安全漏洞。 补充项目环境&#xff1a;springmvc、tomcat 8.5.59 2 原因 经排查和报错信息…