NoSQL = Not Only SQL(不仅仅是 SQL) ,也解释为 non-relational(非关系型数据库)。在
NoSQL 数据库中数据之间是无联系的,无关系的。数据的结构是松散的,可变的。
关系型数据库的瓶颈:
1)无法应对每秒上万次的读写请求,无法处理大量集中的高并发操作。关系型数据的是
IO 密集的应用。硬盘 IO 也变为性能瓶颈
2)无法简单地通过增加硬件、服务节点来提高系统性能。数据整个存储在一个数据库中
的。多个服务器没有很好的解决办法,来复制这些数据。
3)关系型数据库大多是收费的,对硬件的要求较高。软件和硬件的成本花费比重较大
(1) 大数据量,高性能
NoSQL 数据库都具有非常高的读写性能,尤其在大数据量下,同样表现优秀。这得益
于它的无关系性,数据库的结构简单。关系型数据库(例如 MySQL)使用查询缓存。这
种查询缓存在更新数据后,缓存就是失效了。在频繁的数据读写交互应用中。缓存的性能
不高。NoSQL 的缓存性能要高的多。
(2) 灵活的数据模型
NoSQL 无需事先为要存储的数据建立字段,随时可以存储自定义的数据格式。而在关
系数据库里,增删字段是一件非常麻烦的事情。如果是非常大数据量的表,增加字段简直
就是一个噩梦。尤其在快速变化的市场环境中,用户的需求总是在不断变化的。
(3) 高可用
NoSQL 在不太影响性能的情况,就可以方便的实现高可用的架构。
NoSQL 能很好的解决关系型数据库扩展性差的问题。弥补了关系数据(比如 MySQL)
在某些方面的不足,在某些方面能极大的节省开发成本和维护成本。
MySQL 和 NoSQL 都有各自的特点和使用的应用场景,两者结合使用。让关系数据库
关注在关系上,NoSQL 关注在存储上。
(4) 低成本
这是大多数分布式数据库共有的特点,因为主要都是开源软件,没有昂贵的 License 成
本
(1) 不支持标准的 SQL,没有公认的 NoSQL 标准
(2) 没有关系型数据库的约束,大多数也没有索引的概念
(3) 没有事务,不能依靠事务实现 ACID.
(4) 没有丰富的数据类型(数值,日期,字符,二进制,大文本
等)
Redis 是当今非常流行的基于 KV 结构的作为 Cache 使用的 NoSQL 数据库
Remote Dictionary Server(Redis)是一个开源的使用 C 语言编写、支持网络、可基于内存
亦可持久化的 Key-Value 数据库. Key 字符类型,其值(value)可以是字符串(String), 哈希(Map),
列表(list), 集合(sets) 和有序集合(sorted sets)等类型,每种数据类型有自己的专属命令。所
以它通常也被称为数据结构服务器。
Redis 的作者是 Antirez,来自意大利的西西里岛,现在居住在卡塔尼亚。目前供职于
Pivotal 公司(Pivotal 是 Spring 框架的开发团队),Antirez 被称为 Redis 之父。
Redis的代码托管在GitHub上https://github.com/antirez/redis,开发十分活跃,代码量只
有3万多行。
官网:https://redis.io/
中文:http://www.redis.cn/
Windows 版本的 Redis 是 Microsoft 的开源部门提供的 Redis. 这个版本的 Redis 适合开
发人员学习使用,生产环境中使用 Linux 系统上的 Redis
(1) 下载
官网:https://redis.io/
windows 版本:https://github.com/MSOpenTech/redis/releases
(2) 安装
下载的 Redis-x64-3.2.100.zip 解压后,放到某个目录(例如 d:\tools\),即可使用。
目录结构:
(3) 启动
(1) 安装
2. 解压 redis-4.0.13.tar.gz 到/usr/local 目录
3. 查看解压后的文件
切换目录 cd /usr/local
执行 ll
4. 安装 gcc 编译器。
Redis 是使用 c 语言编写的。使用源文件安装方式,需要编译 c 源文件,会使用 gcc 编译器。
什么是 gcc ?
gcc 是 GNU compiler collection 的缩写,它是 Linux 下一个编译器集合(相当于 javac ),是
c 或 c++程序的编译器。
使用yum进行安装gcc 。执行命令:yum -y install gcc
在解压后的 Redis 目录下执行(cd /usr/local/redis-4.0.13) make 命令。
Redis 客户端是一个程序,通过网络连接到 Redis 服务器,在客户端软件中使用 Redis 可
以识别的命令,向 Redis 服务器发送命令,告诉 Redis 想要做什么。Redis 把处理结果显示在
客户端界面上。通过 Redis 客户端和 Redis 服务器交互。
Redis 客户端发送命令,同时显示 Redis 服务器的处理结果在。
2.4.1 redis 命令行客户端:
redis-cli(Redis Command Line Interface)是 Redis 自带的基于命令行的 Redis 客户端,用
于与服务端交互,我们可以使用该客户端来执行 redis 的各种命令。
两种常用的连接方式:
1 没有gcc
解决: 安装gcc
使用yum进行安装gcc 。执行命令:yum -y install gcc
重新再编译 make 。
注意:安装完 gcc 之后,再执行 make,先执行 make distclean
清理一下上次 make 后产生的文件。
注意:在make执行之后再执行 make install,该操作则将 src下的许多可执行文件复制到/usr/local/bin 目录下,这样做可以在任意目录执行redis的软件的命令(例如启动,停止,客户端连接服务器等), make install 可以不用执行,看个人习惯。
2 error: jemalloc/jemalloc.h: No such file or directory
解决 make MALLOC=libc
3 gcc版本过低
错误原因:gcc版本问题,新版本的。redis6.0以上
server.c:5508:19: error: ‘struct redisServer’ has no member named ‘supervised_mode’
if (server.supervised_mode == SUPERVISED_SYSTEMD) {
^
server.c:5509:24: error: ‘struct redisServer’ has no member named ‘masterhost’
if (!server.masterhost) {
^
server.c:5519:19: error: ‘struct redisServer’ has no member named ‘supervised_mode’
if (server.supervised_mode == SUPERVISED_SYSTEMD) {
^
server.c:5526:15: error: ‘struct redisServer’ has no member named ‘maxmemory’
if (server.maxmemory > 0 && server.maxmemory < 1024*1024) {
^
server.c:5526:39: error: ‘struct redisServer’ has no member named ‘maxmemory’
if (server.maxmemory > 0 && server.maxmemory < 1024*1024) {
^
server.c:5527:176: error: ‘struct redisServer’ has no member named ‘maxmemory’
serverLog(LL_WARNING,"WARNING: You specified a maxmemory value that is less than 1MB (current value is %llu bytes). Are you sure this is what you really want?", server.maxmemory);
^
server.c:5530:31: error: ‘struct redisServer’ has no member named ‘server_cpulist’
redisSetCpuAffinity(server.server_cpulist);
解决办法
#升级到 5.3及以上版本
yum -y install centos-release-scl
yum -y install devtoolset-9-gcc devtoolset-9-gcc-c++ devtoolset-9-binutils
scl enable devtoolset-9 bash
#注意:scl命令启用只是临时的,推出xshell或者重启就会恢复到原来的gcc版本。
#如果要长期生效的话,执行如下:
echo "source /opt/rh/devtoolset-9/enable" >>/etc/profile