Redis(更新中)

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的年代
Redis(更新中)

90年代,一个基本的网站访问量一般不会太大,单个数据库完全足够。

那个时候,更多的去使用静态网页 Html 服务器根本没有太大的压力。

思考一下,这种情况下:整个网站的瓶颈是什么?

  1. 数据量如果太大,一台机器放不下了。
  2. 数据的索引 (B+Tree),一个机器内存页放不下。(300万就一定要建立索引)
  3. 访问量(读写混合),一个服务器承受不了。

只要你开始出现以上的三种情况之一,那么你必须要晋级。

2、Memcached (缓存) + MySQL + 垂直拆分(读写分离)

网站80%的情况都是在读,每次都要查询数据库会十分麻烦。所以我们希望减轻数据的压力,我们可以使用缓存保证效率!

发展过程:优化数据结构和索引 --> 文件缓存(IO)–> Memcached(当时最热门的技术)
Redis(更新中)

3、分库分表 + 水平拆分 + MySQL集群

技术和业务在发展的同时,对人的要求也越来越高。
本质:数据库(读,写)

早年引擎MyISAM:表锁(100万 张三-密码),锁整个用户表,十分影响效率,高并发就会出现严重锁问题


转战Innodb:行锁,每次查询只锁这一行

订单、用户、支付(拆分)
慢慢的就开始使用分库分表来解决写的压力。MySQL在那个年代推出了表分区。这个并没有多少公司使用。MySQL 的集群,很好的满足了那个年代的所有需求。
Redis(更新中)

4、如今最近的年代

技术爆炸:2010-2020十年之间,世界已经发生了翻天覆地的变化。(定位,也是一种数据,音乐,热榜)
MySQL 等关系型数据库就不够用了,因为数据量很大,变化很快。

MySQL 有的使用它来存储一些比较大的文件,博客,图片。数据库表很大,效率就低。如果有一种数据库专门处理这种数据,MySQL 的压力就会变小。(研究如何处理这些问题)大数据的IO压力下,表几乎没法更改。灰度发布,平滑升级,在最开始时解决。

目前一个基本的互联网项目

Redis(更新中)

为什么要用NoSQL

用户的个人信息,社交网络,地址位置。用户自己产生的数据,用户日志等爆发式增长!

这时候我们就需要使用NoSQL数据库,Nosql可以很好的处理以上的情况。

什么是NoSQL

NoSQL

NoSQL = Not Only SQL(不仅仅是SQL)

关系型数据库:表格,行,列(POI)

泛指非关系型数据库,随着web2.0互联网的诞生,传统的关系型数据库很难对付web2.0时代。尤其是超大规模的高并发社区。暴露出来很多难以克服的问题,NoSQL在当今大数据环境下发展的十分迅速,Redis是发展最快的,而且是我们当下必须掌握的技术。

很多的数据类型用户的个人信息,社交网络,地理位置。这些数据类型的存储不需要一个固定的格式。不需要多余的操作就可以横向扩展的。Map<String,Object>使用键值对来控制。

Get Set

NoSQL特点

解耦

  1. 方便扩展(数据之间没有关系,很好扩展)
  2. 大数据量高性能(Redis一秒写8万次,读取11万,NoSQL的缓存记录级,是一种细粒度缓存,性能会比较高)
  3. 数据类型是多样型的(不需要事先设计数据库,随取随用。如果是数据量十分大的表,很多人就无法设计了)
  4. 传统 RDBMS 和 NoSQL

传统的   RDBMS
   结构化组织
   SQL
   数据和关系都存在单独的表中 row col
   数据操作,数据定义语言
   严格的一致性
   基础的事务

Nosql
   不仅仅是数据
   没有固定查询语言
   键值对存储,列存储,文档存储,图形数据库(社交关系)
   最终一致性
   CAP定理 和 BASE理论(异地多活)
   高性能,高可用,高可拓

了解:3V+3高

大数据时代的3V:主要是描述问题的

  1. 海量Volume
  2. 多样Variety
  3. 实时Velocity
    大数据时代的3高:主要是对程序的要求
  4. 高并发
  5. 高可拓(随时水平拆分,机器不够了,可以扩展机器来解决)
  6. 高性能(保证用户体验和性能,每周维护)

实践:NoSQL + RDBMS 一起使用才是最强的,阿里巴巴的架构引进。

敏捷开发(Agile): 捷开发以用户的需求进化为核心,是一种以人为核心、迭代、循序渐进的开发方法。在敏捷开发中,把一个大项目分为多个子项目,每个项目相互联系,各个子项目都经过测试,具备可视、可集成和可运行使用的特征。但也可独立运行的小项目,并分别完成,在此过程中软件一直处于可使用状态。敏捷开发并不追求前期完美的设计、完美编码,而是力求在很短的周期内开发出产品的核心功能,尽早发布出可用的版本。然后在后续的生产周期内,按照新需求不断迭代升级,完善产品。

极限编程(ExtremeProgramming): 是一种轻量(敏捷)、高效、低风险、柔性、可预测、科学而且充满乐趣的软件开发方式

  1. 商品的基本信息:名称、价格、商家信息
    关系型数据库就可以解决了; MySQL(组件)/ Oracle(淘宝早年就去IOE了 - 王坚:《阿里云的这群疯子》)

  2. 商品的描述:评论(文字居多)
    文档型数据库中,Redis -> MongoDB

  3. 图片
    分布式文件系统 FastDFS
    淘宝自己的 TFS
    Gooale的 GFS
    Hadoop HDFS
    阿里云的 oss

  4. 商品的关键字(用于搜索)
    搜索引擎 solr elasticsearch
    ISerach:多隆(多了解一些技术大佬)

  5. 商品热门的波段信息
    内存数据库
    Redis、Tair、Memache

  6. 商品的交易,外部的支付接口
    三方应用

要知道,一个简单的网页背后的技术,一定不是大家所想的那么简单。
大型互联网应用问题:

  • 数据类型太多了。
  • 数据源繁多,经常重构。
  • 数据要改造,大面积改造。

UDSL(统一数据服务平台)
Redis(更新中)


本笔记基于视频:B站狂神说

上一篇:数据源管理 | 分布式NoSQL系统,Cassandra集群管理


下一篇:Redis:1、概述