Redis
文章目录
Redis学习内容
- nosql 数据模型
- Nosql 四大分类
- CAP
- BASE
- Redis 入门
- Redis安装(Window & Linux服务器)
- 五大基本数据类型
- String
- List
- Set
- Hash
- Zset
- 三种特殊数据类型
- geo
- hyperloglog
- bitmap
- Redis配置详解
- Redis持久化
- RDB
- AOF
- Redis 事务操作 ACID(mysql)
- Redis 实现订阅发布 (消息队列)
- Redis 主从复制
- Redis 哨兵模式 (现在公司中所有的集群都用哨兵模式)
- 缓存穿透及解决方案
- 缓存击穿及解决方案
- 缓存雪崩及解决方案
- 基础API 之 Jedis 详解
- SpringBoot 集成 Redis 操作
- Redis 的实践分析
1、Nosql概述
为什么要使用Nosql
我们现在处于2020年,大数据时代;
大数据一般的数据库无法进行分析处理了!2006年 Hadoop
一定要逼着自己学习,这是在这个社会生产的唯一法则。
1、单机MySQL的年代
90年代,一个基本的网站访问量一般不会太大,单个数据库完全足够。
那个时候,更多的去使用静态网页 Html 服务器根本没有太大的压力。
思考一下,这种情况下:整个网站的瓶颈是什么?
- 数据量如果太大,一台机器放不下了。
- 数据的索引 (B+Tree),一个机器内存页放不下。(300万就一定要建立索引)
- 访问量(读写混合),一个服务器承受不了。
只要你开始出现以上的三种情况之一,那么你必须要晋级。
2、Memcached (缓存) + MySQL + 垂直拆分(读写分离)
网站80%的情况都是在读,每次都要查询数据库会十分麻烦。所以我们希望减轻数据的压力,我们可以使用缓存保证效率!
发展过程:优化数据结构和索引 --> 文件缓存(IO)–> Memcached(当时最热门的技术)
3、分库分表 + 水平拆分 + MySQL集群
技术和业务在发展的同时,对人的要求也越来越高。
本质:数据库(读,写)
早年引擎MyISAM:表锁(100万 张三-密码),锁整个用户表,十分影响效率,高并发就会出现严重锁问题
转战Innodb:行锁,每次查询只锁这一行
订单、用户、支付(拆分)
慢慢的就开始使用分库分表来解决写的压力。MySQL在那个年代推出了表分区。这个并没有多少公司使用。MySQL 的集群,很好的满足了那个年代的所有需求。
4、如今最近的年代
技术爆炸:2010-2020十年之间,世界已经发生了翻天覆地的变化。(定位,也是一种数据,音乐,热榜)
MySQL 等关系型数据库就不够用了,因为数据量很大,变化很快。
MySQL 有的使用它来存储一些比较大的文件,博客,图片。数据库表很大,效率就低。如果有一种数据库专门处理这种数据,MySQL 的压力就会变小。(研究如何处理这些问题)大数据的IO压力下,表几乎没法更改。灰度发布,平滑升级,在最开始时解决。
目前一个基本的互联网项目
为什么要用NoSQL
用户的个人信息,社交网络,地址位置。用户自己产生的数据,用户日志等爆发式增长!
这时候我们就需要使用NoSQL数据库,Nosql可以很好的处理以上的情况。
什么是NoSQL
NoSQL
NoSQL = Not Only SQL(不仅仅是SQL)
关系型数据库:表格,行,列(POI)
泛指非关系型数据库,随着web2.0互联网的诞生,传统的关系型数据库很难对付web2.0时代。尤其是超大规模的高并发社区。暴露出来很多难以克服的问题,NoSQL在当今大数据环境下发展的十分迅速,Redis是发展最快的,而且是我们当下必须掌握的技术。
很多的数据类型用户的个人信息,社交网络,地理位置。这些数据类型的存储不需要一个固定的格式。不需要多余的操作就可以横向扩展的。Map<String,Object>使用键值对来控制。
Get Set
NoSQL特点
解耦
- 方便扩展(数据之间没有关系,很好扩展)
- 大数据量高性能(Redis一秒写8万次,读取11万,NoSQL的缓存记录级,是一种细粒度缓存,性能会比较高)
- 数据类型是多样型的(不需要事先设计数据库,随取随用。如果是数据量十分大的表,很多人就无法设计了)
- 传统 RDBMS 和 NoSQL
传统的 RDBMS
结构化组织
SQL
数据和关系都存在单独的表中 row col
数据操作,数据定义语言
严格的一致性
基础的事务
Nosql
不仅仅是数据
没有固定查询语言
键值对存储,列存储,文档存储,图形数据库(社交关系)
最终一致性
CAP定理 和 BASE理论(异地多活)
高性能,高可用,高可拓
了解:3V+3高
大数据时代的3V:主要是描述问题的
- 海量Volume
- 多样Variety
- 实时Velocity
大数据时代的3高:主要是对程序的要求 - 高并发
- 高可拓(随时水平拆分,机器不够了,可以扩展机器来解决)
- 高性能(保证用户体验和性能,每周维护)
实践:NoSQL + RDBMS 一起使用才是最强的,阿里巴巴的架构引进。
敏捷开发(Agile): 捷开发以用户的需求进化为核心,是一种以人为核心、迭代、循序渐进的开发方法。在敏捷开发中,把一个大项目分为多个子项目,每个项目相互联系,各个子项目都经过测试,具备可视、可集成和可运行使用的特征。但也可独立运行的小项目,并分别完成,在此过程中软件一直处于可使用状态。敏捷开发并不追求前期完美的设计、完美编码,而是力求在很短的周期内开发出产品的核心功能,尽早发布出可用的版本。然后在后续的生产周期内,按照新需求不断迭代升级,完善产品。
极限编程(ExtremeProgramming): 是一种轻量(敏捷)、高效、低风险、柔性、可预测、科学而且充满乐趣的软件开发方式
-
商品的基本信息:名称、价格、商家信息
关系型数据库就可以解决了; MySQL(组件)/ Oracle(淘宝早年就去IOE了 - 王坚:《阿里云的这群疯子》) -
商品的描述:评论(文字居多)
文档型数据库中,Redis -> MongoDB -
图片
分布式文件系统 FastDFS
淘宝自己的 TFS
Gooale的 GFS
Hadoop HDFS
阿里云的 oss -
商品的关键字(用于搜索)
搜索引擎 solr elasticsearch
ISerach:多隆(多了解一些技术大佬) -
商品热门的波段信息
内存数据库
Redis、Tair、Memache -
商品的交易,外部的支付接口
三方应用
要知道,一个简单的网页背后的技术,一定不是大家所想的那么简单。
大型互联网应用问题:
- 数据类型太多了。
- 数据源繁多,经常重构。
- 数据要改造,大面积改造。
UDSL(统一数据服务平台)
本笔记基于视频:B站狂神说