NoSQL
NoSQL 是 Not Only SQL 的缩写,意即"不仅仅是 SQL"的意思,泛指非关系型的数据库。强调 Key-Value Stores 和文档数据库的优点。
NoSQL 产品是传统关系型数据库的功能阉割版本,通过减少用不到或很少用的功能,来大幅度提高产品性能
- 不遵循 SQL 标准。 (添加 insert 修改 update )
- 不支持 ACID(ACID,是指在可靠数据库管理系统(DBMS)中,事务(transaction)所应该具有的四个特性:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)这是可靠数据库所应具备的几个特性)。
- 远超于 SQL 的性能。
关系型数据库是结构化的数据库,创建在关系模型(二维表格模型)基础上,一般面向于记录。
过去,关系型数据库(SQL Server、Oracle、MySQL)是数据持久化的唯一选择,但随着发展,关系型数据库存在以下问题。
1.不能满足高性能查询需求
我们使用:Java、.Net 等语言编写程序,是面向对象的。但用数据库都是关系型数据库。存储结构是面向对象的,但是数据库却是关系的,所以在每次存储或者查询数据时,我们都需要做转换。类似 Hibernate、Mybatis 这样的 ORM 框架确实可以简化这个过程,但是在对高性能查询需求时,这些 ORM 框架就捉襟见肘了。
ORM是通过使用描述对象和数据库之间映射的元数据,
只要提供了持久化类与表的映射关系,ORM框架在运行时就能参照映射文件的信息,把对象持久化到数据库中。
2.应用程序规模的变大
网络应用程序的规模变大,需要储存更多的数据、服务更多的用户以及需求更多的计算能力。为了应对这种情形,我们需要不停的扩展。
扩展分为两类:一种是纵向扩展,即购买更好的机器,更多的磁盘、更多的内存等等。另一种是横向扩展,即购买更多的机器组成集群。在巨大的规模下,纵向扩展发挥的作用并不是很大。首先单机器性能提升需要巨额的开销并且有着性能的上限,在 Google 和 Facebook 这种规模下,永远不可能使用一台机器支撑所有的负载。鉴于这种情况,我们需要新的数据库,因为关系数据库并不能很好的运行在集群上。
NoSQL 的适用场景
- 对数据高并发的读写
- 海量数据的读写
- 对数据高可扩展性的
NoSQL 不适用场景
- 需要事务支持
- 基于 sql 的结构化查询存储,处理复杂的关系,需要关系查询。
用不着 sql 的和用了 sql 也不行的情况,考虑用 NoSql
常见的 NoSQL 及区别
1,常见的 NoSQL 数据库
区别
1.Memcached
- 很早出现的 NoSql 数据库
- 数据都在内存中,一般不持久化
- 支持简单的 key-value 模式,支持类型单一
- 一般是作为缓存数据库辅助持久化的数据库(MySQL)
2.Redis
- 几乎覆盖了 Memcached 的绝大部分功能
- 数据都在内存中,支持持久化,主要用作备份恢复
- 除了支持简单的 key-value 模式,还支持多种数据结构的存储,包括 string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和 hash(哈希类型)。
- 一般是作为缓存数据库辅助持久化的数据库
3.MongoDB
- 高性能、开源、模式自由(schema free)的文档型数据库
- 数据都在内存中, 如果内存不足,把不常用的数据保存到硬盘
- 虽然是 key-value 模式,但是对 value(尤其是 json)提供了丰富的查询功能
- 支持二进制数据及大型对象
- 可以根据数据的特点替代 RDBMS,成为独立的数据库。或者配合 RDBMS,存储特定的数
Redis
开源的 key-value 存储系统 端口 6379
Redis 的应用场景
1.数据缓存(提高访问性能)
查询概率 >> 增删改的概率
将一些数据在短时间之内不会发生变化,而且它们还要被频繁访问,为了提高用户的请求速度和降低网站的负载,降低数据库的读写次数,就把这些数据放到缓存中。
2.会话缓存
session cache,主要适用于 session 共享 (string 类型)
3.排行榜/计数器
(NGINX+lua+redis 计数器进行 IP 自动封禁)(zset)
4.消息队列
(构建实时消息系统,聊天,群聊) (list)
5.粉丝 (set)
6.存储对象 (hash)
安装及启动
1.下载 wget
yum -y wget
2.cd /usr/新建文件夹
3.下载redias
wget https://download.redis.io/releases/redis-5.0.14.tar.gz
4.安装 redis 所依赖的环境
yum -y install gcc-c++
5.解压 redis
tar -zxvf redis-5.0.14.tar.gz
6.进入解压目录
cd redis-5.0.14/
7.编译与安装
编译 make
安装 make PREFIX=/usr/新建文件夹 install (如果不加prefix 默认安装到/usr/local/)
安装成功之后查看redis在哪里安装
which redis-server
8.启动redis
cd /usr/local/bin
./redis-server
ctrl + c 终止
配置与连接
1.拷贝配置文件到安装目录的 bin
cp /usr/解压的文件夹/redius-5.0.14/redius.conf /usr/local/bin
2. vim /usr/local/bin/redis.conf
3.设置后台启动
daemonize no 改成 yes
4.设置密码(客户端连接的话需要设置密码 如果不需要连接不用设置)
requirepass root
5.设置远程连接
bind 127.0.0.1 #注释掉绑定本机,才可以远程连接访问
bind 127.0.0.1 修改为 0.0.0.0
6.启动 redis
进入bin目录下 cd /usr/local/bin
启动 ./redis-server ./redis.conf
7.连接redis(没有设置密码可以不输入密码)
./redis-cli -p 6379 -a root
或 ./redis-cli 后 输入 auth root (确认没有修改默认端口并且设置了密码)
8.关闭 redis
./redis-cli shutdown
或 ./redis-cli -p 6379 -a root -h 127.0.0.1 shutdown
9.测试远程
redis-cli -h (虚拟机IP) -p (端口号port) -a (设置的密码)
ping 测试
quit 关闭连接(connection)
外部连接AnotherRedisDesktopManager
AnotherRedisDesktopManager 是一个更快、更好、更稳定的Redis桌面 -LRB- GUI -RRB- 管理客户端,兼容Windows、Mac、Linux,性能出众,轻松加载海量键值
AnotherRedisDesktopManager下载
github:
Releases · qishibo/AnotherRedisDesktopManager (github.com)
Gitee:
AnotherRedisDesktopManager 发行版 - Gitee.com
配置服务启动(使用 systemctl 的方法)
服务启动的时候 daemonize 改为 no
在/lib/systemd/system 目录下创建一个脚本文件 redis.service
[Unit]
Description=Redis
After=network.target
[Service]
ExecStart=/usr/local/bin/redis-server /usr/local/bin/redis.conf
ExecStop=/usr/local/bin/redis-cli -h 127.0.0.1 -p 6379 -a root shutdown
[Install]
WantedBy=multi-user.target
systemctl daemon-reload 刷新配置
systemctl enable redis 开机自启
systemctl status redis redis 状态
systemctl start redis 开启 redis
systemctl stop redis 关闭 redis
systemctl disable redis 禁止开机自启