NoSQL之Redis配置与优化

一、非关系型数据库产生背景

High performance————对数据库高并发读写需求
Huge Storage———对海量数据高效存储与访问需求
High Scalability && High Availability——对数据库高可扩展性与高可用性需求

关系型数据库 NoSQL 数据库
特点 数据关系模型基于关系模型,结构化存储,完整性约束 非结构化的存储
基于二维表及其之间的联系心需要连接、并、交、差、除等数据操作 基于多维关系模型
采用结构化的查询语言(SQL)做数据读写 具有特有的使用场景
操作需要数据的—致性,需要事务甚至是强—致性
优点 保持数据的—致性(事务处理) 高并发,大数据下读写能力较强
可以进行join等复杂查询 基本支持分布式,易于扩展,可伸缩
通用化,技术成熟 简单,弱结构化存储
缺点 数据读写必须经过sql解析,大量数据、高并发下读写性能不足 join等复杂操作能力较弱
对数据做读写,或修改数据结构时需要加锁,影响并发操作 事务支持较弱
无法适应非结构化存储 通用性差
扩展困难 无完整约束复杂业务场景支持较差
昂贵、复杂

1、关系型数据库和非关系型数据库区别
1.1、数据存储方式不同
关系型和非关系型数据库的主要差异是数据存储的方式。关系型数据天然就是表格式的,因此存储在数据表的行和列中。数据表可以彼此关联协作存储,也很容易提取数据。
与其相反,非关系型数据不适合存储在数据表的行和列中,而是大块组合在一起。非关系型数据通常存储在数据集中,就像文档、键值对或者图结构。你的数据及其特性是选择数据存储和提取方式的首要影响因素。
关系型:依赖于关系模型E-R图,同时以二维表格式的方式存储数据
非关系型:除了以表格形式存储之外,通常会以大块的形式组合在一起进行存储数据
1.2、扩展方式不同
sQL和NoSQL数据库最大的差别可能是在扩展方式上,要支持日益增长的需求当然要扩展。
要支持更多并发量,sQL数据库是纵向扩展,也就是说提高处理能力,使用速度更快速的计算机,这样处理相同的数据集就更快了。因为数据存储在关系表中,操作的性能瓶颈可能涉及很多个表,这都需要通过提高计算机性能来克服。虽然sgL数据库有很大扩展空间,但最终肯定会达到纵向扩展的上限。
而NoSQL数据库是横向扩展的。因为非关系型数据存储天然就是分布式的,NoSQL数据库的扩展可以通过给资源池添加更多普通的数据库服务器(节点)来分担负载。
关系:纵向(天然表格式)
非关:横向(天然分布式)
1.3、对事务性的支持不同
如果数据操作需要高事务性或者复杂数据查询需要控制执行计划,那么传统的SQI数据库从性能和稳定性方面考虑是最佳选择。scL数据库支持对事务(ACID)原子性细粒度控制,并且易于回滚事务。
虽然MoSL数据库也可以使用事务操作,但稳定性方面没法和关系型数据库比较,所以它们真正闪亮的价值是在操作的扩展性和大数据量处理方面。
关系型:特别适合高事务性要求和需要控制执行计划的任务
非关系:此处会稍显弱势,其价值点在于高扩展性和大数据量处理方面

关系型数据库:
实例–>数据库–>表(table)–>记录行(row)、数据字段(column)——》存储数据

非关系型数据库:
实例–>数据库–>集合(collection) -->键值对(key-value)

二、Redis简介

基于内存运行并支持持久化
采用key-value(键值对)的存储形式

1、优点

  • 速度快: 10W QPS,基于内存,C语言实现
  • 单线程 使用epoll (默认)+I/O多路复用机制
  • 持久化 可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。
  • 支持多种数据结构 支持key-value、strings、Lists、Hashes(散列值)、Sets 及ordered Sets等数据类型操作
  • 支持多种编程语言
  • 功能丰富: 支持Lua脚本,发布订阅,事务,pipeline等功能
  • 简单: 代码短小精悍(单机核心代码只有23000行左右),单线程开发容易,不依赖外部库,使用简单
  • 主从复制
  • 支持高可用和分布式
  • 原子性: Redis所有操作都是原子性的,不可分割是一个整体

2、典型应用场景

  • Session 共享:常见于web集群中的Tomcat或者PHP中多web服务器session共享
  • 缓存:数据查询、电商网站商品信息、新闻内容
  • 计数器:访问排行榜、商品浏览数等和次数相关的数值统计场景
  • 微博/微信社交场合:共同好友,粉丝数,关注,点赞评论等
  • 消息队列:ELK的日志缓存、部分业务的订阅发布系统
  • 地理位置: 基于GEO(地理信息定位),实现摇一摇,附近的人,外卖等功能

三、缓存

1、概念

缓存是为了调节速度不一致的两个或多个不同的物质的速度,在中间对速度较慢的一方起到加速作用,比如CPU的一级、二级缓存是保存了CPU最近经常访问的数据,内存是保存CPU经常访问硬盘的数据,而且硬盘也有大小不一的缓存,甚至是物理服务器的raid 卡有也缓存,都是为了起到加速CPU 访问硬盘数据的目的,因为CPU的速度太快了,CPU需要的数据由于硬盘往往不能在短时间内满足CPU的需求,因此CPU缓存、内存、Raid 卡缓存以及硬盘缓存就在一定程度上满足了CPU的数据需求,即CPU 从缓存读取数据可以大幅提高CPU的工作效率。

2、系统缓存buffer与cache:

buffer:缓冲也叫写缓冲,一般用于写操作,可以将数据先写入内存再写入磁盘,buffer 一般用于写缓冲,用于解决不同介质的速度不一致的缓冲,先将数据临时写入到里自己最近的地方,以提高写入速度,CPU会把数据先写到内存的磁盘缓冲区,然后就认为数据已经写入完成看,然后由内核在后续的时间在写入磁盘,所以服务器突然断电会丢失内存中的部分数据。

cache:缓存也叫读缓存,一般用于读操作,CPU读文件从内存读,如果内存没有就先从硬盘读到内存再读到CPU,将需要频繁读取的数据放在里自己最近的缓存区域,下次读取的时候即可快速读取。

3、缓存保存位置及分层结构

  • 用户层: 浏览器DNS缓存,应用程序DNS缓存,操作系统DNS缓存客户端
  • 代理层: CDN,反向代理缓存
  • Web层: Web服务器缓存
  • 应用层: 页面静态化
  • 数据层: 分布式缓存,数据库
  • 系统层: 操作系统cache
  • 物理层: 磁盘cache, Raid Cache

3.1、DNS缓存

浏览器的DNS缓存默认为60秒,即60秒之内在访问同一个域名就不在进行DNS解析

3.2、应用层缓存

Nginx、PHP等web服务可以设置应用缓存以加速响应用户请求,另外有些解释性语言,比如:
PHP/Python/Java不能直接运行,需要先编译成字节码,但字节码需要解释器解释为机器码之后才能执
行,因此字节码也是一种缓存,有时候还会出现程序代码上线后字节码没有更新的现象。所以一般上线
新版前,需要先将应用缓存清理,再上线新版。
另外可以利用动态页面静态化技术,加速访问,比如:将访问数据库的数据的动态页面,提前用程序生成静态
页面文件html 电商网站的商品介绍,评论信息非实时数据等皆可利用此技术实现。

3.3、数据层缓存

  • 分布式缓存服务
    Redis
    Memcached
  • 数据库
    MySQL 查询缓存
    innodb缓存、MYISAM缓存

3.4、硬件缓存

  • CPU缓存(L1的数据缓存和L1的指令缓存)、二级缓存、三级缓存
  • 磁盘缓存:Disk Cache
  • 磁盘阵列缓存: Raid Cache,可使用电池防止断电丢失数据

四、安装Redis

[root@localhost ~]# systemctl disable --now firewalld               关闭防火墙
[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# setenforce 0
[root@localhost ~]# yum install -y gcc gcc-c++ make                 安装环境
[root@localhost ~]# cd /opt                                             
[root@localhost opt]# rz -E                                           导入安装包
rz waiting to receive.
[root@localhost opt]# ls
redis-5.0.7.tar.gz  rh
[root@localhost opt]# tar zxvf redis-5.0.7.tar.gz -C /opt/           解压到/opt
[root@localhost opt]# cd /opt/redis-5.0.7/
[root@localhost redis-5.0.7]# make
[root@localhost redis-5.0.7]# make PREFIX=/usr/local/redis install
[root@localhost redis-5.0.7]# cd /opt/redis-5.0.7/utils/
[root@localhost utils]# ./install_server.sh
。。。一路回车

到这一行需要输入
在这里插入图片描述
在这里插入图片描述
回车后
在这里插入图片描述

[root@localhost utils]# ss -natp |grep redis

在这里插入图片描述

[root@localhost ~]# vim /etc/redis/6379.conf

在这里插入图片描述

在这里插入图片描述

[root@localhost ~]# /etc/init.d/redis_6379 restart
[root@localhost ~]# ss -natp |grep redis

在这里插入图片描述

[root@localhost ~]# ln -s /usr/local/redis/bin/* /usr/local/bin/<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值