redis数据库基础

本文详细介绍了Redis数据库,包括其作为非关系型数据库的特性,如支持数据持久化、多种数据结构及原子性操作。此外,还讨论了Redis的优势,如高性能、丰富的数据类型和主从复制功能,适用于缓存场景。文中还涉及Redis与Python、Django的交互以及主从数据同步的全量和部分复制方式。

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

常见关系型数据库与非关系型数据库的对比

关系型数据库与非关系型数据库的对照
在这里插入图片描述
常见的关系型数据库
在这里插入图片描述
不同存储类型的非关系型数据库
在这里插入图片描述

主流的非关系型数据库

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
主流非关系型数据库的对比
在这里插入图片描述

redis数据库

redis数据库的特性
①Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。
②Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。
③Redis支持数据的备份,即master-slave模式的数据备份。

redis数据库的优势
性能极高 – Redis能读的速度是110000次/s,写的速度是81000次/s。
丰富的数据类型 – Redis支持二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操作。
原子性 – Redis的所有操作都是原子性的,同时Redis还支持对几个操作全并后的原子性执行。
丰富的特性 – Redis还支持 publish/subscribe, 通知, key 过期等等特性。
redis数据库适合用于做缓存,即所有数据存放在内存中,同时由于其极高的性能,也适合短时大量访问数据的应用程序。

redis数据库的操作
服务器端:使用sudo service redis start启动服务,sudo service redis stop停止服务。
客户端:①redis数据库为key-value型的数据库,其value可以有多种形式,字符串string(可以使用’xx’表示)/哈希hash(是一种数据格式,其形式为key-(属性1-值1 属性2-值2)即一个key下又拥有多个对应关系,嵌套字典)/列表list/无序集合set/有序集合zset,对于不同的数据形式其命令不同,一些常用命令如下表所示;
在这里插入图片描述
在这里插入图片描述
②list中的位置下标从0至n-1,且在使用下标范围时前后都包括在内,并支持负数表示下标;lrem中的次数,>0时从左往右删除指定次数指定值,<0时从右往左删除,=0时删除所有指定值的元素;
③不同类型的值在数据库中无存储顺序,其显示时随机显示;
④在处理除str以外的数据类型时可能会出现报错,其是因为强制关闭Redis快照导致不能持久化,在redis-cli中运行config set stop-writes-on-bgsave-error no后,在配置文件中修改对应项为no。

redis数据库与python交互:①安装并导入redis模块,链接数据库sr = redis.StrictRedis(host=’’, port=6379, db=0)其可以自行设置,默认为此;
②sr对象(若使用redis.Redis()对象则有一些方法不同)支持所有的redis-cli方法,其返回值为布尔值,表示操作是否成功;
③在对应多个参数输入时其输入方式与在redis-cli中不同,如hmset(‘key’, {‘field1’:‘value1’, ‘field2’:‘value2’}),其余详见网页;
④在获取返回值时,输出的字符串全部为b’xxx’即字节流。

redis数据库与django交互存储session:①安装pip install django-redis-sessions,配置django使用redis存储session ②redis以string模式存储编码后的字符串,以sessionID为key,value为设置的键值对编码,具体配置过程略。

redis数据库的主从
指将一台Redis服务器的数据,复制到其它的Redis服务器(可以是一台电脑上的不同进程),数据的复制是单向的,只能从主至从。

目的/作用:数据冗余(热备份),故障恢复,负载均衡,读写分离,高可用基石(哨兵和集群机制)。且可以实现多级主从,即从服务器可以拥有其下级从服务器。

实现过程/原理
(1)建立连接:①保存master信息②建立socket链接③发送ping命令(检查链接是否可用及master当前状态)④身份验证⑤发送slave端口;
(2)数据同步:分为全量同步和部分同步,psync/sync命令等,后详;
(3)命令传播:master将自己执行的命令传播给slave,维持心跳机制,是异步传输。
在这里插入图片描述
redis主从数据同步的两种方式
全量复制:用于初次复制或其它无法进行部分复制的情况,将主节点中的所有数据都发送给从节点,是一个非常重型的操作。
部分复制:用于网络中断等情况后的复制,只将中断期间主节点执行的写命令发送给从节点,与全量复制相比更加高效。需要注意的是,如果网络中断时间过长,造成主节点没有能够完整地保存中断期间执行的写命令,则无法进行部分复制,仍使用全量复制。

在这里插入图片描述
psync命令的运行流程及需要的组件支持
在这里插入图片描述
在这里插入图片描述
全量复制的具体流程及相关问题
在这里插入图片描述
部分复制的流程
在这里插入图片描述
主从心跳机制
在这里插入图片描述
读写分离架构及其异步复制机制和可能出现的问题
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
两个复制过程中需要规避的问题
在这里插入图片描述
在这里插入图片描述
redis相关技术的作用与缺点

持久化:持久化是最简单的高可用方法(有时甚至不被归为高可用的手段),主要作用是数据备份,即将数据存储在硬盘,保证数据不会因进程退出而丢失。
主从复制:复制是高可用Redis的基础,哨兵和集群都是在复制基础上实现高可用的。复制主要实现了数据的多机备份,以及对于读操作的负载均衡和简单的故障恢复。缺陷:故障恢复无法自动化;写操作无法负载均衡;存储能力受到单机的限制。
哨兵:在复制的基础上,哨兵实现了自动化的故障恢复。缺陷:写操作无法负载均衡;存储能力受到单机的限制。
集群:通过集群,Redis解决了写操作无法负载均衡,以及存储能力受到单机限制的问题,实现了较为完善的高可用方案。

哨兵(sentinel):哨兵的核心功能是主节点的自动故障转移。
监控(Monitoring):哨兵会不断地检查主节点和从节点是否运作正常。
自动故障转移(Automatic failover):当主节点不能正常工作时,哨兵会开始自动故障转移操作,它会将失效主节点的其中一个从节点升级为新的主节点,并让其他从节点改为复制新的主节点。
配置提供者(Configuration provider):客户端在初始化时,通过连接哨兵来获得当前Redis服务的主节点地址,并重写配置文件。
通知(Notification):哨兵可以将故障转移的结果发送给客户端。
集群(Redis Cluser):是Redis 3.0开始引入的分布式存储方案,集群由多个节点(Node)组成,Redis的数据分布在这些节点中。集群中的节点分为主节点和从节点:只有主节点负责读写请求和集群信息的维护;从节点只进行主节点数据和状态信息的复制。
数据分区:数据分区(或称数据分片)是集群最核心的功能。集群将数据分散到多个节点,一方面突破了Redis单机内存大小的限制,存储容量大大增加;另一方面每个主节点都可以对外提供读服务和写服务,大大提高了集群的响应能力。
高可用:集群支持主从复制和主节点的自动故障转移(与哨兵类似);当任一节点发生故障时,集群仍然可以对外提供服务。

redis集群不支持mset等多key的指令,因为不同的key保存在不同的节点中,至少需要6个节点(3主3从),其搭建一共分为四步:
①启动节点,使用集群模式启动节点,启动时各节点没有主从关系;
②节点握手,将独立的节点组成一个网络,每个节点都可以感知到其它节点的存在;
③分配槽,集群有16384个槽,槽是数据管理和迁移的基本单位,当数据库中的16384个槽都分配了节点时,集群处于上线状态(ok);如果有任意一个槽没有分配节点,则集群处于下线状态(fail);节点槽的分配默认采用CRC16hash取余分区,也可采用一致性hash分区;
④指定主从关系。推荐使用ruby脚本来搭建,节点的总数量限制为1000,应尽量避免大集群。
python与redis集群交互:使用pip install redis-py-cluster安装,注意此处交互是python与已建立好的redis集群的交互,建立redis集群过程略。

:文中大量图表引自他人博客总结,由于来源较繁杂不一一列出,仅用作知识存档储备,不用作任何商业用途。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值