redits

本文探讨了关系型和非关系型数据库的区别,重点介绍了Redis,一个高性能的NoSQL数据库。Redis具有高速读写能力,支持多种数据类型,并提供持久化选项。文章详细讲解了Redis的安装、常用命令及性能管理,包括内存和CPU使用情况,强调了其在缓存、数据存储和高并发场景下的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

关系型数据库和非关系型数据库的区别

(1) 数据存储方式不同
关系型和非关系型数据库的主要差异是数据存储的方式。关系型数据天然就是表格式的,因此存储在数据表的行和列中。数据表可以彼此关联协作存储,也很容易提取数据。
与其相反,非关系型数据不适合存储在数据表的行和列中,而是大块组合在一起。非关系型数据通常存储在数据集中,就像文档、键值对或者图结构。你的数据及其特性是选择数据存储和提取方式的首要影响因素。
①关系型:依赖于关系模型E-R图,同时以表格式的方式存储数据
②非关系型:除了以表格形式存储之外,通常会以大块的形式组合在一起进行存储数据
(2) 扩展方式不同
SQL和NoSQI数据库最大的差别可能是在扩展方式上,要支持日益增长的需求当然要扩展。要支持更多并发量,SQI数据库是纵向扩展,也就是说提高处理能力,使用速度更快速的计算机,这样处理相同的数据集就更快了。因为数据存储在关系表中,操作的性能瓶颈可能涉及很多个表,这都需要通过提高计算机性能来克服。虽然SQI数据库有很大扩展空间,但最终肯定会达到纵向扩展的上限。
而NoSQI数据军是横向扩展的。因为非关系型数据存储天然就是分布式的,NoSQI数据库的扩展可以通过给资源池添加更多普通的数据库服务器(节点)来分担负载。
① 关系:纵向(天然表格式)
② 非关:横向(天然分布式)

(3)对事务性的支持不同
如果数据操作需要高事务性或者复杂数据查询需要控制执行计划,那么传统的SQI数据库从性能和稳定性方面考虑是最佳选择。SQI数据库支持对事务原子性细粒度控制,并且易于回滚事务。
虽然NoSQI数据库也可以使用事务操作,但稳定性方面没法和关系型数据库比较,所以它们真正闪亮的价值是在操作的扩展
性和大数据量处理方面。
①关系型:特别适合高事务性要求和需要控制执行计划的任务
②非关系:此处会稍显弱势,其价值点在于高扩展性和大数据量处理方面

(4)关系型数据库和非关系型数据库都有各自的特点与应用场景,两者的紧密结合将会给Web2.0的数据库发展带来新的思路。让关系数据库关注在关系上,非关系型数据库关注在存储上。例如,在读写分离的MySQI数据库环境中,可以把经常访问的数据存储在非关系型数据库中,提升访问速度。
关系数据库:保存位置 磁盘
非关数据库(内存/缓存数据库) :保存的位置 是缓存/内存(效率、速度块)特殊的是redis,因为redis可以将内存中的
数据保存在磁盘中

总结

关系型数据库
实例→数据库→表→记录行、数据字段→存储数据

非关系型数据库
实例→数据库→集合→键值对(key-value)
非关系数据库不需要手动建数据库和集合

Redis简介

Redis是一个开源的、使用c语言编写的NoSQL数据库。
Redis基于内存运行并支持持久化(支持存储在磁盘),采用key-value(键值对)的存储形式,是目前分布式架构中不可或缺的一环。
Redis服务器程序是单进程模型
Redis服务在一.台服务器上可以同时启动多个Redis进程,Redis的实际处理速度则是完全依靠于主进程的执行效率。若在服务器.上只运行一个Redis进程, 当多个客户端同时访问时,服务器的处理能力是会有一-定程度的下降;若在同一台服务器上开启多个Redis进程,Redis在提高并发处理能力的同时会给服务器的CPU造成很大压力。即:在实际生产环境中,需要根据实际的需求来决定开启多少个Redis进程。
建议可以开2个进程
原因:
1、备份
2、抗高并发的同时尽量不给CPU造成太大的压力
若对高并发要求更高一- .些,可能会考虑在同一台服务器上开启多个进程。若CPU资源比较紧张,采用单进程即可。
在这里插入图片描述
不同的进程所用的资源池是相互独立的,当出现几个或多个redis就需要互相访问对方的资源池(上下文切换),这就非常占用cpu资源
频繁进行主进程之间的切换/通讯会很消耗cpu资源,所以redis默认开启的是单进程,并且需要根据并发量业务需求来开启对应的主进程数量,建议值为2

Redis的优点

(1) 具有极高的数据读写速度:数据读取的速度最高可达到110000 次/s,数据写入速度最高可达到81000 次/s。
(2) ★★支持丰富的数据类型:支持key-value、 Strings、 Lists、 Hashes (散列值)、Sets 及Ordered Sets等数据类型操作。
ps:
string 字符串(可以为整形、浮点和字符型,统称为元素)
list 列表: (实现队列,元素不唯-一, 先入先出原则)
set 集合: (各不相同的元素)
hash
hash散列值: (hash的key必须是唯- 的)
set /ordered sets 集合/有序集合
(3)★★支持数据的持久化:可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。
(4)原子性: Redis所有 操作都是原子性的。
(5)支持数据备份:即master-salve 模式的数据备份。

Redis作为基于内存运行的数据库,缓存是其最常应用的场景之一。 除此之外,Redis常见应用场景还包括获取最新N个数据的操作、排行榜类应用、计数器应用、存储关系、实时分析系统、日志记录。

部署Redis

安装redis

安装依赖包

yum install -y gcc gcc-c++ make

解压安装包

[root@localhost opt]# tar xzvf redis-5.0.7.tar.gz

由于安装包理由makefile文件不需要编译,直接安装

[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 utils/
[root@localhost utils]# ./install_server.sh	   #一直回车即可

在这里插入图片描述
创建软连接

ln -s /usr/local/redis/bin/* /usr/local/bin/

redis服务控制

/etc/init.d/redis_6379 stop		#停止
/etc/init.d/redis_6379 start	    #启动
/etc/init.d/redis_6379 restart	#重启
/etc/init.d/redis_6379 status      #查看状态

修改配置添加监听主机地址

vim /etc/redis/6379.conf

在这里插入图片描述
重启redis
在这里插入图片描述

Redis的命令工具

redis-server:用于启动Redis的工具
redis-benchmark:用于检测Redis在本机的运行效率
redis-check-aof:修复AOF持久化文件
redis-check-rdb:修复RDB持久化文件
redis-cli:Redis命令行工具
redis-cli -h 远程主机ip -p 服务端口号 -a 指定密码
如果没有设置数据库密码,可以省略-a选项,若不添加任何选项表示,这使用127.0.0.1:6379连接本机上的Redis数据库

Redis测试工具redis-benckmark

不需要安装,redis自带
redis-benckmark选项

-h :指定服务器主机名
-P :指定服务器端口
-s :指定服务器socket(套接字)
-c :指定并发连接数
-n :指定请求数
-d :以字节的形式指定SET/GET值的数据大小
-k :1=keep alive 0=reconnect
-r :SET/GET/INCR 使用随机key,SADD使用随机值
-p :通过管道传输<numreq>请求
-q :强制退出redis
-l :生成循环,永久执行测试
-t :仅运行以逗号分割的测试命令列表
-I :Idle模式,仅打开N哥idle连接并等待

向主机发送100个并发连接和1W个请求测试性能

[root@redis utils]# redis-benchmark -h 192.168.59.129 -p 6379 -c 100 -n 10000

在这里插入图片描述
测试存储大小为100字节的数据包的性能

[root@redis utils]# redis-benchmark -h 192.168.59.129 -p 6379 -q -d 100

测试本机redis在进行set和lpush操作时的性能

[root@redis utils]# redis-benchmark -t set,lpush -n 10000 -q

在这里插入图片描述

Redis数据库常用命令

存放和获取数据

set key :存放数据   
get key : 获取数据
keys n?   查询键
keys n*

在这里插入图片描述
redis-cli命令行工具

redis-cli -h host -p port -a password   #若不添加host默认使用本地127.0.0.1:6379连接redis数据库

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
*代表多个字符 ?代表一个字符
在这里插入图片描述

重命名

rename 旧key名 新key名   无论新key名是否存在都会进行重命名并覆盖
renamenx 旧key名 新key名     如果新key已经存在就取消这个操作

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

判断值是否存在以及键值类型

在这里插入图片描述

查看当前库里key的数目

在这里插入图片描述

设置密码 、删除密码

在这里插入图片描述

追加数据

在这里插入图片描述

key值的递增、递减

在这里插入图片描述

返回原有的值并设置新值

在这里插入图片描述

设置键并指定过期时间

在这里插入图片描述

批量创建、批量查看

在这里插入图片描述

多数据库

默认情况下只能选择16个数据库 0-15
在这里插入图片描述

多数据库之间移动数据

move 键值 数据库序号

在这里插入图片描述

清空数据库数据

在这里插入图片描述

性能管理

查看内存的使用

在这里插入图片描述

查看cpu的使用

在这里插入图片描述

内存碎片率

操作系统分配的内存值used_memory_rss除以Redis使用的内存值used_memory计算得出内存碎片是由操作系统低效的分配/回收物理内存导致的(不连续的物理内存分配)
跟踪内存碎片率对理解Redis实例的资源性能是非常重要的:

内存碎片率稍大于1是合理的,这个值表示内存碎片率比较低
内存碎片率超过1.5,说明Redis消耗了实际需要物理内存的150号,其中50号是内存碎片率。需要在redis-cli工具上输入shutdown save命令,并重启Redis服务器。
内存碎片率低于1的,说明Redis内存分配超出了物理内存,操作系统正在进行内存交换。需要增加可用物理内存或减少Redis内存占用

内存使用率

redis实例的内存使用率超过可用最大内存,操作系统将开始进行内存与swap空间交换
避免内存交换发生的方法:

针对缓存数据大小选择安装Redis实例(云平台里面使用RDS服务,ECS云主机选择内存、缓存型配置)
尽可能的使用Hash数据结构存储
设置key的过期时间

内回收key

保证合理分配redis有限的内存资源。
当达到设置的最大阀值时,需选择–种key的回收策略,默认情况下回收策略是禁止删除。
配置文件中修改maxmemory- policy属性值

[root@localhost ~]# vim /etc/redis/6379.conf
598 maxmemory-policy noenviction
volatile-lru //使用LRU算法从已设置过期时间的数据集合中淘汰数据
volatile-ttl  //从已设置过期时间的数据集合中挑选即将过期的数据淘汰
volatile-random //从已设置过期时间的数据集合中随机挑选数据淘汰
allkeys-lru  //使用LRU算法从所有数据集合中淘汰数据
allkeys-random  //从数据集合中任意选择数据淘汰
noenviction     //禁止淘汰数据

总结

1、redis是一种非关数据库(内存/缓存)
redis相比于其他非关数据库优势的地方主要在于:
①数据类型丰富
mysql:整型、文本、图片、字符、浮点(单精度/双精度)、char、vachar、decimal (5,2)
redis: key-value hashes strings sets(有序、无序) list

②持久化(可以将内存种的数据保存在磁盘中)形式为: RDB与AOF
2、redis 集群模式:哨兵、主从、cluster (集群)
redis的集群模式,同时也可以理解为是redis的高可用模式
主从:提供了备份冗余,缺点:无法针对故障进行自动修复,写操作无法负载均衡
哨兵:以主从为基础提供了故障自动修复的功能,写操作无法负载均衡
集群:基于主从基础,解决了故障自动修复、写操作负载均衡的问题,同时对于资源需求相较于前两种集群得到了一定的改善

3、高可用中的持久化
RDB和AOF
(1)持久化方式:
① RDB :周期性的快照
② AOF :接近实时的持久化(以everysec方式)基于日志文件持久化
(2) redis 启用的优先级
AOF>RDB,同时仅当AOF功能关闭的情况下,redis才会在重新启动时使用RDB的方式进行恢复
(3) RDB和AOF中持久化模式
①RDB:
由redis主进程(周期性) fork 派生出子进程对redis内存中的数据进行持久化(二进制压缩),生成到. rdb文件中
②AOF:
根据持久化策略(always、 no、 everysec (默认) ),先将redis中的语句保存在缓冲区中,再从缓冲区同步到.aof文件中.
4、redis的恢复策略/优势
redis与其他常用非关数据库类似,都是将数据保存在内存中,而保存在内存中时,当redis 重启,内存数据丢失,但redis 通过RDB或AOF的持久化功能可以在redis
进行重启之后,优先读取AOF文件,基于AOF文件进行数据恢复/加载这种方式来正常运行

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值