一.noSql
指的是非关系型的数据库。NoSQL有时也称作Not Only SQL的缩写,是对不同于传统的关系型数据库的数据库管理系统的统称。
NoSQL用于超大规模数据的存储。(例如谷歌或Facebook每天为他们的用户收集万亿比特的数据)。这些类型的数据存储不需要固定的模式,无需多余操作就可以横向扩展。
RDBMS vs NoSQL
RDBMS
- 高度组织化结构化数据
- 结构化查询语言(SQL) (SQL)
- 数据和关系都存储在单独的表中。
- 数据操纵语言,数据定义语言
- 严格的一致性
- 基础事务
NoSQL
- 代表着不仅仅是SQL
- 没有声明性查询语言
- 没有预定义的模式
-键 - 值对存储,列存储,文档存储,图形数据库
- 最终一致性,而非ACID属性
- 非结构化和不可预知的数据
- CAP定理
- 高性能,高可用性和可伸缩性
NoSQL的优点/缺点
优点:
- 高可扩展性
- 分布式计算
- 低成本
- 架构的灵活性,半结构化数据
- 没有复杂的关系
缺点:
- 没有标准化
- 有限的查询功能(到目前为止)
- 最终一致是不直观的程序
NoSQL 数据库分类
类型 | 特点 | |
列存储 | Hbase Cassandra Hypertable | 顾名思义,是按列存储数据的。最大的特点是方便存储结构化和半结构化数据,方便做数据压缩,对针对某一列或者某几列的查询有非常大的IO优势。 |
文档存储 | MongoDB CouchDB | 文档存储一般用类似json的格式存储,存储的内容是文档型的。这样也就有有机会对某些字段建立索引,实现关系数据库的某些功能。 |
key-value存储 | Tokyo Cabinet / Tyrant Berkeley DB MemcacheDB Redis | 可以通过key快速查询到其value。一般来说,存储不管value的格式,照单全收。(Redis包含了其他功能) |
图存储 | Neo4J FlockDB | 图形关系的最佳存储。使用传统关系数据库来解决的话性能低下,而且设计使用不方便。 |
对象存储 | db4o Versant | 通过类似面向对象语言的语法操作数据库,通过对象的方式存取数据。 |
xml数据库 | Berkeley DB XML BaseX | 高效的存储XML数据,并支持XML的内部查询语法,比如XQuery,Xpath。 |
二.redis概述
Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库。
Redis 与其他 key - value 缓存产品有以下三个特点:
Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。
Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。
Redis支持数据的备份,即master-slave模式的数据备份。
Redis应用场景: 1.缓存 2、任务队列 3、应用排行榜 4、网站访问统计 5、数据过期处理
6、分布式集群架构中的Session 分离
三.redis的安装
Window 下安装
下载地址:https://github.com/MSOpenTech/redis/releases。
Redis-x64-xxx.zip压缩包到 C 盘,解压后,将文件夹重新命名为 redis。
cmd 窗口 使用cd命令切换目录到 C:\redis 运行 redis-server.exe redis.windows.conf
如果想方便的话,可以把 redis 的路径加到系统的环境变量里,这样就省得再输路径了,后面的那个 redis.windows.conf 可以省略,如果省略,会启用默认的。输入之后,会显示如下界面:
这时候另启一个cmd窗口,原来的不要关闭,不然就无法访问服务端了。
redis-cli.exe -h 127.0.0.1 -p 6379
set myKey abc
get myKey
Linux 下安装
准备工作: 需要通过gcc编译工具,所以有的人在make后会报错,我们需要执行以下命令
yum install gcc-c++
两次输入 y 安装完成 即可make
下载地址:http://redis.io/download,下载最新文档版本。
本教程使用的最新文档版本为 2.8.17,下载并安装:
$ wget http://download.redis.io/releases/redis-4.0.6.tar.gz
$ tar xzf redis-4.0.6.tar.gz
$ cd redis-4.0.6
$ make
make完后 redis-2.8.17目录下会出现编译后的redis服务程序redis-server,还有用于测试的客户端程序redis-cli,两个程序位于安装目录 src 目录下:
下面启动redis服务.
$ cd src
$ ./redis-server
注意这种方式启动redis 使用的是默认配置。也可以通过启动参数告诉redis使用指定配置文件使用下面命令启动。
$ cd src
$ ./redis-server ../redis.conf
redis.conf是一个默认的配置文件。我们可以根据需要使用自己的配置文件。
启动redis服务进程后,就可以使用测试客户端程序redis-cli和redis服务交互了。 比如:
$ cd src
$ ./redis-cli
redis> set foo bar
OK
redis> get foo
"bar"
测试案例:
新建java项目,导入所需jar包
commons-pool2-2.5.0.jar
jedis-2.9.0.jar
package jedis;
import org.junit.Test;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
public class JedisDemo {
@Test
public void demo1() {
//1.设置ip地址及端口
Jedis jedis=new Jedis("192.168.8.134",6379);
//保存数据
jedis.set("name", "java");
System.out.println(jedis.get("name"));
//释放资源
jedis.close();
}
@Test
/**
* 通过jedis连接池来获取对象
*/
public void demo2() {
//获取连接池配置对象
JedisPoolConfig config=new JedisPoolConfig();
//设置最大连接数
config.setMaxTotal(30);
//设置最大空闲连接数
config.setMaxIdle(10);
//获得连接池
JedisPool jedisPool=new JedisPool(config,"192.168.8.134" ,6379);
//获得对象
Jedis jedis=jedisPool.getResource();
jedis.set("name", "redis");
String value=jedis.get("name");
System.out.println(value);
if (jedis!=null) {
jedis.close();
}
if (jedisPool!=null) {
jedisPool.close();
}
}
}
此时我们发现报连接拒绝错误:
1.因为我们没更改防火墙,所以我们要做的是打开防火墙配置文件
vim /etc/sysconfig/iptables
配置如下
可以在端口号22处yy 再按p ,黏贴复制,然后将端口号改为6379
保存退出
重启防火墙 service iptables restart
出现了一个小插曲,当时设置的时候6379多打了一个9结果在测试的时候报连接超时错误
2.此刻若发现还是报拒绝错误,需要更改redis.conf文件
vim redis.conf
将此处的127.0.0.1改为0.0.0.0 ,如图
此时必须重启redis服务才能生效
关闭redis服务
./redis-cli -h 127.0.0.1 -p 6379 shutdown
启动redis服务
./redis-server ../redis.conf