redis学习路线

csdn推荐

待更新…

一、nosql讲解 1. 为什么要用nosql?

用户的个人信息,社交网络,地理位置,自己产生的数据,日志等等爆发式增长!传统的关系型数据库已无法满足这些数据处理的要求,这时我们就需要使用NoSQL数据库,它可以很好的处理上述的情况!

2. 什么是nosql?

这里有两个概念:关系型数据库和菲关系型数据库

3. nosql特点

1. 可扩展性: NoSQL数据库通常比关系型数据库更易于扩展。它们可以轻松地水平扩展,只需添加更多的服务器即可提高性能。这使得NoSQL数据库非常适合处理大规模数据和高并发访问。

2. 灵活性: NoSQL数据库支持多种数据模型。包括文档、键值对、图形和列式存储。这使得它们能够存储各种类型的数据。

3. 高性能: NoSQL数据库通常比关系型数据库更快,因为它们不需要进行复杂的连接和事务处理。这使得它们非常适合需要快速响应的应用程序。

4. 高可用性: NoSQL数据库通常具有更高的可用性,因为它们可以容忍单个节点的故障。这使得它们非常适合需要持续运行的应用程序。

4. 传统的 RDBMS(关系型) 和 NoSQL

【传统的 RDBMS(关系型数据库)】:

【Nosql】:

5. 阿里巴巴架构演进

参考链接:阿里巴巴实践分析理解数据架构演进

6. nosql四大分类

参考链接:Sql Or NoSql,看完这一篇你就懂了

7.CAP原则

CAP是Consistency(一致性),Availability(可用性),Partition tolerance(分区容错性)的缩写。

在一个分布式系统(指互相连接并共享数据的节点的集合)中,当涉及读写操作时,只能保证一致性(Consistence)、可用性(Availability)、分区容错性(Partition Tolerance)三者中的两个,另外一个必须被牺牲。

一致性(Consistency)

A read is guaranteed to return the most recent write for a given client.

对某个指定的客户端来说,读操作保证能够返回最新的写操作结果。

可用性(Availability)

A non-failing node will return a reasonable response within a reasonable amount of time (no error or timeout).

非故障的节点在合理的时间内返回合理的响应(不是错误和超时的响应)。

分区容忍性(Partition Tolerance)

System continues to work despite message loss or partial failure.

当出现网络分区后,系统能够继续“履行职责”。

8. BASE

BASE 是一个缩写,代表 Basically Available, Soft state, Eventually consistent。它描述了 Redis 的一些关键特性:

二、Redis入门 1. Redis是什么

Redis全称为:Remote Dictionary Server(远程数据服务),Redis是一种支持key-value等多种数据结构的存储系统。可用于缓存,事件发布或订阅,高速队列等场景。提供String(字符串)、Hash(哈希)、 List (列表)、Set(集合)、Zset(有序集合)直接存取,基于内存,可持久化。

特点1:丰富的数据类型

我们知道很多数据库只能处理一种数据结构:

传统SQL数据库处理二维关系数据;

MemCached数据库,键和值都是字符串;

文档数据库(MongoDB)是由Json/Bson组成的文档。

当然不是他们这些数据库不好,而是一旦数据库提供数据结构不适合去做某件事情的话,程序写起来就非常麻烦和不自然。

Redis虽然也是键值对数据库,但是和Memcached不同的是:Redis的值不仅可以是字符串,它还可以是其他五种数据结构中的任意一种。

特点2:内存存储

数据库有两种:一种是硬盘数据库,一种是内存数据库。

硬盘数据库是把值存储在硬盘上,在内存中就存储一下索引,当硬盘数据库想访问硬盘的值时,它先在内存里找到索引,然后再找值。问题在于,在读取和写入硬盘的时候,如果读写比较多的时候,它会把硬盘的IO功能堵死。

内存存储是讲所有的数据都存储在内存里面,数据读取和写入速度非常快。

特点3:持久化功能

将数据存储在内存里面的数据保存到硬盘中,保证数据安全,方便进行数据备份和恢复。

2. Redis 和 Memcached 有什么区别?

很多人都说用 Redis 作为缓存,但是 Memcached 也是基于内存的数据库,为什么不选择它作为缓存呢?要解答这个问题,我们就要弄清楚 Redis 和 Memcached 的区别。

Redis 与 Memcached 共同点:

Redis 与 Memcached 区别:

3. 为什么用 Redis 作为 MySQL 的缓存?

主要是因为 Redis 具备高性能和高并发两种特性。

Redis 具备高性能:Redis 是一个内存数据库,相比于磁盘上的 MySQL 数据库,Redis 可以提供更快的读取和写入速度。通过将常用的数据存储在 Redis 中,并且将读取请求重定向到 Redis,可以大大减少对 MySQL 的负载,提升系统的整体性能。

数据结构灵活:Redis 提供了丰富的数据结构,如字符串、哈希、列表、集合和有序集合等。这些数据结构可以更好地满足不同应用场景下的需求。而 MySQL 是一个关系型数据库,数据结构相对较为固定。通过使用 Redis,可以灵活地存储和操作数据,提高开发效率和系统的灵活性。

缓存生命周期管理:Redis 提供了灵活的过期时间设置和缓存淘汰策略,可以根据业务需求对缓存进行生命周期管理。这样可以避免无效或过期的缓存数据对系统性能和数据一致性造成影响。

分布式缓存支持:Redis 支持分布式缓存,可以将缓存数据存储在多个 Redis 节点上,提高系统的可扩展性和容错性。同时,Redis 还提供了发布订阅机制,可以实现实时数据同步和消息传递。

高并发:直接操作缓存能够承受的请求是远远大于直接访问数据库的,所以我们可以考虑把数据库中的部分数据转移到缓存中去,这样用户的一部分请求会直接到缓存这里而不用经过数据库

需要注意的是,Redis 并不是一定适合所有的场景,对于一些对数据一致性要求较高的应用或者需要复杂查询功能的应用,使用 Redis 作为缓存可能不太合适。此外,使用 Redis 作为 MySQL 缓存也需要考虑系统的复杂性和维护成本。

4. redis数据结构

Redis 提供了丰富的数据类型,常见的有五种数据类型:String(字符串),Hash(哈希),List(列表),Set(集合)、Zset(有序集合)。这 5 种数据类型是直接提供给用户使用的,是数据的保存形式,其底层实现主要依赖这 8 种数据结构:简单动态字符串(SDS)、LinkedList(双向链表)、Dict(哈希表/字典)、SkipList(跳跃表)、Intset(整数集合)、ZipList(压缩列表)、QuickList(快速列表)。Redis 5 种基本数据类型对应的底层数据结构实现如下表所示:

4.1 String(字符串)

String 是 Redis 中最简单同时也是最常用的一个数据类型。String 是一种二进制安全的数据类型,可以用来存储任何类型的数据比如字符串、整数、浮点数、图片(图片的 base64 编码或者解码或者图片的路径)、序列化后的对象。

4.2 List(列表)

Redis 的 List 的实现为一个 双向链表,即可以支持反向查找和遍历,更方便操作,不过带来了部分额外的内存开销。

4.3 Hash(哈希)

Redis 中的 Hash 是一个 String 类型的 field-value(键值对) 的映射表,特别适合用于存储对象,后续操作的时候,你可以直接修改这个对象中的某些字段的值。Hash 类似于 JDK1.8 前的 HashMap,内部实现也差不多(数组 + 链表)。不过,Redis 的 Hash 做了更多优化。

4.4 Set(集合)

Redis 中的 Set 类型是一种无序集合,集合中的元素没有先后顺序但都唯一,有点类似于 Java 中的 HashSet 。当你需要存储一个列表数据,又不希望出现重复数据时,Set 是一个很好的选择,并且 Set 提供了判断某个元素是否在一个 Set 集合内的重要接口,这个也是 List 所不能提供的。你可以基于 Set 轻易实现交集、并集、差集的操作,比如你可以将一个用户所有的关注人存在一个集合中,将其所有粉丝存在一个集合。这样的话,Set 可以非常方便的实现如共同关注、共同粉丝、共同喜好等功能。这个过程也就是求交集的过程。

4.5 Sorted Set(有序集合)

Sorted Set 类似于 Set,但和 Set 相比,Sorted Set 增加了一个权重参数 score,使得集合中的元素能够按 score 进行有序排列,还可以通过 score 的范围来获取元素的列表。有点像是 Java 中 HashMap 和 TreeSet 的结合体。

5. redis线程 5.1 讲解一下Redis的线程模型?

Redis 单线程指的是「接收客户端请求->解析请求 ->进行数据读写等操作->发送数据给客户端」这个过程是由一个线程(主线程)来完成的,这也是我们常说 Redis 是单线程的原因。

5.2 为什么单线程速度快? 6. Redis持久化 6.1 什么是持久化?

持久化就是把内存的数据写到磁盘中去,防止服务宕机了内存数据丢失。

6.2 持久化方式

Redis 共有三种数据持久化的方式:

Redis安装 五大基本数据类型 String List Set Hash Zset 10. 三种特殊数据类型 geo hyperloglog bitmap 11. Redis配置讲解 12. Redis持久化 RDB AOF 13. Redis事务操作 14. Redis实现发布订阅 15. Redis主从复制 16. Redis哨兵模式 17. 缓存穿透及解决方案 18. 缓存击穿及解决方案 19. 缓存雪崩及解决方案 20. 基础API之Jedis讲解 21. Springboot集成Redis操作 22. Redis的实践分析

文章来源:https://blog.csdn.net/m0_65621281/article/details/139530223



微信扫描下方的二维码阅读本文

© 版权声明
THE END
喜欢就支持一下吧
点赞7 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容