第一章 NoSQL
1-1 什么是 NoSQL
NoSQL = Not Only 仅仅 是 SQL) , 也
解释为non-relational(非关系型数据库)。在 NoSQL 数据库中数据之间是无联系的,无关系的。数据的结构是松散的,可变的。
1-2 为什么使用 NoSQL
关系型数据库的瓶颈:
1) 无法应对每秒上万次的读写请求,无法处理大量集中的高并发操作。关系型数据的是 IO 密集的应用。硬盘 IO 也变为性能瓶颈
2) 表中存储记录数量有限,横向可扩展能力有限,一张表最大二百多列。纵向数据可承受能力也是有限的,一张表的数据到达百万级, 读写的速度就会逐渐的下降。面对海量数据,必须使用主从复制,分库分表。这样的系统架构是难以维护的。
大数据查询 SQL 效率极低,数据量到达一定程度时,查询时间会呈指数级别增长
3) 无法简单地通过增加硬件、服务节点来提高系统性能。数据整个存储在一个数据库中的。多个服务器没有很好的解决办法,来复制这些数据。
4) 关系型数据库大多是收费的,对硬件的要求较高。软件和硬件的成本花费比重较大。
1-3 NoSQL 的优势
-
大数据量,高性能
同样表现优秀。这得益于它的无关系性,数据库的结构简单。关系型数据库(例如 MySQL)使用查询缓存。这种查询缓存在更新数据后, 缓存就是失效了。在频繁的数据读写交互应用中。缓存的性能不高。 -
灵活的数据模型
NoSQL 无需事先为要存储的数据建立字段,随时可以存储自定义的数据格式。而在关系数据库里,增删字段是一件非常麻烦的事情。如果是非常大数据量的表,增加字段简直就是一个噩梦。尤其在快速变化的市场环境中,用户的需求总是在不断变化的。 -
高可用
NoSQL 在不太影响性能的情况,就可以方便的实现高可用的架构。
NoSQL 能很好的解决关系型数据库扩展性差的问题。弥补了关系数据(比如 MySQL)在某些方面的不足,在某些方面能极大的节省开发成本和维护成本。
MySQL 和NoSQL 都有各自的特点和使用的应用场景,两者结合
使用。让关系数据库关注在关系上,NoSQL 关注在存储上
低成本
这是大多数分布式数据库共有的特点,因为主要都是开源软件,
1-4 NoSQL 的劣势
(1) 无关系,数据之间是无联系的。
(1) 不支持标准的 SQL,没有公认的 NoSQL 标准
(3) 没有关系型数据库的约束,大多数也没有索引的概念
(4) 没有事务,不能依靠事务实现ACID.
(5) 没有丰富的数据类型(数值,日期,字符,二进制,大文本等)
第二章 Redis 安装和使用
MySQL 和NoSQL 都有各自的特点和使用的应用场景,两者结合
使用。让关系数据库关注在关系上,NoSQL 关注在存储上
2-1 Redis介绍
Remote Dictionary Server(Redis) 是一个开源的使用 ANSI C 语言编写、支持网络、可基于内存亦可持久化的 Key-Value 数据库. Key 字符类型,其值(value)可以是 字符串(String), 哈希(Map), 列表(list), 集合(sets) 和 有序集合(sorted sets)等类型,每种数据类型有自己的专属命令。所以它通常也被称为数据结构服务器。
Redis 的作者是 Salvatore Sanfilippo,来自意大利的西西里岛,现在居住在卡塔尼亚。目前供职于 Pivotal 公司(Pivotal 是 Spring 框架的开发团队),Salvatore Sanfilippo 被称为Redis 之父。
官网:https://redis.io/
中文:http://www.redis.cn/
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 就拥有了庞大的用户群体。2012年数据库的使用情况调查,结果显示有近12%的公司在使用Redis。国内如新浪微博、知乎,国外如GitHub、Stack Overflow、Flickr、暴雪和Instagram,都是Redis 的用户。
VMware公司从2010年开始赞助Redis的开发,Salvatore Sanfilippo和Pieter Noordhuis也分别于同年的3月和5月加入VMware,全职开发Redis。
Redis的代码托管在GitHub上https://github.com/antirez/redis,开发十分活跃,代码量只有3 万多行。
2-2 Window 上安装Redis
Windows 版本的 Redis 是 Microsoft 的开源部门提供的 Redis。这个版本的 Redis 适合开发人员学习使用,生产环境中使用 Linux系统上的Redis
-
下载
官网:https://redis.io/
windows 版 本 :
https://github.com/MSOpenTech/redis/releases
-
安装
下载的 Redis-x64-3.2.100.zip 解压后, 放到某个目录(例如d:\tools\),即可使用。目录结构:
-
启动
A、 Windows7 系统双击 redis-server.exe 启动Redis
B、 Windows 10 系统
有的机器双击 redis-server.exe 执行失败,找不到配置文件,可以采用以下执行方式:
在 命 令 行 (cmd) 中 按 如 下 方 式 执 行 : D:\tools\Redis-x64-3.2.100>redis-server.exe redis.windows.conf
如图:
-
关闭
按ctrl+c 退出Redis 服务程序。
2-3 Linux 上安装 Redis
-
下载
wget http://219.238.7.66/files/502600000A29C8D5/download.redis. io/releases/redis-3.2.9.tar.gz -
安装
A、上传redis-3.2.9.tar到linux系统。使用Xftp
B、 解压redis-3.2.9.tar 到usr/local 目录
C、 查看解压后的文件
D、 编译Redis 文件,Redis 是使用 c 语言编写的。会使用gcc编译器。
在解压后的Redis 目录下执行 (cd /usr/local/redis-3.2.9) make
命令。
注意事项:
1) make 命令执行过程中可能报错,根据控制台输出的错误信息进行解决
2) 错误一:gcc 命令找不到,是由于没有安装 gcc 导致解决方式:安装gcc 编译器后在执行 make 命令
什么是 gcc ?
gcc 是GNU compiler collection 的缩写,它是 Linux 下一个编译器集合( 相当于 javac ),是 c 或c++程序的编译器。
怎么安装gcc ?
使用yum进行安装gcc 。执行命令:yum -y install gcc
3) 错误二: error: jemalloc/jemalloc.h: No such file or directory
解决方式执行 make MALLOC=libc
开始执行make
出现错误:
没有gcc , cc 编译器 ,解决安装gcc
使用 yum -y install gcc
重新再编译 make 。注意:安装完 gcc 之后,再执行 make,先执行 make distclean 清理一下上次make 后产生的文件。
先执行 make distclean
再执行make
执行make 成功的标志
注意:在make执行之后再执行 make install,该操作则将 src下的许多可执行文件复制到/usr/local/bin 目录下,这样做可以在任意目录执行redis的软件的命令(例如启动,停止,客户端连接服务器等), make install 可以不用执行,看个人习惯。
查看make编译结果,cd src目录
cd src 在执行 ls
3) 启动Redis
启动方式:
① 前台启动 ./redis-server
② 后台启动 ./redis-server &
第①种 前台启动
启动Redis 的服务器端:切换到 src 目录下执行 redis-server 程序
redis 应用以前台的方式启动,不能退出当前窗口, 退出窗口,应用终止。
在其他窗口查看 redis 启动的进程
第②种 后台启动
src目录下执行 ./redis-server & 此时关闭窗口,查看redis进程, 依然存在。
查看redis进程
4) 关闭Redis
关闭方式:
① 使用redis 客户端关闭, 向服务器发出关闭命令
切换到 redis-3.2.9/src/ 目录,执行 ./redis-cli shutdown
推荐使用这种方式, redis 先完成数据操作,然后再关闭。
② kill pid 或 者 kill -9 pid
这种不会考虑当前应用是否有数据正在执行操作,直接就关闭应用。
先使用 ps -ef | grep redis 查出进程号, 在使用 kill pid
2-4 Redis 客户端
Redis 客户端是一个程序,通过网络连接到 Redis 服务器, 在客户端软件中使用 Redis 可以识别的命令,向 Redis 服务器发送命令, 告诉Redis 想要做什么。Redis 把处理结果显示在客户端界面上。通过Redis 客户端和Redis 服务器交互。
Redis 客户端发送命令,同时显示 Redis 服务器的处理结果在。
2-4-1 redis 命令行客户端:
redis-cli (Redis Command Line Interface)是 Redis 自带的基于命令行的Redis 客户端,用于与服务端交互,我们可以使用该客户端来执行redis 的各种命令。
两种常用的连接方式:
A、 直接连接 redis (默认 ip127.0.0.1,端口 6379):./redis-cli
在redis 安装目录\src, 执行 ./redis-cli
此命令是连接本机 127.0.0.1 ,端口 6379 的redis
B、 指定 IP 和端口连接redis:./redis-cli -h 127.0.0.1 -p 6379
-h redis 主机 IP(可以指定任意的 redis 服务器)
-p 端口号(不同的端口表示不同的 redis 应用)
在redis 安装目录\src, 执行 ./redis-cli -h 127.0.0.1 -p 6379
例 1:
2-4-2 redis 远程客户端
Redis Desktop Manager:C++ 编写,响应迅速,性能好。官网地址: https://redisdesktop.com/
github: https://github.com/uglide/RedisDesktopManager
使用文档:http://docs.redisdesktop.com/en/latest/
点击“DOWNLOAD”
A、 安装客户端软件
在 Windows 系统使用此工具,连接 Linux 上或 Windows Redis , 双击此 exe 文件执行安装
安装后启动界面:
B、 使用客户端连接 Linux 的Redis
连接Linux的Reids之前需要修改Redis服务器的配置信息。
Redis服务器有安全保护措施,默认只有本机(安装Redis的那台机器) 能够访问。配置信息存放在Redis安装目录下的redis.conf文件。修 改此文件的两个设置。
远程连接redis需要修改redis主目录下的redis.conf配置文件:
①、bind ip 绑定ip此行注释
②、protected-mode yes 保护模式改为 no
使用 vim 命令修改 redis.conf 文件, 修改文件前备份此文件,执行cp 命令
执 行 vim redis.conf
C、 使用 redis.conf 启动 Redis
修改配置文件后,需要使用配置文件重新启动 Reids,默认不加载配置文件。先关闭已经启动的 Redis ,使用以下命令启动Redis 在Redis 安装目录执行:
./redis-server …/redis.conf &
D、 配置Redis Desktop Manamager(RDM),连接 Redis
在 RDM 的主窗口,点击左下的“Connect to Redis Server”
连接成功后:
2-4-3 redis 编程客户端
A. Jedis
redis 的Java 编程客户端,Redis 官方首选推荐使用Jedis,jedis 是一个很小但很健全的 redis 的 java 客户端。通过 Jedis 可以像使用Redis 命令行一样使用 Redis。
⚫ jedis 完全兼容 redis 2.8.x and 3.x.x
⚫ Jedis 源码:https://github.com/xetorthio/jedis
⚫ api 文档:http://xetorthio.github.io/jedis/
B. redis 的其他编程语言客户端:
C 、 C++ 、 C# 、 Erlang 、 Lua 、 Objective-C 、 Perl 、 PHP 、Python 、Ruby 、Scala 、Go 等 40 多种语言都有连接redis 的编程客户端
2-5 Redis 基本操作命令
redis 默认为 16 个库 (在redis.conf 文件可配置,该文件很重要, 后续很多操作都是这个配置文件) redis 默认自动使用 0 号库
-
沟通命令,查看状态
redis >ping 返 回 PONG
解释:输入 ping,redis 给我们返回PONG,表示 redis 服务运行正常
-
查看当前数据库中key 的数目:dbsize
语法:dbsize
作用:返回当前数据库的 key 的数量。返回值:数字,key 的数量
例:先查索引 5 的key 个数, 再查 0 库的key 个数
-
redis 默认使用 16 个库
Redis 默认使用 16 个库,从 0 到 15。 对数据库个数的修改,在
redis.conf 文件中databases 16
4) 切换库命令:select db
使用其他数据库,命令是 select index
例 1: select 5
-
删除当前库的数据:flushdb
-
redis 自带的客户端退出当前 redis 连接: exit 或 quit
2-6 Redis 的 Key 的操作命令
- keys
语法:keys pattern
作用:查找所有符合模式 pat