【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 版本,客户端请求的处理采用的是多线程模型。

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

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

相关推荐
地球资源数据云6 分钟前
1951-2025年中国逐年1千米逐月总降水量区域统计数据集_年表_县
大数据·数据结构·数据库·数据仓库·人工智能
l1t6 分钟前
DeepSeek v4辅助生成的单文件SQL查询示例页面
javascript·数据库·sql
云飞云共享云桌面25 分钟前
精密机械制造工厂研发部门使用SolidWorks和ug,三维设计云桌面如何选择?
大数据·运维·服务器·网络·数据库·人工智能·制造
志飞29 分钟前
springboot配置可持久化本地缓存ehcache
java·spring boot·缓存·ehcache·ehcache持久化
IntMainJhy43 分钟前
【flutter for open harmony】第三方库 Flutter 二维码生成的鸿蒙化适配与实战指南
数据库·flutter·华为·sqlite·harmonyos
それども1 小时前
Spring Bean 注入的优先级顺序
java·数据库·sql·spring
张子行的博客1 小时前
SQL 调优实战:跨表排序性能提升之路
数据库·sql·oracle
Irene19911 小时前
数据发散(Data Spreading)详解(附:示例 数据发散最大值是笛卡尔乘积)
数据库
a9511416421 小时前
c++如何解析二进制协议中的可选字段读取逻辑及其反序列化【详解】
jvm·数据库·python
weixin_580614001 小时前
golang如何实现时间格式化_golang时间格式化方法详解
jvm·数据库·python