什么是NoSQL
NoSQL = Not Only SQL
非关系型的数据库
为什么需要NoSQL
高并发读写
海量数据的高效率存储和访问
高可扩展性和高可用性
NoSQL数据库的四大分类
键值对存储(Redis):优势是快速查询,劣势是存储缺少结构化
列存储(HBase):优势查找速度快,劣势是相对功能局限
文档数据库(MongoDB):优势数据结构要求不是特别严格,劣势是查询性能不够高,缺少统一语法。
图形数据库:优势是利用图结构的相关算法,劣势是需要对整个图做计算才能得到相对的结果,不容易做分布式的集群方案。
四类NoSQL数据库比较
NoSQL的特点
易扩展:没有传统SQL的各种关系
灵活的数据模型
大数据量,高性能
高可用
总结:NoSQL的在目前这种大的网络数据量下,为了适应web2.0而被广泛的使用,其中使用最多的就是Redis。
第二章 Redis概述
Redis的由来
2008年,意大利的一家创业公司Merzia推出了一款基于MySQL的网站实时统计系统 LLOOGG,然而没过多久该公司的创始人 Salvatore Sanfilippo 便对MySQL 的性能感到失望,于是他决定亲自为 LLOOGG 量身定做一个 数据库,并并于 2009 年开发完成,这个数据库就是Redis。不过Salvatore Sanfilippo并不满足只将 Redis 用于LLOOGG这一款产品,而是希望更多的人使用它,于是在同一年 Salvatore Sanfilippo 将 Redis 开源发布,并开始和 Redis 的另一名主要的代码贡献者 Pieter Noordhuis 一起继续着 Redis 的开发,直到今天。Salvatore Sanfilippo 自己也没有想到,短短的几年时间,Redis就拥有了庞大的用户群体。Hacker News 在 2012 年发布了一份数据库的使用情况调查,结果显示有近 12% 的公司在使用 Redis。国内如 新浪微博、街旁网、知乎网,国外如GitHub、Stack Overflow、Flickr等都是Redis的用户。VMware 公司从2010年开始赞助 Redis 的开发,Salvatore Sanfilippo和 Pieter Noordhuis 也分别在3月和5月加入VMware,全职开发Redis。
Redis是一款用C语言开发的,开源的,高性能的,键值对的数据库。
高性能键值对数据库,支持的键值数据类型
字符串类型
列表类型
有序集合类型
散列类型
集合类型
Redis的应用场景
缓存
任务队列
网站访问统计
数据过期的处理
分布式集群架构中的session分离
第三章 Redis的安装
搭建环境(macOS High Sierra)
虚拟机:Parallels Desktop
Linus系统:CentOS Linux release 7.2.1511 (Core)
Mac系统自带SSH,无需安装客户端。打开SSH方法:点击Mac顶部菜单-->“苹果”图标-->最近使用的项目-->终端--输入 open ~/.ssh 。
CentOS安装Redis
Redis是C语言开发,安装Redis需要先将官网上下载的源码进行编译,编译依赖gcc环境。
在线安装gcc:yum install gcc-c++
如果提示是否安装,输入:y
安装成功会提示:
安装Redis:
Mac与Windows不同,不需要可视化软件进行拖拽,可以通过终端进行传输,也可以直接通过Linus下命令行,在Linus系统进行下载。
1.下载源码,解压后编译源码 wget http://download.redis.io/releases/redis-2.8.3.tar.gz tar xzf redis-2.8.3.tar.gz cd redis-2.8.3 make 2.编译完成后,在src目录下,有四个可执行文件,redis-server,redis-benchmark,redis-cli,redis.conf。然后拷贝到一个目录下。 mkdir /usr/redis cp redis-server /usr/redis cp redis-benchmark /usr/redis cp redis-cli /usr/redis cp redis.conf /usr/redis //redis.conf 与src在统计目录下 cd /usr/redis 3.启动Redis服务(前端启动) ./redis-server 使用command+c 停止前端启动方式 4.启动Redis服务(后端启动) 后端启动需要修改redis.conf文件内容:vim redis.conf 找到daemonize no,把no改为yes,然后退出并保存文件。 ./redis-server redis.conf --->启动Redis ps -ef | grep -i redis 命令输入之后可以看到默认端口6379 root 31091 1 0 18:25 ? 00:00:00 ./redis-server *:6379 root 31366 28640 0 18:26 pts/0 00:00:00 grep --color=auto -i redis 5.停止Redis服务 ./redis-cli shutdown 6.验证连接 ./redis-cli : 启动Redis客户端 得到<127.0.0.1:6379> 这时候在输入ping 得到PONG 证明连接成功 7.Redis存入数据 set/get(键值对的类型): set name ergou get name key * :查看Redis中所有的key
第四章 Jedis入门
在实际开发中,我们通常使用一些程序向Redis中保存数据,或者是获取数据,所以我们要学习Jedis,Jedis就是Redis的一个连接的基本操作。
Jedis介绍
Jedis是Redis官网首选的Java客户端的开发包
Https://github.com/xetorthio/jedis Jedis托管到github上的下载地址
构建Java项目,测试jedis
所需jar包:
commons-pool2-2.3.jar
jedis-2.7.2.jar
jar包下载地址:http://jareye.com/jar/Ef5F0Tpg.html?q=commons-pool#download
找到Linus的防火墙设置文件,在编辑:vim /etc/sysconfig/iptables
找到文件中的:A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT ,把这行复制(yy),再粘贴到这行下面,修改端口号为6379,如下:-A INPUT -p tcp -m state --state NEW -m tcp --dport 6379 -j ACCEPT。
然后重启防火墙设置:service iptables restart,如果出现:Redirecting to /bin/systemctl restart iptables.service,意思是重启防火墙失效,那是因为CenterOS在版本升级之后就修改了service命令。如下:systemctl restart iptables.service,然后iptables -L。
Jedis发送/获取数据的两种方式
jedis单实例的测试 :
public void demo1() { // 1.设置IP地址和端口; Jedis jedis = new Jedis("192.168.30.130", 6379); // 2.保存数据; jedis.set("name", "王二狗"); // 3.获取数据; String value = jedis.get("name"); System.out.println(value); // 4.释放资源 jedis.close(); }
连接池方式连接 :
public void demo2() { //获得连接池配置的对象 JedisPoolConfig config = new JedisPoolConfig(); //设置最大连接数 config.setMaxTotal(30); //设置最大的空闲连接数 config.setMaxIdle(10); //获得连接池 JedisPool jedispool = new JedisPool(config,"192.168.30.130",6379); //获得核心对象 Jedis jedis = null; try { //通过连接池获得连接 jedis = jedispool.getResource(); //设置数据 jedis.set("name", "cnmd"); //获得数据 String value = jedis.get("name"); System.out.println(value); } catch (Exception e) { // TODO: handle exception e.printStackTrace(); }finally { if(jedis != null) { jedis.close(); } if(jedispool != null) { jedispool.close(); } } }