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、安装和启动
-
安装 C 语言的编译环境
yum install centos-release-scl scl-utils-build yum install -y devtoolset-8-toolchain scl enable devtoolset-8 bash Copy -
通过 wget 下载
wget https://download.redis.io/releases/redis-6.2.6.tar.gz // 下载路径:/opt -
解压至当前目录
tar -zxvf redis-6.2.6.tar.gz -
解压完成后进入目录
cd redis-6.2.6 -
在当前目录下执行 make
make && make install -
默认安装在 /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 的数字,数值越小样本越不准确,但性能消耗越小。