NoSQL数据库-Redis集群详解及案例实现

一、 关系型数据库和 NoSQL 数据库

1.1 数据库主要分为两大类:关系型数据库与 NoSQL 数据库

  • 关系型数据库,是建立在关系模型基础上的数据库,其借助于集合代数等数学概念和方法来处理数据库中的数据主流的 MySQL、Oracle、MS SQL Server 和 DB2 都属于这类传统数据库。

  • NoSQL 数据库,全称为 Not Only SQL,意思就是适用关系型数据库的时候就使用关系型数据库,不适用的时候也没有必要非使用关系型数据库不可,可以考虑使用更加合适的数据存储。主要分为临时性键值存储(memcached、Redis)、永久性键值存储(ROMA、Redis)、面向文档的数据库(MongoDB、CouchDB)、面向列的数据库(Cassandra、HBase),每种 NoSQL 都有其特有的使用场景及优点。

1.2 RDBMS和NOSQL的特点及优缺点

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

二、Redis简介

2.1 Redis介绍

在这里插入图片描述

Redis 是一个开源的、基于内存的数据结构存储系统(NoSQL),通常用作数据库、缓存和消息代理。它的名字源自 “REmote DIctionary Server”(远程字典服务器)。目前国内外使用的公司众多,比如:阿里,百度,新浪微博,知乎网,GitHub,Twitter 等Redis是一个开源的、遵循BSD协议的、基于内存的而且目前比较流行的键值数据库(key-valuedatabase),是一个非关系型数据库,redis 提供将内存通过网络远程共享的一种服务,提供类似功能的还有memcached,但相比memcached,redis还提供了易扩展、高性能、具备数据持久性等功能。Redis 在高并发、低延迟环境要求比较高的环境使用量非常广泛

2.2 Redis特性

  • 速度快: 10W QPS,基于内存,C语言实现
  • 单线程
  • 持久化
  • 支持多种数据结构
  • 支持多种编程语言
  • 功能丰富: 支持Lua脚本,发布订阅,事务,pipeline等功能
  • 简单: 代码短小精悍(单机核心代码只有23000行左右),单线程开发容易,不依赖外部库,使用简单
  • 主从复制
  • 支持高可用和分布式

单线程为何如此快?

  • 纯内存
  • 非阻塞
  • 避免线程切换和竞态消耗

2.3 Redis应用场景

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

在这里插入图片描述

2.4 缓存的实现流程

  • 数据更新操作流程

    在这里插入图片描述

    写入数据

    • 应用程序尝试将新的数据写入 MySQL 数据库。

    写MySQL

    • 如果数据成功写入 MySQL:
      • 程序会继续进行下一步操作,即删除 Redis 中对应的缓存项。
    • 如果写入 MySQL 失败:
      • 程序直接返回,表示操作失败,不做进一步处理。

    删除Redis对应项

    • 在 MySQL 数据写入成功后,程序会删除 Redis 中与此次写入相关的缓存数据。这一步是为了确保 Redis 缓存中的数据与 MySQL 数据库中的数据保持一致性。

    返回

    • 最后,程序将返回操作结果,通知调用方操作的成功与否。
  • 数据读取操作流程

在这里插入图片描述

读取数据请求

  • 客户端或应用程序发起一个读取数据的请求。

读Redis

  • 系统首先尝试从 Redis 缓存中读取数据:
    • 如果从 Redis 中读取到了数据,直接返回读取的数据。
    • 如果未能从 Redis 中读取到数据,执行下一步操作。

读MySQL

  • 当 Redis 中未命中(即缓存中没有请求的数据),系统将回源到 MySQL 数据库进行查询:
    • 如果 MySQL 中也未能获取到相应的数据,则返回“未读取到数据”的状态或相应的错误信息给客户端。
    • 如果 MySQL 查询成功,读取到所需数据。

写Redis

  • 当从 MySQL 成功读取数据后,系统会将此数据写入到 Redis 中。这样做的目的是为了缓存数据,便于后续相同请求的快速响应。

返回数据

  • 最终,无论是从 Redis 还是 MySQL 中获取的数据,都会返回给客户端或调用方。

三、Redis的安装

官方下载地址:http://download.redis.io/releases/

3.1Redis的基础环境部署

主机名 IP 角色
redis-node1 172.25.254.14 master
redis-node2 172.25.254.24 slave1
redis-node3 172.25.254.34 slave2

注意:以下案例的实现所有环境都为Rehl9.1

# 配置好以上后,需要将防火墙关闭,以防影响案例的实现
[root@redis-node1 ~]# systemctl stop firewalld.service 
[root@redis-node1 ~]# systemctl mask firewalld.service 
[root@redis-node1 ~]# setenforce 0

3.2rpm包方式安装

[root@redis-node1 ~]# dnf install redis -y
正在更新 Subscription Management 软件仓库。
无法读取客户身份

本系统尚未在权利服务器中注册。可使用 subscription-manager 进行注册。

上次元数据过期检查:0:21:21 前,执行于 2024年08月25日 星期日 22时33分52秒。
依赖关系解决。
=========================================================================================
 软件包             架构                版本                     仓库                    大小
========================================================
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值