热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

慕课网20210129Redis6直播笔记上(acl/客户端缓存/多级缓存)

慕课网2021-01-29Redis6直播笔记-上(acl客户端缓存多级缓存)-慕课网2021-01-29Redis直播笔记-上(acl客户端缓存多级缓存)redis6安装注意点我
慕课网2021-01-29 Redis直播笔记 - 上(acl/客户端缓存/多级缓存)

redis6安装注意点

我们课程里忽略了,就不去安装了,仅仅只提供安装文档,redis6的安装其实和redis5安装差不多,只是需要注意gcc的版本需要提高,不然编译会出错。
参考慕课网手记地址:https://www.imooc.com/article...

acl权限策略

基础概念

不知道大家有没有听过acl,zookeeper中也有,acl就是access control list,权限控制列表,和平时接触的管理系统的权限是一样的,可以限制不同角色的操作权。

在redis6中,我们可以设置不同的用户,对他们进行授权命令,控制可读可写,限制访问缓存key的前缀等。这样可以更加提高redis6的数据安全性。由于是对于一些公司的生产库,可以让很多人去连接查看,就特别有用。但是一般来说都是只有运维或者redis工程师才能访问的。

大家想一想,早期版本通过requirepass设置密码,这个不去设置,你的服务器很有可能被攻击,这个我们架构班的同学有遇到过,被勒索比特币,或者成为肉鸡挖矿。所以这个密码肯定要设置。

ACL 存储模式

acl的权限的存储模式可以配置到redis.conf中,也可以外部文件aclfile,我个人偏好后者,这也是官方推荐的方式。(因为aclfile文件发生修改只需要重载acl即可,而conf方式需要重启redis)

我们可以直接在命令行中创建用户去权限,然后再把用户保存到conf或者aclfile中。命令如下:

# 将ACL权限持久化到redis.conf
config rewrite
 
# 将ACL权限持久化到users.acl
acl save

实操演练

  • 开启aclfile,指定路径

  • 创建权限acl文件(注意:需要他前创建acl空文件,否则重启redis会报错)

    touch /usr/local/redis/users.acl

重启redis并且进入客户端

查看进程

./redis-cli shutdown
./redis-server redis.conf
./redis-cli
auth default    # 默认用户无密码

或者

./redis-cli     # 可以直接进入

ACL的使用

  • 查看acl命令帮助(学习一个新东西,基本上他们都会有帮助文档的。像在linux中,大多都是help,就有一大堆的命令提示,后面还有英文的解释,这是最直接的学习方式)
acl help

相信但凡有一些经验的,这些其实都应该看得懂

1)ACL:命令参数,要以 ACL 开头
2)LOAD:重新加载acl文件,手动修改acl文件后,需要让redis服务重新加载,才能生效
3)SAVE:保存当前用户权限配置到acl文件
4)LIST:展示用户权限的详细信息
5)USERS:展示所有用户名
6)SETUSER:设置或者修改用户
7)GETUSER:获得用户全新信息
8)DELUSER:删除用户以及权限
9)CAT:展示所有权限分类,不同的操作归类不同
10)CAT <某分类名>:展示某分类具体包含哪些操作
11)GENPASS:生成密码
12)WHOAMI:当前登录者
13)LOG:日志

  • 默认没有配置的时候,会有一个default用户,on代表开启,off代表禁用。default为用户名,后面的内容为ACL规则描述,~* 表示所有key,+@all 表示所有命令。所以这个表示用户default开启状态,并且,没有密码而且可以访问所有命令以及所有数据。

  • 获得所有的用户名

  • 当前登录用户是谁

  • 查看命令的分类:

    • acl cat:显示所有的命令类别

* 查某个类别下有哪些操作,就比如如下危险操作,这些命令都是危险的,对当前redis库可能会造成影响

创建用户

现在我们来创建一下用户

  • 创建或者修改用户,用户名区分大小写,但是不建议把同样的用户名分为大小写不同的两个

    # 新增默认所有权限的用户
    ACL SETUSER imooc on >123456 ~* +@all
    # 新增用户itzixi,密码123456,只能允许访问order前缀的key,可以使用set和get和acl命令
    ACL SETUSER itzixi on >123456 ~order* +get +set +acl
  • 这个时候打开acl文件是空的,需要执行保存命令
  • 保存命令到aclfile

    acl save

切换用户进行测试

  • 切换到itzixi用户,并且测试,他只能set和get,order前缀的key

* mget不可用

为用户增加类别权限访问

  • 为用户itzixi新增某一个类别下的所有操作,比如这个类别就是read类别的所有读操作:

    ACL SETUSER itzixi +@read

    • 多了一个read类别

* 这个时候可以使用mget操作了:

ACL LOAD:我们也可以直接在aclfile中修改或新增ACL权限,修改之后不会立刻生效,我们可以在redis命令行中执行acl load将该aclfile中的权限加载至redis服务中。

客户端缓存 Client Side Cache


这是他的官网地址,有兴趣可以看看:
https://redis.io/topics/clien...

我们应该都知道,redis作为缓存中间件,目的是为了减少热点数据对数据库的压力,并且提供更快的访问速度,redis的性能要比普通数据库快很多。

但是redis也有瓶颈上线,因为请求到redis一定会有网络io的损耗,并且也有数据的序列化以及反序列化的等等的一些开销,所以如果在本地把热数据再做一次缓存的话(Guava Cache 进程缓存,可能会有不一致的情况),那么可以使得请求性能更好,加速访问,提升客户端的响应速度了,因为数据延迟就降低并且减少了很多嘛。

大家可以想一下,什么场景下可以使用?
其实只要满足大量的请求,不怎么更改的数据,都可以。比如数据字典,我们的项目中涉及到一些超大型物流车的参数信息,这些基本上不会变动的,除非有相关的一些政策改变,那么有些参数信息就要变更,要不然直接存本地缓存是非常舒服的。

可以看一下这图,他本质上就是基于redis-server服务端来维系和应用后端的关系,用的pub/sub发布订阅的通知机制,如果服务端缓存发生更改,那么可以向应用后端来推送,让其更新本地缓存。
其中应用是指的我们的部署的项目,调用端。

了解一下:在Reds6之前的版本,使用的是RESP2协议,现在是RESP3,这个是REdisSerializationProtocol,是 Redis 服务端与客户端之间通信的协议。

实现客户端缓存的方式 - 默认模式

Redis-server 服务端会记录客户端访问了哪些key,这客户端id与key有唯一的映射关系,当其中的key发生变更时给客户端发送失效信息。这种模式会占用服务端所在服务器的内存。

实现客户端缓存的方式 - 广播机制

客户端订阅访问过的key的前缀,当符合的key发生变更就会被redis-server通知(如果变更的key没有被客户端缓存,也会通知),由于服务器端不记录客户端访问的key,所以不会过多占用redis-server端的服务器内存;

在这种模式下,服务端维护的是前缀key,而不是默认模式的所有key,所以这样对于内存的占用不会很高,只要修改匹配的前缀key,那么订阅的客户端都会收到失效key的通知。只不过由于定订阅的是前缀,他会收到很多的无效通知。

在广播模式下,只要符合客户端设置的key前缀的key发生新增、修改、删除、还有过期、淘汰等动作,即使该key没有被该客户端缓存,也会收到key的失效消息;

多级缓存

直播过程中提到了多级缓存架构,可以通过这图了解一下,更具体的可以做到4层,nginx可以做两层:


推荐阅读
  • eclipse学习(第三章:ssh中的Hibernate)——11.Hibernate的缓存(2级缓存,get和load)
    本文介绍了eclipse学习中的第三章内容,主要讲解了ssh中的Hibernate的缓存,包括2级缓存和get方法、load方法的区别。文章还涉及了项目实践和相关知识点的讲解。 ... [详细]
  • t-io 2.0.0发布-法网天眼第一版的回顾和更新说明
    本文回顾了t-io 1.x版本的工程结构和性能数据,并介绍了t-io在码云上的成绩和用户反馈。同时,还提到了@openSeLi同学发布的t-io 30W长连接并发压力测试报告。最后,详细介绍了t-io 2.0.0版本的更新内容,包括更简洁的使用方式和内置的httpsession功能。 ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • Nginx使用AWStats日志分析的步骤及注意事项
    本文介绍了在Centos7操作系统上使用Nginx和AWStats进行日志分析的步骤和注意事项。通过AWStats可以统计网站的访问量、IP地址、操作系统、浏览器等信息,并提供精确到每月、每日、每小时的数据。在部署AWStats之前需要确认服务器上已经安装了Perl环境,并进行DNS解析。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • 本文介绍了adg架构设置在企业数据治理中的应用。随着信息技术的发展,企业IT系统的快速发展使得数据成为企业业务增长的新动力,但同时也带来了数据冗余、数据难发现、效率低下、资源消耗等问题。本文讨论了企业面临的几类尖锐问题,并提出了解决方案,包括确保库表结构与系统测试版本一致、避免数据冗余、快速定位问题等。此外,本文还探讨了adg架构在大版本升级、上云服务和微服务治理方面的应用。通过本文的介绍,读者可以了解到adg架构设置的重要性及其在企业数据治理中的应用。 ... [详细]
  • C语言注释工具及快捷键,删除C语言注释工具的实现思路
    本文介绍了C语言中注释的两种方式以及注释的作用,提供了删除C语言注释的工具实现思路,并分享了C语言中注释的快捷键操作方法。 ... [详细]
  • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
  • 本文介绍了PhysioNet网站提供的生理信号处理工具箱WFDB Toolbox for Matlab的安装和使用方法。通过下载并添加到Matlab路径中或直接在Matlab中输入相关内容,即可完成安装。该工具箱提供了一系列函数,可以方便地处理生理信号数据。详细的安装和使用方法可以参考本文内容。 ... [详细]
  • 基于事件驱动的并发编程及其消息通信机制的同步与异步、阻塞与非阻塞、IO模型的分类
    本文介绍了基于事件驱动的并发编程中的消息通信机制,包括同步和异步的概念及其区别,阻塞和非阻塞的状态,以及IO模型的分类。同步阻塞IO、同步非阻塞IO、异步阻塞IO和异步非阻塞IO等不同的IO模型被详细解释。这些概念和模型对于理解并发编程中的消息通信和IO操作具有重要意义。 ... [详细]
  • 本文介绍了高校天文共享平台的开发过程中的思考和规划。该平台旨在为高校学生提供天象预报、科普知识、观测活动、图片分享等功能。文章分析了项目的技术栈选择、网站前端布局、业务流程、数据库结构等方面,并总结了项目存在的问题,如前后端未分离、代码混乱等。作者表示希望通过记录和规划,能够理清思路,进一步完善该平台。 ... [详细]
  • 本文介绍了在Mac上搭建php环境后无法使用localhost连接mysql的问题,并通过将localhost替换为127.0.0.1或本机IP解决了该问题。文章解释了localhost和127.0.0.1的区别,指出了使用socket方式连接导致连接失败的原因。此外,还提供了相关链接供读者深入了解。 ... [详细]
  • 本文介绍了通过ABAP开发往外网发邮件的需求,并提供了配置和代码整理的资料。其中包括了配置SAP邮件服务器的步骤和ABAP写发送邮件代码的过程。通过RZ10配置参数和icm/server_port_1的设定,可以实现向Sap User和外部邮件发送邮件的功能。希望对需要的开发人员有帮助。摘要长度:184字。 ... [详细]
author-avatar
从1前2有3个4人_706
这个家伙很懒,什么也没留下!