当前位置: 首页 > news >正文

「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
    
  • 测试 gcc 版本

    gcc --version
    

    image-20220917210549021

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

    image-20220917210348610

  • 解压至当前目录

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

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

    make
    

    image-20220917211049803

    image-20220917211111693

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

    make install
    

    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:客户端,操作入口
    
  • 前台启动(不推荐)

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

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

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

    ➢ 备份 redis.conf

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

    cp redis.conf /etc/redis.conf
    // 将redis.conf复制到/etc/下
    

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

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

    vim redis.conf
    

    image-20220917212336191

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

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

    ps -ef | grep redis
    

    image-20220917212518102

  • 用客户端访问 redis

    redis-cli
    

    image-20220917212710094

  • 测试验证

    ping
    

    image-20220917212723825

  • 关闭 redis

    kill 进程

    ➢ 命令 shutdown

    image-20220917212847070

Ⅲ. Redis相关知识介绍

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

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

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

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

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

image-20220917215439480

相关文章:

  • 数商云SCM管理系统库存管理功能助力新能源汽车企业仓储管理更高效
  • Word控件Spire.Doc 【图像形状】教程(8): 如何借助C#/VB.NET在 Word 中插入艺术字
  • 【Linux】shell命令行简单解释器
  • 融合多策略的萤火虫算法求解多目标优化问题(Matlab代码实现)
  • MacBook Pro 耗电严重的终极解决办法2022年
  • uni-fab彩色图标按钮
  • [附源码]Python计算机毕业设计Django的在线作业批改系统
  • TypeScript入坑
  • eMagin:当月产百万片时,4K MicroOLED成本将不是问题
  • [附源码]Python计算机毕业设计SSM乐多多宠物店网站(程序+LW)
  • JUC系列(五) 读写锁与阻塞队列
  • 2022最新iOS最新打包发布流程
  • 【Android进阶之旅】内存泄漏的危害有哪些?(案例分析)
  • 力扣(LeetCode)895. 最大频率栈(C++)
  • Effective C++条款18:让接口容易被正确使用,不容易被误用
  • ERP系统:帮助企业实现一体化管理
  • Python学习笔记第四十四天(NumPy 统计函数)
  • java计算机毕业设计花卉网站源码+mysql数据库+系统+lw文档+部署
  • Mysql高频面试题(一)
  • 如何确保海外服务器的高可用性?
  • JSTL标签库
  • Java Web项目中解决中文乱码方法总结
  • 面试常问TCP问题回答不上来?一篇深度讲解TCP文章看完让你面试时横着走
  • SQL2005 游标学习
  • 解决简书图片不显示问题“系统维护中,图片暂时无法加载”
  • JavaScript入门及简介
  • 上周刚面试回来,献给程序员们一份“热腾腾”的面经分享(写于拿到offer的24小时内)!
  • 编程初学者的“灯塔”
  • 应用程序版本
  • Jquery操作DOM节点