【Redis】1. Redis介绍

170 阅读5分钟

NoSQL介绍

NoSQL(Not Only SQL),意思是 "不仅仅是SQL",泛指非关系型数据库,区别于RDBMS关系型数据库,但是在实际应用场景中却和关系型数据库相辅相成。

NoSQL这个技术门类,早期就有人提出,但是早期由于对软件的性能没有那么高的要求,所以早期一般都只使用RDBMS应对数据存储。互联网发展至2009年,随着并发越来越高,用户数据越来越多,NoSQL发展的趋势才愈发高涨。

随着互联网网站的兴起,RDBMS在应对动态网站,特别是超大规模和高并发的纯动态网站已经显得力不从心,暴露了很多难以克服的问题,如商城网站中对商品数据频繁查询、对热搜商品的排行统计、订单超时问题、以及微信朋友圈(音频,视频)存储等。这样的问题使用RDBMS实现就显得非常复杂,即使能够实现在性能上也不是那么乐观。NoSQL这个技术门类的出现,更好的解决了这些问题,它告诉了世界不仅仅是SQL,因为SQL主要是RDBMS中使用的,如今有一些业务也需要不使用SQL的NoSQL来实现了。

三大类NoSQL

1. Key-Value数据库

说明:

这一类数据库主要会使用到一个哈希表,这个表中有一个特定的键和一个指针指向特定的数据。

特点:

  • 优点:简单,易部署。
  • 缺点:对数据库中的部分数据进行更新的效率非常低下。(需要遍历)

相关产品:

  • Redis:Key-Value数据存储在内存。
  • SSDB:Key-Value数据存储在硬盘(号称性能不亚于Redis)。

2. 列存储数据库

说明:

这一类数据库主要用来应对分布式存储的海量数据。

特点:

Key仍然存在,但是它们的特点是指向了多个列,这些列是由列家族来安排的。

相关产品:HBase

3. Document数据库

说明:

文档型数据库的灵感是来自于Lotus Notes 办公软件,它与Key-Value数据库相类似,该数据库存储的数据是版本化的文档。半结构化的文档以特定的格式存储,比如JSON。文档型数据库可以看作是Key-Value数据库的升级版,因为Key-Value之间允许嵌套,并且文档型数据库比Key-Value数据库的查询效率更高。

特点:

以文档(Document)形式存储。使用文档型数据库可以大大节省设计库表的时间,因为JSON数据在开发的过程中可以动态扩展字段。但是文档型数据库目前对事务的支持还没有RDBMS那么好,但是势头非常猛。

相关产品:MongoDB

NoSQL应用场景

  • 数据模型较为简单
  • 系统设计较为灵活
  • 数据库性能要求比较高
  • 不需要高度数据一致性(数据出现小范围误差对于业务影响不大)

Redis介绍

Redis是一个开源(BSD许可)的内存型数据库,用作数据库、缓存和消息中间件。

Redis所有的数据都存储在内存中,这也就是Redis数据读写之快的原因。同时也有弊端,比如说内存一断电就会丢失所有未保存的数据,所以Redis也提供了相应的持久化方案,定期将内存中的数据存入硬盘中。

Redis特点

  • 高性能Key-Value内存型数据库

  • 丰富的数据类型

  • 支持数据持久化

  • 设计时单进程,单线程,串行执行(不支持并发,没有线程安全问题,从而实现分布式锁)

    分布式锁:在应用只部署在一台服务器上,只有一套Java运行环境,一个JVM,因此可以使用Synchronized关键字来实现线程锁保证数据一致性;在集群中,有多套运行环境,多个JVM同时运行服务,这时Synchronized就不能起到作用了,因为Synchronized只能控制当前JVM,而集群是跨JVM的,Synchronized不能控制多台JVM多线程操作数据。如果想要在集群中实现分布式锁保证数据一致性,只能找独立于所有JVM的产品去解决,Redis是其中之一。

Redis启动

redis-server有两种启动方式,默认启动加载配置文件启动

如果不指定配置文件启动,那么就是默认启动,使用的是redis-server这个shell脚本中的配置。

在不同平台和不同版本的Redis中,有的不会给配置文件,有的配置文件需要从源码目录中拷贝到执行目录。因此加载配置文件启动的具体方式,不同版本,不同平台(Windows,Linux,Docker)可能都不太一样,具体网上查看即可。

因为Redis对中文做了编码,所以如果Key的内容是中文,那么查看的时候查看到的是Redis的编码,而不是中文内容。如果想要查看中文内容,那么在启动redis-cli时需要添加参数

./redis-cli -p 端口 --raw

Redis库

Redis中的库类似于MySQL中Database的概念,存放数据的基本单元,不同应用使用不同库。

一个库可以存放多对Key-Value。

每一个库都有一个唯一编号(index),从0开始。

默认库的个数为16,编号0 ~ 15。(编号永远都是:0 ~(库数 - 1))

默认使用0号库。

库与库之间是相互隔离的,意味着每一个库中都可以有相同的Key。

Redis可视化工具

Redis可视化工具很多,具体安装教程请网上搜索。

可视化工具安装完如果连接不上Redis,原因有两点:

  • Redis没有开启远程连接。
  • 没有关闭防火墙。