欢迎各位彦祖与热巴畅游本人专栏与博客
你的三连是我最大的动力
以下图片仅代表专栏特色 [点击箭头指向的专栏名即可闪现]
专栏跑道一
➡️网络空间安全——全栈前沿技术持续深入学习
专栏跑道二
➡️ 24 Network Security -LJS
专栏跑道三
➡️ MYSQL REDIS Advance operation
专栏跑道四
➡️HCIP;H3C-SE;CCIP——LJS[华为、华三、思科高级网络]
专栏跑道五
➡️RHCE-LJS[Linux高端骚操作实战篇]
专栏跑道六
➡️数据结构与算法[考研+实际工作应用+C程序设计]
专栏跑道七
➡️RHCSA-LJS[Linux初级及进阶骚技能]
上节回顾
1.NoSQL简介
1.1 什么是NoSQL?
NoSQL,指的是非关系型的数据库。NoSQL有时也称作Not Only SQL的缩写,是对不同于传统的关系型数据库的数据库管理系统的统称。
NoSQL用于超大规模数据的存储。
(例如谷歌或Facebook每天为他们的用户收集万亿比特的数据)。这些类型的数据存储不需要固定的模式,无需多余操作就可以横向扩展
1.2 我们为什么使用NoSQL ?
- 今天我们可以通过第三方平台(如:Google,Facebook等)可以很容易的访问和抓取数据。
- 用户的个人信息,社交网络,地理位置,用户生成的数据和用户操作日志已经成倍的增加。我们如果要对这些用户数据进行挖掘,那SQL数据库已经不适合这些应用了, NoSQL数据库的发展也却能很好的处理这些大的数据。
- 随着互联网 web2.0 网站的兴起,传统的关系数据库在应付 web2.0 网站,特别是超大规模和高并发的SNS 类型的 web2.0 纯动态网站已经显得力不从心,暴露了很多难以克服的问题,而非关系型的数据库 则由于其本身的特点得到了非常迅速的发展。
- NoSQL 数据库的产生就是为了解决大规模数据集合多重数据种类带来的挑战,尤其是大数据应用难题。
1.3 RDBMS vs NoSQL
RDBMS vs NoSQL
NoSQL | RDBMS |
代表着不仅仅是SQL | 高度组织化结构化数据 |
没有声明性查询语言 | 结构化查询语言(SQL) |
没有预定义的模式 | 数据和关系都存储在单独的表中 |
键 - 值对存储,列存储,文档存储,图形数据库 | 数据操纵语言,数据定义语言 |
最终一致性,而非ACID属性 | 严格的一致性 |
非结构化和不可预知的数据 | 基础事务 |
CAP定理 | |
高性能,高可用性和可伸缩性 |
1.4 NoSQL 产品
常见的NoSQL产品:redis、memcache、mongdb等
编辑
NoSQL产品的显著特点:
1、NoSQL产品一般不使用严格的表关系;
2、NoSQL产品的数据查询一般不用在sql上;
1.5 NoSQL 数据库分类
NoSQL 数据库分类
键值数据库 | 列族数据库 | 文档数据库 | 图形数据库 | |
应用 | 内容缓存 | 分布式数据存储与管理 | 存储、索引并管理面向文档的数据或者类似的半结构化数据 | 大量复杂、互连接、低结构化的图结构场合,如社交网络、推荐系统等 |
缺点 | 无法存储结构化信息、条件查询效率较低 | 缺乏统一的查询语言 | 复杂性高、只能支持一定的数据规模 | |
优点 | 扩展性好、灵活性好、大量写操作时性能高 | 查找速度快、可扩展性强、容易进行分布式扩展、复杂性低 | 性能好、灵活性高、复杂性低、数据结构灵活 | 活性高、支持复杂的图形算法、可用于构建复杂的关系图谱 |
1.6NoSQL 存储类型及特点
NoSQL存储类型及特点
类型 | 部分代表 | 特点 |
列存 储 | Hbase Cassandra Hypertable | 顾名思义,是按列存储数据的。最大的特点是方便存储结构化 和半结构化数据,方便做数据压缩,对针对某一列或者某几列 的查询有非常大的IO优势。 |
文档 存储 | MongoDB CouchDB | 文档存储一般用类似json的格式存储,存储的内容是文档型 的。这样也就有有机会对某些字段建立索引,实现关系数据库 的某些功能。 |
keyvalue 存储 | Tokyo Cabinet / Tyrant Berkeley DB MemcacheDB Redis | 可以通过key快速查询到其value。一般来说,存储不管value 的格式,照单全收。(Redis包含了其他功能) |
图存储 | Neo4J FlockDB | 图形关系的最佳存储。使用传统关系数据库来解决的话性能低 下,而且设计使用不方便。 |
对象 存储 | db4o Versant | 通过类似面向对象语言的语法操作数据库,通过对象的方式存 取数据。 |
xml 数据 库 | Berkeley DB XML BaseX | 高效的存储XML数据,并支持XML的内部查询语法,比如 XQuery,Xpath。 |
2.Redis
2.1 Redis简介
(1)全称:mote ctionary erver(远程字典服务器)。是完全开源免费的,用C语言编写的, 遵守 BSD协议。是一个高性能的(key/value)分布式内存数据库,基于内存运行并支持持久化的NoSQL数据库,是当前最热门的NoSql数据库之一,也被人们称为数据结构服务器。
(2)Redis 与其他 key - value 缓存有以下三个特点
- Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用
- Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储
- Redis支持数据的备份,即master-slave模式的数据备份
2.2 Redis作用
Redis作用
内存存储和持久化:redis支持异步将内存中的数据写到硬盘上,同时不影响继续服务 |
取最新N个数据的操作,如:可以将最新的10条评论的ID放在Redis的List集合里面 |
模拟类似于HttpSession这种需要设定过期时间的功能 |
发布、订阅消息系统 |
定时器、计数器 |
2.3 Redis下载网站
2.4Redis使用群体
目前全球最大的 Redis 用户是新浪微博,在新浪有 200 多台物理机,400 多个端口正在运行着 Redis, 有 +4G 的数据跑在 Redis 上来为微博用户提供服务。 编辑
2.5Redis的部署场景
1.应用程序直接访问 Redis 数据库
2. 应用程序直接访问 Redis,只有当 Redis 访问失败时才访问 MySQL
2.6Redis与其他数据库和软件的对比【了解一下;后续详解】
数据库和缓存服务器的特性与功能
名称 | 类型 | 数据存储选项 | 查询类型 | 附加功能 |
MySQL | 关系数据库 | 每个数据库可以包 含多个表,每个表 可以包含多个行; 可以处理多个表的 视图(view);支 持空间(spatial) 和第三方扩展 | SELECT、 INSERT、 UPDATE、 DELETE、函数、 存储过程 | 支持ACID性质 (需要使用 InnoDB),主从 复制和主主复制 (master/master replication) |
memcached | 使用内存存 储的键值缓 存 | 键值之间的映射 | 创建命令、读取 命令、更新命 令、删除命令以 及其他几个命令 | 为提升性能而设的 多线程服务器 |
MySQL | 关系数据库 | 每个数据库可以包 含多个表,每个表 可以包含多个行; 可以处理多个表的 视图(view);支 持空间(spatial) 和第三方扩展 | SELECT、 INSERT、 UPDATE、 DELETE、函数、 存储过程 | 支持ACID性质 (需要使用 InnoDB),主从 复制和主主复制 (master/master replication) |
PostgreSQL | 关系数据库 | 每个数据库可以包 含多个表,每个表 可以包含多个行; 可以处理多个表的 视图;支持空间和 第三方扩展;支持 可定制类型 | SELECT、 INSERT、 UPDATE、 DELETE、内置函 数、自定义的存 储过程 | 支持ACID性质, 主从复制,由第三 方支持的多主复制 (multi-master replication) |
MongoDB | 使用硬盘存 储(ondisk)的非 关系文档存 储 | 每个数据库可以包 含多个表,每个表 可以包含多个无 schema(schemaless)的BSON文档 | 创建命令、读取 命令、更新命 令、删除命令、 条件查询命令等 | 支持map-reduce 操作,主从复制, 分片,空间索引 (spatial index) |
3. Redis安装【基于CentOS 7.3 x86-64 系统安装 】
S1:rpm包安装
配置epel的yum源
yum install http://mirrors.163.com/centos/7.3.1611/extras/x86_64/Packages/epel-release-7- 9.noarch.rpm
在线yum安装
yum install redis #安装完毕目前是redis-3.2.3-1.el7.x86_64.rpm
安装最新版本使用remi
yum install ftp://rpmfind.net/linux/remi/enterprise/7/remi/x86_64/redis4.0.1-1.el7.remi.x86_64.rpm
启动服务
systemctl start redis systemctl enable redis
验证测试
[root@localhost ~]# netstat -lnupt | grep :6379 tcp 0 0 127.0.0.1:6379 0.0.0.0:* LISTEN 11413/redis-server [root@localhost ~]# ps -ef | grep redis redis 11413 1 0 10:46 ? 00:00:03 /usr/bin/redis-server 127.0.0.1:6379 [root@localhost ~]# lsof -i tcp:6379 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME redis-ser 11413 redis 6u IPv4 29352 0t0 TCP localhost:6379 (LISTEN)
登录
[root@localhost ~]# redis-cli 127.0.0.1:6379> help redis-cli 4.0.1 To get help about Redis commands type: "help @<group>" to get a list of commands in <group> "help <command>" for help on <command> "help <tab>" to get a list of possible help topics "quit" to exit To set redis-cli preferences: ":set hints" enable online hints ":set nohints" disable online hints Set your preferences in ~/.redisclirc 127.0.0.1:6379> quit
S2:源码安装
下载
[root@localhost ~]# curl -O http://download.redis.io/releases/redis4.0.1.tar.gz
解压
[root@localhost ~]# tar xf redis-4.0.1.tar.gz -C /usr/local/src/
安装
[root@localhost ~]# cd /usr/local/src/redis-4.0.1/ [root@localhost redis-4.0.1]# yum install gcc gcc-c++ make -y [root@localhost redis-4.0.1]# make [root@localhost redis-4.0.1]# make install
启动
[root@localhost redis-4.0.1]# mkdir -p /etc/redis [root@localhost redis-4.0.1]# cp redis.conf /etc/redis [root@localhost redis-4.0.1]# cd [root@localhost ~]# sed -i.bak 's/daemonize no/daemonize yes/' /etc/redis/redis.conf [root@localhost ~]# redis-server /etc/redis/redis.conf 5448:C 12 Aug 11:54:21.743 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo 5448:C 12 Aug 11:54:21.743 # Redis version=4.0.1, bits=64, commit=00000000, modified=0, pid=5448, just started 5448:C 12 Aug 11:54:21.743 # Configuration loaded
S3:Redis命令行客户端
发送命令
redis-cli -h 127.0.0.1 -p 6379 redis-cli PING redis-cli
命令返回值
状态回复,e.g. >PING2.3 Redis配置 错误恢复, e.g. >ECMD 整数回复, e.g. >INCR foo 字符串回复,e.g. >GET foo >GET notexists` 多行字符串回复,e.g. >KEYS *
S4:源码配置服务脚本:
#1、创建用户和组 groupadd -g 935 -r redis useradd -u 935 -g 935 -r -d /var/lib/redis -c “redis server” -s /sbin/nologin redis mkdir -p /var/lib/redis chown -R redis /var/lib/redis chmod -R 700 /var/lib/redis
#2、修改配置文件 /etc/redis/redis.conf dir /var/lib/redis/ daemonize no
#3、创建服务脚本 [root@localhost ~]# vim /usr/lib/systemd/system/redis.service [Unit] Description=Redis persistent key-value database After=network.target [Service] ExecStart=/usr/local/bin/redis-server /etc/redis/redis.conf --daemonize no ExecStop=/usr/bin/kill -9 `pidof redis-server` User=redis Group=redis RuntimeDirectory=redis RuntimeDirectoryMode=0755 [Install] WantedBy=multi-user.target [root@localhost ~]# systemctl daemon-reload【重新加载单元文件/更新服务状态】