Redis①概述:NoSQL、Redis


NoSQL 数据库

NoSQL(Not Only SQL),泛指非关系型数据库。

对比

SQL NoSQL
数据存储方式 基于业务逻辑(一张表对应一个业务实体) 基于 K-V 模式
数据存储位置 磁盘 内存,且支持持久化
特点 事务支持(ACID) 不遵守 SQL 标准,性能高于 SQL
适用场景 要求事务支持、即席查询(按需求添加查询条件) 高并发读写,海量读写,高可扩展性要求

NoSQL 作用

  • 降低 CPU 及内存压力。
  • 降低 I/O 压力。

常见 NoSQL 数据库

  • Memcache:早期 NoSQL 数据库,Redis 的雏形。

    • 数据在内存中,不持久化。
    • 支持简单 K-V 模式(字符串)。
  • Redis:覆盖了 Memcache 的大部分功能。

    • 数据在内存中,支持持久化,用于备份恢复。
    • 支持丰富的 K-V 模式(字符粗、list、set、hash、zset 等)
  • MongoDB:模式自由的文档型数据库

    • 数据再内存中,内存不足则将不常用数据保存到硬盘。
    • 支持 K-V 模式,对 Value 提供丰富的查询功能(尤其是 JSON),支持二进制数据和大型对象。

Redis

2.1、概述

Redis(Remote Dictionary Server)

开源的 Key-Value 存储系统

具备高性能高并发的特点。

  • 机制

    • 单线程:防止多线程下的线程安全问题,线程切换的性能问题(Redis 6 可多线程)
    • I/O 多路复用:解决并发需求。
  • 数据类型的操作具有原子性(由于单线程)

    • push/pop、add/remove、交并差集。
    • 排序。
  • 数据暂存在内存中,支持持久化

    • Redis 的数据都缓存在内存中,周期性持久化
    • 实现主从同步
  • 允许设置过期时间

    • 内存有限且资源非常珍贵,若一直存活,久而久之便会 OOM
    • 验证码5分钟内有效、token一天内有效。(用代码判断麻烦,用Redis get最方便)

2.2、安装和启动

  1. 安装 C 语言的编译环境

    yum install centos-release-scl scl-utils-build
    yum install -y devtoolset-8-toolchain
    scl enable devtoolset-8 bash
    Copy
    
  2. 通过 wget 下载

    wget https://download.redis.io/releases/redis-6.2.6.tar.gz
    
    // 下载路径:/opt
    
  3. 解压至当前目录

    tar -zxvf redis-6.2.6.tar.gz
    
  4. 解压完成后进入目录

    cd redis-6.2.6
    
  5. 在当前目录下执行 make

    make && make install
    
  6. 默认安装在 /usr/local/bin

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

2.3.2、启动 & 关闭

默认端口号:6379

  • 前台启动:/usr/local/bin 目录下启动 redis

    redis-server(前台启动)
    
  • 后台启动

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

      cp redis.conf /etc/redis.conf
      
    • 修改 /etc/redis.conf 配置文件

      vim redis.conf# daemonize no 修改为 daemonize yes
      
    • /usr/local/bin 目录下启动 redis

      redis-server /etc/redis.conf
      
  • 关闭 redis

    • kill 进程
    • 命令 shutdown

2.3、配置文件

redis.conf

Units

  • 配置大小单位,只支持 bytes,不支持 bit。
  • 大小写不敏感。

INCLUDES

多实例下,可以提取公用的配置文件,。

NETWORK

bind

  • 默认:bind = 127.0.0.1,只能接受本机的访问请求。
  • 不写:接受任何 ip 地址的访问。

protected-mode

  • 将本机访问保护模式设置 no。
  • 若为 yes,且没有设定 bind 的 ip、没有设置密码,Redis 只接受本机访问。

port

端口号,默认 6379。

tcp-backlog

backlog 是连接队列

  • 队列总和 = 未完成三次握手队列 + 已经完成三次握手队列。
  • 高并发下,需要高 backlog 值来避免慢客户端连接问题。

timeout

空闲客户端的维持时间(秒),0 表示永不关闭。

tcp-keepalive

  • 对访问客户端的心跳检测,每 n 秒检测一次。
  • 0 则不会进行检测,建议值 60。

GENERAL

daemonize

  • 是否为后台进程,设置为 yes。
  • 守护进程,后台启动。

pidfile

存放 pid 文件的位置,每个实例会产生一个 pid 文件。

loglevel

日志级别

  • debug
  • verbose
  • notice(默认)
  • warning

logfile

日志文件名。

database

  • 数据库的数目,默认16。
  • 默认 0 号库,使用 SELECT 连接指定 ID 的数据库。

SECURITY

访问密码的查看、设置和取消。

  • 在命令中设置的是临时密码,重启 redis 服务器则失效。
  • 在配置文件中进行永久设置。

LIMITS

maxclients

  • 设置 Redis 最大客户端连接数,默认 10,000。
  • 若达到最大值,Redis 拒绝新的连接请求,并向连接请求方发送 max number of clients reached。

maxmemory

设置 Redis 可使用的内存量。

  • 达到使用上限时,Redis 会尝试移除内部数据,使用 maxmemory-policy 指定移除规则。
  • 若达到上限且无法移除数据,Redis 对需要申请内存的指令返回错误信息(如 SET、LPUSH)。
  • 建议设置,否则,将内存占满,造成服务器宕机。

maxmemory-policy

  • volatile-lru:LRU 算法,移除设置了过期时间的 key。
  • allkeys-lru:LRU 算法,移除所有 key。
  • volatile-random:随机移除,针对设置了过期时间的 Key。
  • allkeys-random:随机移除,针对所有集合中的 Key。
  • volatile-ttl:移除 TTL 值最小的 key(即将过期的)
  • noeviction:不移除,针对写操作返回错误信息。
  • maxmemory-samples:设置样本数量
    • LRU 算法和最小 TTL 算法都是估算值。
    • 设置样本数量,redis 默认会检查指定数量的 key 并适用 LRU 算法。
    • 一般设置 3 到 7 的数字,数值越小样本越不准确,但性能消耗越小。