• 「Redis」01 NoSQL及Redis概述


    笔记整理自【尚硅谷】Redis 6 入门到精通 超详细 教程

    Redis——NoSQL及Redis概述

    技术的分类

    • 解决功能性的问题:Java、Jsp、RDBMS、Tomcat、HTML、Linux、JDBC、SVN
    • 解决扩展性的问题:Struts、Spring、SpringMVC、Hibernate、Mybatis
    • 解决性能的问题:NoSQL、Java线程、Hadoop、Nginx、MQ、ElasticSearch

    NoSQL数据库是为了解决性能问题而产生的一种技术,而 Redis 就是典型的 NoSQL 数据库。

    1. NoSQL数据库

    Ⅰ. NoSQL数据库概述

    NoSQL (NoSQL = Not Only SQL),意即 “不仅仅是SQL”,泛指 非关系型的数据库

    NoSQL 不依赖业务逻辑方式存储,而以简单的 key-value 模式存储。因此大大的增加了数据库的扩展能力。

    • 不遵循SQL标准
    • 不支持ACID
    • 远超于SQL的性能

    NoSQL适用场景

    • 对数据高并发的读写
    • 海量数据的读写
    • 对数据高可扩展性的

    NoSQL不适用场景

    • 需要事务支持
    • 基于sql的结构化查询存储,处理复杂的关系,需要即席查询
    • (用不着sql的和用了sql也不行的情况,请考虑用NoSql)

    NoSQL解决问题

    • 解决 CPU 及内存压力

      image-20220919162955142

    • 解决 IO 压力

      image-20220919163017020

    Ⅱ. 常见的NoSQL数据库对比

    Memcache
    img ✔️ 很早出现的NoSql数据库
    ✔️ 数据都在内存中,一般不持久化
    ✔️ 支持简单的 key-value 模式,支持类型单一
    ✔️ 一般是作为缓存数据库辅助持久化的数据库
    Redis
    img ✔️ 几乎覆盖了 Memcached 的绝大部分功能
    ✔️ 数据都在内存中,支持持久化,主要用作备份恢复
    ✔️ 除了支持简单的 key-value 模式,还支持多种数据结构的存储,比如 list、set、hash、zset 等。
    ✔️ 一般是作为缓存数据库辅助持久化的数据库
    MongoDB
    img ✔️ 高性能、开源、模式自由 (schema free) 的文档型数据库
    ✔️ 数据都在内存中, 如果内存不足,把不常用的数据保存到硬盘
    ✔️ 虽然是 key-value 模式,但是对 value (尤其是 json) 提供了丰富的查询功能
    ✔️ 支持二进制数据及大型对象
    ✔️ 可以根据数据的特点替代RDBMS ,成为独立的数据库。或者配合RDBMS,存储特定的数据。

    2. Redis概述及安装

    Ⅰ. 概述

    • Redis 是一个开源key-value 存储系统。
    • Memcached 类似,它支持存储的 value 类型相对更多,包括 string (字符串)、list (链表)、set (集合)、zset (sorted set – 有序集合)、hash (哈希类型)
    • 这些数据类型都支持 push/pop、add/remove 及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。
    • 在此基础上,Redis 支持各种不同方式的排序
    • memcached一样,为了保证效率,数据都是缓存在内存中。
    • 区别的是 Redis周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件。
    • 并且在此基础上实现了 master-slave (主从) 同步。
    • 单线程 + I/O 多路复用。

    配合关系型数据库做高速缓存

    • 高频次,热门访问的数据,降低数据库 I/O

    • 分布式架构,做 session 共享

    image-20220917195536915

    多样的数据结构存储持久化数据

    image-20220917195938270

    Ⅱ. 安装

    Redis官方网站Redis中文官方网站
    http://redis.iohttp://redis.cn/
    • 6.2.1 for Linuxredis-6.2.1.tar.gz

      ➢ 不用考虑在windows环境下对Redis的支持

    • 安装 C 语言的编译环境

      yum install centos-release-scl scl-utils-build
      yum install -y devtoolset-8-toolchain
      scl enable devtoolset-8 bash
      
      • 1
      • 2
      • 3
    • 测试 gcc 版本

      gcc --version
      
      • 1

      image-20220917210549021

    • 下载 redis-6.2.1.tar.gz 放置 /opt 目录

      image-20220917210348610

    • 解压至当前目录

      tar -zxvf redis-6.2.1.tar.gz
      
      • 1
    • 解压完成后进入目录

      cd redis-6.2.1
      
      • 1
    • 在redis-6.2.1目录下再次执行 make 命令(只是编译好)

      make
      
      • 1

      image-20220917211049803

      image-20220917211111693

    • 跳过 make test 继续执行:make install

      make install
      
      • 1

      image-20220917211144963

    • 默认安装在 /usr/local/bin

      image-20220917211303920

      redis-benchmark:性能测试工具,可以在自己本子运行,看看自己本子性能如何
      redis-check-aof:修复有问题的AOF文件,rdb和aof后面讲
      redis-check-dump:修复有问题的dump.rdb文件
      redis-sentinel:Redis集群使用
      redis-server:Redis服务器启动命令
      redis-cli:客户端,操作入口
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
    • 前台启动(不推荐)

      前台启动,命令行窗口不能关闭,否则服务器停止。

      /usr/local/bin 目录下启动 redis

      redis-server
      
      • 1
    • 后台启动(推荐)

      ➢ 备份 redis.conf

      安装 redis 的目录 /opt/redis-6.2.6 中将 redis.conf 复制到任意一个文件夹下

      cp redis.conf /etc/redis.conf
      // 将redis.conf复制到/etc/下
      
      • 1
      • 2

      ➢ 修改 /etc/redis.conf 配置文件

      修改 redis.conf (我的在128行 ) 文件将里面的 daemonize no 改成 yes,让服务在后台启动。

      vim redis.conf
      
      • 1

      image-20220917212336191

      /usr/local/bin 目录下启动 redis

      redis-server /etc/redis.conf
      
      • 1
    • 查询 redis 是否启动

      ps -ef | grep redis
      
      • 1

      image-20220917212518102

    • 用客户端访问 redis

      redis-cli
      
      • 1

      image-20220917212710094

    • 测试验证

      ping
      
      • 1

      image-20220917212723825

    • 关闭 redis

      kill 进程

      ➢ 命令 shutdown

      image-20220917212847070

    Ⅲ. Redis相关知识介绍

    端口 6379 从何而来
    Alessia Merz => 九键
    image-20220917213342199默认16个数据库,类似数组下标从 0 0 0 开始,初始默认使用 0 0 0 号库
    使用命令 select 来切换数据库。如: select 8
    统一密码管理,所有库同样密码。

    Redis 是单线程 + 多路 IO 复用技术

    多路复用是指使用一个线程来检查多个文件描述符(Socket)的就绪状态,比如调用select和poll函数,传入多个文件描述符,如果有一个文件描述符就绪,则返回,否则阻塞直到超时。得到就绪状态后进行真正的操作可以在同一个线程里执行,也可以启动线程执行(比如使用线程池)。

    串行 vs 多线程 + 锁 (memcached) vs 单线程 + 多路 IO 复用 (Redis)

    • 与Memcache三点不同:支持多数据类型,支持持久化,单线程 + 多路IO复用(效率更高)

    image-20220917215439480

  • 相关阅读:
    安卓实现沉浸式安卓状态栏实现
    U2Net——U-Net套U-Net——套娃式图像分割算法
    【Verilog基础】【计算机体系架构】ITCM和ICACHE对比(面试常问)
    详解拷贝构造函数&拷贝赋值运算符
    Java安全之Mojarra JSF反序列化
    Qt之实现圆形进度条
    基于C++QT5的学生信息综合管理系统
    排序算法之---快速排序
    Hermes - 指尖上的智慧:自定义问答系统的崭新世界
    【iOS】——知乎日报第三周总结
  • 原文地址:https://blog.csdn.net/weixin_53407527/article/details/126936315