【Redis7】了解Redis

1.常见数据库

     1.1.键值存储数据库

        如 Map 一样的key-value 对,典型代表就是 Redis。

     1.2.列存储数据库

        关系型数据库是典型的行存储数据库,按行存储的数据在物理层面占用的是连续存储空间,不适合海量数据存储。而按列存储则可实现分布式存储,适合海量存储。典型代表是 HBase。

     1.3.文档型数据库

        是 NoSQL 与关系型数据的结合,最像关系型数据库的 NoSQL。典型代表是 MongoDB。

     1.4.图形(Graph)数据库

        用于存放一个节点关系的数据库,例如描述不同人间的关系。典型代表是 Neo4J。

2.Redis 的用途

        Redis 在生产中使用最多的场景就是做数据缓存。即客户端从数据库中查询出的数据首先写入到 Redis 中,然后客户端再需要访问该数据,直接读取 Redis 中的,不仅减小了响应时间,而且降低了数据库的压力。

        缓存一般可划分为两类:实时同步缓存阶段性同步缓存。实时:数据库中数据更新后,Redis 缓存中的存放的相关数据会被立即清除,再次访问数据库重新写入Redis。阶段:Redis 缓存中的数据允许在一段时间内与数据库中的数据不完全 一致。而这个时间段就是这个缓存数据的过期时间。

3.Redis 特性

        性能极高:Redis 读的速度可以达到 11w 次/s,写的速度可以达到 8w 次/s。原因:1)Redis 的所有操作都是在内存中发生的;2) Redis 是用 C 语言开发的;3)Redis 源码精细。

        简单稳定:Redis 源码很少。

        持久化:Redis 内存中的数据可以进行持久化,其有两种方式:RDB 与 AOF。

        高可用集群:Redis 提供了高可用的主从集群功能,可以确保系统的安全性。

        丰富的数据类型:Redis 是一个 key-value 存储系统。支持存储的 value 类型很多,包括 String(字符串)、List(链表)、Set(集合)、Zset(sorted set --有序集合)和 Hash(哈希类型) 等,还有 BitMap(一般用于大数据量的二值性统计)、HyperLogLog(用于对数据量超级庞大的日志做去重统计)、Geospatial(地理空间,其主要用于地理位置相关的计算)类型。

        强大的功能:Redis 提供了数据过期功能、发布/订阅功能、简单事务功能,还支持 Lua 脚本扩展功能。

        客户端语言广泛:Redis提供了简单的 TCP 通信协议,编程语言可以方便地的接入 Redis。 

        支持 ACL 权限控制:从 Redis6 开始引入了 ACL 模块,为不同用户定制不同的用户权限。ACL(Access Control List)访问控制列表,是一种细粒度的权限管理策略,可以针对任意用户与组进行权限控制。目前大多数 Unix 系统与 Linux 2.6 版本已经支持 ACL 了。 Zookeeper 早已支持 ACL 了。 Unix 与 Linux 系统默认使用是 UGO(User、Group、Other)权限控制策略,其是一种粗粒度的权限管理策略。

        支持多线程 IO 模型:Redis 以前采用的是单线程模型,6.0开始 版本支持了多线程模型。

4.Redis 的 IO 模型

        Redis 处理客户端请求所采用的处理架构,称为 Redis 的 IO 模型。

     4.1.单线程模型

        Redis 3.0 及其以前版本,Redis 的 IO 模型采用的是纯粹的单线程模型。即所有客户端的请求全部由一个线程处理。单线程模型采用了多路复用技术,多路选择算法常见的有三种:select 模型、poll 模型、epoll 模型。poll 模型的选择算法:采用的是轮询算法。该模型对客户端的就绪处理是有延迟的;epoll 模型的选择算法:采用的是回调方式。根据就绪事件发生后的处理方式的不同, 又可分为 LT 模型与 ET 模型。

        执行流程:每个客户端若要向Redis 提交请求,都需要与 Redis 建立一个 socket 连接,并向事件分发器注册一个事件。一旦该事件发生就表明该连接已经就绪。而一旦连接就绪,事件分发器 就会感知到,然后获取客户端通过该连接发送的请求,并将由该事件分发器所绑定的这个唯 一的线程来处理。如果该线程还在处理多个任务,则将该任务写入到任务队列等待线程处理。

        优点:可维护性高,性能高。不存在并发读写情况,不存在执行顺序的不确定性,不存在线程切换开销,不存在死锁问题,不存在为了数据安全而进行的加锁和解锁开销。

        缺点:性能会受到影响,且由于单线程只能使用一个处理器,所以会形成处理器浪费。

     4.2.混合线程模型

        Redis 4.0 版本开始,加入了多线程元素。处理客户端请求的仍是单线程模型,但对于一些比较耗时但又不影响对客户端的响应的操作,就由后台其它线程来处理。 例如,持久化、对 AOF 的 rewrite、对失效连接的清理等。

     4.3.多线程模型

        Redis 6.0 版本,客户端请求的处理采用的是多线程模型。

        优点:其结合了多线程与单线程的优点,避开了它们的不足。

        缺点:没有明显不足,处理任务线程仍是单线程,性能可能有影响。

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

小猪APP分发:重塑应用分发市场的创新力量

在移动互联网蓬勃发展的今天,应用分发平台作为连接开发者与用户的桥梁,扮演着至关重要的角色。然而,随着市场的饱和,如何在众多平台中脱颖而出,为开发者提供更宽广的舞台,同时确保用户能够便捷、安全地获取…

VALSE 2024 Workshop报告分享┆多模态大模型Monkey及其在文档智能中的应用

2024年视觉与学习青年学者研讨会(VALSE 2024)于5月5日到7日在重庆悦来国际会议中心举行。本公众号将全方位地对会议的热点进行报道,方便广大读者跟踪和了解人工智能的前沿理论和技术。欢迎广大读者对文章进行关注、阅读和转发。文章是对报告人…

[MySQL数据库] Java的JDBC编程(MySQL数据库基础操作完结)

🌸个人主页:https://blog.csdn.net/2301_80050796?spm1000.2115.3001.5343 🏵️热门专栏:🍕 Collection与数据结构 (91平均质量分)https://blog.csdn.net/2301_80050796/category_12621348.html?spm1001.2014.3001.5482 🧀Java …

添砖Java之路其二——基本数据类型,scanner,字符拼接。

目录 基本数据类型: ​编辑 Scanner: 字符拼接: 课后小题: 基本数据类型: 如图可见:Java里面有八种基本数据类型。 注意:在其中我们需要注意的是int默认整型数据,double是默认浮点型数据。因…

JAVA基础之jsp标准标签

jsp动作标签实现实例化一个实体类 <jsp:useBean id"标识符" class"java类名" scope"作用范围"> 传统的java方式实例化一个实体类 Users user new Users(); <%%> id: 对象名 * class:类 创建对象时,完全限定名(包名…

pytest教程-40-钩子函数-pytest_runtest_call

领取资料&#xff0c;咨询答疑&#xff0c;请➕wei: June__Go 上一小节我们学习了pytest_runtest_setup钩子函数的使用方法&#xff0c;本小节我们讲解一下pytest_runtest_call钩子函数的使用方法。 pytest_runtest_call 钩子函数在 pytest 调用测试函数&#xff08;即测试用…

如何进行Go语言的性能测试和调优?

文章目录 开篇一、性能测试1. 使用标准库中的testing包2. 使用第三方工具 二、性能调优1. 优化算法和数据结构2. 减少不必要的内存分配和垃圾回收3. 并发和并行 结尾 开篇 Go语言以其出色的性能和简洁的语法受到了广大开发者的喜爱。然而&#xff0c;在实际开发中&#xff0c;…

IO 5.8日

1&#xff1a;使用 dup2 实现错误日志功能 使用 write 和 read 实现文件的拷贝功能&#xff0c;注意&#xff0c;代码中所有函数后面&#xff0c;紧跟perror输出错误信息&#xff0c;要求这些错误信息重定向到错误日志 err.txt 中去 2&#xff1a;判断一个文件是否拥有用户可写…

Python爬虫基础知识学习(以爬取某二手房数据、某博数据与某红薯(书)评论数据为例)

一、爬虫基础流程 爬虫的过程模块化&#xff0c;基本上可以归纳为以下几个步骤&#xff1a; 1、分析网页URL&#xff1a;打开你想要爬取数据的网站&#xff0c;然后寻找真实的页面数据URL地址&#xff1b; 2、请求网页数据&#xff1a;模拟请求网页数据&#xff0c;这里我们介…

jmeter控制器讲解

1&#xff0c;随机顺序控制器和随机控制器的区别&#xff1a;随机顺序控制器下所有的接口都会执行&#xff0c;只是执行顺序是随机的&#xff0c;随机控制器下所有的接口中随机执行一个接口&#xff0c;其余接口不执行。

Python数据可视化------地图

基础地图使用 # 地图基本演示 # 导包 from pyecharts.charts import Map from pyecharts.options import TitleOpts, VisualMapOpts# 准备地图对象 cmap Map() # 准备数据&#xff08;列表&#xff09; data [("北京市", 99), ("上海市", 199), ("…

自动驾驶主流芯片及平台架构(四)华为、​高通、英伟达高算力平台

上一章节有提到低算力的自动驾驶平台&#xff0c;本章内容重点介绍高算力的自动驾驶平台&#xff0c;华为、高通、英伟达。 华为自动驾驶MDC平台方案介绍 以整车数字架构为基础&#xff0c;全面管理软硬件的复杂性&#xff0c;并确保整车的可靠性&#xff1a;我们提出华为CCAVe…