Redis
Redis 介绍
NoSQL 技术
在实际项目开发中,我们往往需要面对海量用户和高并发的数据请求。MySQL 等传统关系型数据库面临着两大问题:
- 磁盘 IO 速度缓慢,单机读写速度不超过 10000 QPS,当数据库无法及时响应高并发的用户请求,请求积压进而导致数据库瘫痪。
- 数据关系复杂,扩展性差。不适合大规模集群。
因此我们必须引入 NoSQL 技术去解决以上两个问题,以作为关系型数据库的补充。
Redis 数据库
Redis 是一种基于内存的数据库技术。底层采用 C 语言开发,默认端口号 6379。
- Redis 数据库作为数据缓存,将业务数据直接存储在内存中进行读写,单机读/写速度可达 110000/84000 QPS,可以满足高速响应的需求。
- Redis 数据库只负责存储数据,数据之间不具有任何关联,易于扩容和伸缩。
Redis 应用场景
受限于内存的高昂成本,一般我们只使用 Redis 存储高频读写的关键数据。比如:
- 热点数据:如热点商品信息。
- 任务队列:如秒杀队列、抢购队列。
- 实时更新信息:如商品排行榜、公交到站信息。
- 时效性信息:如手机验证码、session 、 心跳(heartbeat)。
Redis 主要适用于内部系统的高频数据。在线上环境负载极大的情况下,使用 Redis 也不足以满足对数据读写的速度要求。
Redis 基本使用
安装指令
在控制台输入以下指令安装和使用 Redis:
$ sudo apt-get install redis-server # 安装 Redis 数据库(仅限 Ubuntu 可用) $ redis-server # 启动 Redis 数据库 $ redis-server --port 6380 # 启动 Redis 数据库,在指定端口 $ redis-server redis-6379.conf # 启动 Redis 数据库,使用指定配置文件 $ redis-cli # 进入 Redis 控制台,在默认端口 $ redis-cli -p 6380 # 进入 Redis 控制台,在指定端口Copy to clipboardErrorCopied 复制代码
基础配置
在 Redis 安装目录下的 redis.conf
文件是 Redis 默认配置文件,启动 Redis 数据库时默认加载。
daemonize no # 守护线程,打开后启动 Redis 控制台不提示 bind 127.0.0.1 # 绑定 IP 地址,绑定后只能通过该地址访问 Redis port 6379 # 端口号 databases 16 # 存储区域数量Copy to clipboardErrorCopied 复制代码
日志配置
Redis 总共支持四个日志级别:debug / verbose / notice / warning ,从前往后日志记录信息逐渐减少。通常情况下开发环境设为 verbose ,生产环境设为 notice 。
loglevel verbose # 日志级别 logfile 6379.log # 日志文件名Copy to clipboardErrorCopied 复制代码
持久化配置
默认使用 RDB 方式持久化数据,相关配置如下:
save 900 1 # 自动同步数据条件,900s 内变更 1 个 key 值则持久化 save 300 10 # 自动同步数据条件,300s 内变更 10 个 key 值则持久化 rdbcompression yes # 是否压缩数据,压缩后节省空间但读取较慢 rdbchecksum yes # 是否格式校验(默认开启),校验降低文件损坏风险但读取较慢 dbfilename dump.rdb # 保存文件名 dir ./ # 保存文件位置Copy to clipboardErrorCopied 复制代码
可以在配置文件中改用 AOF 方式持久化数据,刷新文件条件有三种类型: always / everysec / no 。
appendonly yes # 选用 AOF 方式持久化 appendsync everysec # 刷新文件条件,每秒更新一次操作日志Copy to clipboardErrorCopied 复制代码
容量配置
对 Redis 数据库占用空间和客户链接做出限制。
maxclients 100 # 客户连接数上限,超出后拒绝客户访问,为 0 表示不限制 timeout 300 # 客户闲置时长,超出后关闭连接,为 0 表示不关闭 maxmemory 50 # Redis 最大占用内存比例,为 0 表示全部可用 maxmemory-samples # Redis 随机选取数据数量 maxmemery-policy volatile-lru # Redis 逐出策略Copy to clipboardErrorCopied 复制代码
多机配置
如果我们要设置集群,则需要进行以下配置:
cluster enabled yes # 开启集群 cluster-config-file nodes.conf # 集群配置文件Copy to clipboardErrorCopied 复制代码
如果我们要设置主从服务器,则需要进行以下配置:
# 主服务器 requirepass 123456 # 主服务器设置密码(可选) repl-backlog-size 1mb # 缓冲区大小 # 从服务器 slaveof 127.0.0.1 6379 # 主服务器套接字,设置后自动连接 masterauth 123456 # 主服务器密码 slave-serve-stale-data no # 同步数据时是否允许读数据Copy to clipboardErrorCopied