• 【Redis】Redis介绍


    1.NoSQL数据库

    NoSQL(NoSQL = Not Only SQL ),意即“不仅仅是SQL”,泛指非关系型的数据库。 NoSQL 不依赖业务逻辑方式存储,而以简单的key-value模式存储。因此大大的增加了数据库的扩展能力。

    1.1NoSQL适用场景
    • 对数据高并发的读写
    • 海量数据的读写
    • 对数据高可扩展性的
    1.2常用的NoSQL

    Memcache

    image-20221129232228344

    • 很早出现的NoSql数据库
    • 数据都在内存中,一般不持久化
    • 支持简单的key-value模式,支持类型单一
    • 一般是作为缓存数据库辅助持久化的数据库

    Redis

    image-20221129232345394

    • 几乎覆盖了Memcached的绝大部分功能
    • 数据都在内存中,支持持久化,主要用作备份恢复
    • 除了支持简单的key-value模式,还支持多种数据结构的存储,比如 list、set、hash、zset等。
    • 一般是作为缓存数据库辅助持久化的数据库

    MongDB

    image-20221129232510784

    • 高性能、开源、模式自由(schema free)的文档型数据库
    • 数据都在内存中, 如果内存不足,把不常用的数据保存到硬盘
    • 虽然是key-value模式,但是对value(尤其是json)提供了丰富的查询功能
    • 支持二进制数据及大型对象
    • 可以根据数据的特点替代RDBMS ,成为独立的数据库。或者配合RDBMS,存储特定的数据。
    1.3Redis介绍

    Redis是一个开源的key_value存储系统。和Memcached类似,它支持存储从value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set–有序的集合)和hash(哈希类型)。

    • 这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。
    • 在此基础上,Redis支持各种不同方式的排序
    • 与Memcached一样,为了保存效率,数据都是缓存在内存中的
    • 区别是Redis会周期性的把更新的数据写入磁盘或者把修改操作写追加的记录文件
    • 在此基础上,Redis实现了master-slave(主从)同步
    1.4Redis的使用场景

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

    • 高频次,热门访问的数据,降低数据库IO
    • 分布式架构,做session共享

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

    image-20221129233352059

    1.5Redis默认按照目录

    查看默认安装目录:

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

    image-20221130000233986

    1.6Redis的启动

    前台启动(不推荐)

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

    image-20221130000543112

    后台启动(推荐)

    备份redis.conf配置文件

    cp /opt/redis-6.7.2/ /myredis
    
    • 1

    将./myredis/redis.conf文件中的daemonize no修改为yes

    启动redis

    redis-server /myredis/redis.conf
    ps -ef|grep redis
    
    • 1
    • 2

    image-20221130010037094

    用客户端访问:redis-cli

    image-20221130010124824

    Redis关闭:

    单实例关闭:redis-cli shutdown

    多实例关闭,指定端口关闭:redis-cli -p 6379[ port ] shutdown

    image-20221130010252797

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

    数据库相关介绍

    • 默认16个数据库,类似数组下标从0开始,初始默认使用0号库
    • 使用命令 select 来切换数据库。如: select 8
    • 统一密码管理,所有库同样密码。
    • dbsize查看当前数据库的key的数量
    • flushdb清空当前库
    • flushall通杀全部库

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

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

    image-20221130023355926

    redis基于reactor模式开发了网络事件处理器,这个处理器叫做文件事件处理器,file event handler。这个文件事件处理器,是单线程的,redis才叫做单线程的模型,采用IO多路复用机制同时监听多个socket,根据socket上的事件来选择对应的事件处理器来处理。

    回调机制:

    如果被监听的socket准备好执行accept、read、write、close等操作的时候,跟操作对应的文件事件就会产生,这个时候文件事件处理器就会调用之前关联好的事件处理器来处理这个事件。

    就绪队列

    多个socket可能并发的产生不同的操作,每个操作对应不同的文件事件,但是IO多路复用程序会监听多个socket,但是会将socket放入一个队列中排队,这个队列叫做就绪队列,每次从队列中取出一个socket给事件分派器,事件分派器把socket给对应的事件处理器。

    一个socket的事件处理完之后,IO多路复用程序才会将队列中的下一个socket给事件分派器。文件事件分派器会根据每个socket当前产生的事件,来选择对应的事件处理器来处理。

  • 相关阅读:
    【Linux】CentOS8.4 安装docker
    Java“牵手”1688商品列表页数据采集+商品价格数据排序,商品销量排序数据,1688API接口采集方法
    ARM 汇编指令 orreq 的使用
    javaweb基础:过滤器Filter
    【毕业设计】水果图像识别系统 - 深度学习 OpenCV python
    开发笔记 —— Centos7 在急救模式下修改密码
    MPN – 制造零件号
    大工业用电计费及其相关知识
    小米软件开发二面和中兴软开一面
    教你亲手制作一个虚拟数字人,超全步骤详解
  • 原文地址:https://blog.csdn.net/qq_53893431/article/details/128113427