Redis入门helloword

105 阅读5分钟

fb2c5f0ade441af3.webp

说起redis就不得不提及NoSql,所以本文围绕着NoSql是什么、为什么出现、redis是什么、redis的出现能解决什么?等问题展开讨论,主打入门😊

NoSql的简介

NoSql是什么?

  • 最初表示为Non-SQL,后来有人也叫他Not only SQL。是对不同于传统的关系型数据库和数据库管理系统的统称。
  • 允许部分数据使用SQL系统存储,而其他数据允许使用NoSQL系统存储。其数据存储可以不需要固定的表格模式以及元数据,也经常会避免使用SQL的JOIN操作,一般有水平可扩展的特性

NoSQL的发展历史

  • NoSQL一词最早出现于1998年,是Carlo Strozzi开发的一个轻量、开源、不提供SQL功能的关系数据库
  • 2009年,Last.fm的Johan Oskarsson发起了一次关于分布式开源数据库的讨论,来自Rackspace的Eric Evans再次提出了NoSQL的概念,这时的NoSQL主要指非关系型、分布式、不提供ACID的数据库设计模式
  • 2009年在亚特兰大举行的“no:sql(east)”讨论会是一个里程碑,其口号是“select fun, profit from real_world where relational=false;”。因此,对NoSQL最普遍的解释是“非关联型的”,强调键-值存储和面向文档数据库的优点,而不是单纯的反对RDBMS。

NoSQL为什么会出现?

在当前的环境下,无论是网上的文章,还是许多的论坛,博客,都在谈及xx系统高并发,xx组件高可用,xx高性能。仿佛这3高是每一个项目的标配,我们暂且不讨论事实是否如此,只讨论真的是在这3高的情况下,我们的系统如何满足以下场景

  • 海量数据的快速查询
  • 复杂多样的数据存储
  • 实时性

我们普通的业务系统,大家最熟知的是将数据全部存储进mysql中,还可以多表关联查询,去重等等的操作,岁月静好。那么请想一想在上面提到的3高的情况下,如果mysql中单表数据1亿,在想快速的获取其中一部分数据是不是就会感到吃力,这个时候NoSQL出现了

NoSQL的分类

  • K/V键值对:Memcached,Redis
  • 文档型数据库:CouchDB,MongoDB 等
  • 列存储数据库:Cassandra,HBase
  • 图关系数据库:他不是放图形的,放的是关系比如:朋友圈社交网络,广告推荐系统,社交网络,推荐系统等。专注于构建关系图谱:Neo4J,InfoGrid

Redis出现

上面我们说了NoSQL是什么,知道了在大数据量下mysql无法支撑高并发以及海量的数据查询,需要一个东东来解决这个局面,主角登场,他就是Redis(NoSQL产品有很多,这里主要说Redis),Remote Dictionary Server, 是一个把数据存储在内存中的数据库。

  • 是完全开源免费的,用c语言编写的,遵守BSD协议,是一个高性能的(k/v)分布式内存数据库,基于内存运行并支持持久化的NoSQL数据库,是当前热门的NoSQL数据库之一
  • 支持数据持久化,可以将内存中的数据保存到磁盘中,重启的时候可以再次加载进行使用
  • 不仅仅支持简单的k-v类型的数据,同时还提供list,set,zset,hash等数据结构的存储
  • 支持数据备份,master-slave模式的数据备份

Redis的历史

Redis的意思是远程字典服务器。

  • 最初的开发者是Salvatore Sanfilippo(绰号antirez)。他想提高他意大利的创业公司的可扩展性,开发了一个实时网络日志分析器。在使用传统数据库系统扩展某些类型的工作负载时遇到重大问题后,Sanfilippo于2009年开始在Tcl中原型化Redis的第一个概念验证版本。
  • 后来,Sanfilippo将这个原型翻译成C语言,并实现了第一个数据类型——列表。Sanfilippo在内部成功使用了这个项目几周后,决定将其开源,并在Hacker News上宣布了这个项目。
  • 这个项目开始受到关注,尤其是在Ruby社区中,GitHub和Instagram是第一批采用它的公司。
  • Sanfilippo于2010年3月被VMware聘用。
  • 2012年10月,Redis2.6发布,支持lua脚本
  • 2013年5月,Redis由Pivotal Software (VMware的子公司)赞助。
  • 2015年4月,Redis3.0发布,出了官方的集群方案
  • 2015年6月,开发由Redis Labs赞助。
  • 2027年7月,Redis4.0发布,支持混合持久化,多线程异步删除
  • 2018年10月,Redis 5.0发布,核心代码重构,并引入了Redis Stream一种新的数据结构,允许在单个键上以自动的、基于时间的顺序存储多个字段和字符串值。
  • 2020年5月,Redis6.0发布,支持了多线程IO
  • 2020年6月,Salvatore Sanfilippo辞去Redis维护者的职务

redis的出现能解决什么

  • 可以每秒处理10W+指令
  • 取最新N个数据的操作,如:可以将最新的10位主播的ID放在redis的list集合里边
  • 模拟类似于HttpSession这种需要设定过期时间的功能
  • 发布、订阅消息系统

上面我们看到redis的性能十分强劲,而且数据类型十分丰富。那么回到最初的问题,互联网项目中的高性能他是不是算满足呢,试想一下在几十万上百万人使用的一个系统上,每秒钟会有大量的查询请求,如果把经常查询的数据放在redis里面,mysql的压力就会减轻,大量的请求去查询redis,而redis的高性能完全可以支撑高并发的查询。

看到这里,聪明的小伙伴可能会发现一些问题,高可用怎么没说?如何判断是经常查询的数据?redis中的数据怎么和mysql中的数据保持一致?项目中应该怎么用redis呢?诸如此类等等多的问题我们下期再见❤️