1、NoSQL数据库
1.1 NoSQL数据库概述
NoSQL(NoSQL = Not Only SQL
), 不仅仅是SQL,泛指非关系型的数据库
。
NoSQL不依赖业务逻辑方式存储,而已简单的key-value
模式存储,因此大大的增加了数据库的扩展能力。
- 不遵循SQL标准。
- 不支持ACID
- 远超于SQL的性能。
1.2 NoSQL使用场景
- 对数据高并发的读写
- 海量数据的读写
- 对数据的高可扩展性
1.3 NoSQL不适用场景
- 需要事物支持
- 复杂关系的查询
1.4 常见的NoSQL数据库
1.4.1 Memcache
- 很早出现的NoSQL数据库
- 数据都在内存中,一般
不持久化
- 支持简单的key-value模式,
支持类型单一
- 一般作为
缓存数据库
辅助持久化数据库
1.4.2 Redis
- 几乎覆盖了Memcached的绝大部分功能
- 数据都在内存中,
支持持久化
,主要用作备份恢复 - 除了支持简单的key-value模式,还支持
多种数据结构的存储,
比如list、set、hash、zset
等。 - 一般作为缓存数据库辅助持久化的数据库
1.4.3 MongoDB
- 高性能、开源、模式自由(schema free)的
文档型数据库
- 数据都在内存中,如果内存不足,把不常用的数据保存到硬盘
- 虽然是key-value模式,但是对value(尤其是
Json
)提供了丰富的查询功能 - 支持二进制数据及大型对象
- 可以根据数据的特点替代
RDBMS
,成为独立的数据库。 或者配合RDBMS,存储特定的数据。
2、Redis的概述和安装
2.1 概述
Redis是什么
Redis: REmote DIctionary Server
(远程字典服务器)
是完全开源免费的,用C语言编写的,遵守BSD协议,是一个高性能的(key/value)分布式内存数据库,基于内存运行,并支持持久化的NoSQL数据库,是当前最热门的NoSQL数据库之一,也被人们称为数据库结构服务器
Redis与其他key-value缓存产品有以下三个特点
- Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用。
- Redis不仅仅支持简单的key-value类型的数据,同时还提供list、set、zset、hash等数据结构的存储。
- Redis支持数据的备份,即
master-slave
(主从)模式的数据备份
Redis能干嘛
- 内存存储和持久化: redis支持异步将内存中的数据写到硬盘上,同时不影响继续服务
- 发布、订阅消息系统
- 地图信息分析
- 定时器、计数器
- 最新n个数据
特性
数据类型、基本操作和配置
持久化和复制,RDB、AOF
事物的控制
常用网站
2.2 安装
2.2.1 Windows版本安装
下载地址: https://gitee.com/resource-download/redis/tree/master/
下载完成后解压后即可。
双击启动redis-server.exe
双击启动redis-cli.exe
测试简单的存值取值
127.0.0.1:6379> set name 'Mr Qi' OK 127.0.0.1:6379> get name "Mr Qi" 127.0.0.1:6379>
2.2.2 Linux版本安装
官网下载地址 https://redis.io/download/
下载完成后放进我们的linux的/opt
目录下
进入/opt目录
cd /opt
然后进行解压缩
tar -zxvf redis-6.2.6.tar.gz
安装gcc
(gcc是linux下的一个编译程序,是c语言的编译工具)
yum install gcc
然后在解压后的目录下,执行make
(将我们的文件编译成C文件)命令,
cd redis-6.2.6
make
执行make可能出现的问题:
emalloc/jemalloc.h: 没有那个文件或目录
我们需要执行以下命令
make distclean
执行完然后再次make
即可。
到这里我们就编译完成了,我们要继续进行安装
make install
安装完成后,它的默认安装位置是usr/local/bin
目录下,进入目录执行ls
命令进行查看.
我们可以看到里面关于redis的有7个文件,各个文件说明如下
redis-benchmark
: 性能测试工具
redis-check-aof
: 修复有问题的aof文件
redis-check-rdb
:修复有问题的rdb文件
redis-server
:redis服务器启动命令
redis-cli
:客户端操作入口
启动方式一(不推荐):
执行redis-server
命令
这种方式有个弊端,就是我们只要关闭窗口,则服务就会自动关闭。
启动方式二(推荐):
我们需要修改redis.conf
文件,将里面的daemonize no
改为yes
,为了不破坏原有文件,我们可以复制一份文件进行修改。
复制一份redis.conf,复制位置可自己指定
进入/opt/redis-6.2.6
目录下执行以下命令
# mycopy 你自己放的具体位置,可自行修改 cp redis.conf /mycopy
进入/mycopy目录下修改redis.conf文件,执行命令如下
cd /mycopy vi redis.conf
将对应位置修改为yes
即可,退出即可。
进行启动:
进入/usr/local/bin
,执行以下命令
redis-server /mycopy/redis.conf
这样redis就在后台启动了,即使关掉窗口redis仍然可以正常使用
我们可以来查看我们的redis进程是否正常启动:
ps -ef | grep redis
启动成功。
使用客户端进行连接:
redis-cli
退出方式:
shutdown exit
到这里,我们的安装及其相关配置工作就完结了
2.3:redis基础知识
2.3.1: 端口号
redis默认端口号为6379
:
由来:6379在是手机按键上MERZ对应的号码,而MERZ取自意大利歌女Alessia Merz的名字。MERZ长期以来被Redis作者antirez及其朋友当作愚蠢的代名词。后来Redis作者在开发Redis时就选用了这个端口。
# 在redis.conf配置文件中 port 6379
2.3.2:数据库
redis默认16个数据库,类似数组下标从0开始,默认使用零号数据库。redis.conf里面有默认配置。
# Set the number of databases. The default database is DB 0, you can select # a different one on a per-connection basis using SELECT <dbid> where # dbid is a number between 0 and 'databases'-1 databases 16
2.3.3:基础命令
select
命令切换数据库
# 不同的库可以存储不一样的数据 127.0.0.1:6379> select 1 OK 127.0.0.1:6379[1]> select 2 OK
dbsize
查看当前库的key数量
127.0.0.1:6379[2]> set name 'qi' OK 127.0.0.1:6379[2]> dbsize (integer) 1 127.0.0.1:6379[2]> select 1 OK 127.0.0.1:6379[1]> dbsize (integer) 0
keys *
可以查看具体的key
127.0.0.1:6379[2]> keys * 1) "name"
flushdb
: 清空当前库
flushall
:清空全部库
127.0.0.1:6379[2]> dbsize (integer) 1 127.0.0.1:6379[2]> flushdb OK 127.0.0.1:6379[2]> dbsize (integer) 0
2.3.4:线程
Redis是单线程+多路IO复用技术
IO多路复用是指使用一个线程来检查多个文件描述符(Socket)的就绪状态,比如调用select和poll函数,传入多个文件描述符,如果有一个文件描述符就绪,则返回,否则阻塞直到超时。