Redis 是什么?
Redis(Remote Dictionary Server)是一个开源的、高性能的键值对(Key-Value)存储数据库,由 Salvatore Sanfilippo 开发。它支持多种数据结构(如字符串、哈希、列表、集合等),并通过内存存储实现超高读写速度,同时提供持久化、集群、事务等功能,广泛用于缓存、会话存储、消息队列等场景。
特性 | Redis | MySQL |
---|---|---|
存储位置 | 主要在内存中,磁盘仅用于持久化备份 | 主要在磁盘中,内存用于缓存(如 InnoDB 缓冲池) |
读写速度 | 极快(微秒级),内存操作无磁盘 I/O 延迟 | 较慢(毫秒级),受磁盘 I/O 和索引效率影响 |
数据容量限制 | 受内存大小限制,适合存储热点数据 | 受磁盘容量限制,可存储海量数据 |
持久化方式 | RDB(快照)、AOF(日志追加),可选 | 事务日志(如 InnoDB 的 redo log)、二进制日志 |
Redis 的核心优点
超高性能
- 基于内存存储,读写速度极快(单机每秒可处理 10 万 + 请求)。
- 采用单线程模型避免多线程切换开销,同时通过 I/O 多路复用处理并发请求。
丰富的数据结构
支持多种数据类型,满足复杂业务需求:- 字符串(String):存储文本、数字(如计数器)。
- 哈希(Hash):存储对象(如用户信息)。
- 列表(List):实现队列、栈(如消息队列)。
- 集合(Set):去重、交集 / 并集运算(如共同好友)。
- 有序集合(Sorted Set):带分数的排序(如排行榜)。
持久化机制
避免内存数据丢失,支持两种持久化方式:- RDB(快照):定期将内存数据生成二进制文件(适合备份)。
- AOF(Append Only File):记录所有写操作日志,重启时重放(适合数据安全性要求高的场景)。
- 可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用
高可用与集群
- 主从复制:通过主节点同步数据到从节点,实现读写分离(主写从读)。
- 哨兵(Sentinel):监控主从节点,自动故障转移(主节点挂了后从节点升级为主)。
- 集群(Cluster):分片存储数据,支持水平扩展(最多 16384 个节点)。
原子操作与事务
- 支持原子性命令(如
INCR
自增),避免并发问题。 - 提供事务(
MULTI
/EXEC
),确保一系列命令的原子执行。
- 支持原子性命令(如
跨平台与易用性
- 支持 Linux、Windows、macOS 等系统,安装部署简单。
- 提供简洁的命令行工具(
redis-cli
)和丰富的客户端库(Java、Python、Go 等)。
- 支持数据的备份,即master-slave模式的数据备份。
1.4、Redis优缺点
优点:
- 对数据高并发读写
- 对海量数据的高效率存储和访问
- 对数据具有的可扩展性和高可用性
缺点:
- redis(ACID)处理非常简单
- 无法做到太复杂的关系数据库模型
1.5、Redis 特性
速度快
单节点读 110000次/s,写81000次/s
- 数据存放内存中
- 用C语言实现,离操作系统更近
- 单线程架构,6.0开始支持多线程(CPU、IO读写负荷)
持久化
数据的更新将异步地保存到硬盘(RDB和 AOF)
多种数据结构
不仅仅支持简单的 key-value 类型数据,还支持:字符串、hash、列表、集合、有序集合,
支持多种编程语言
功能丰富
HyperLogLog、GEO、发布订阅、Lua脚本、事务、Pipeline、Bitmaps,key 过期
简单稳定
源码少、单线程模型
主从复制
Redis 支持数据的备份(master-slave)与集群(分片存储),以及拥有哨兵监控机制。
Redis 的所有操作都是原子性的,同时 Redis 还支持对几个操作合并后的原子性执行。
1.6、Redis 典型使用场景
缓存
计数器
消息队列
排行榜
社交网络
1.7、Redis 高并发原理
- Redis是纯内存数据库,一般都是简单的存取操作,线程占用的时间很多,时间的花费主要集中在IO上,所以读取速度快
- Redis使用的是非阻塞 IO,IO 多路复用,使用了单线程来轮询描述符,将数据库的开、关、读、写都转换成了事件,减少了线程切换时上下文的切换和竞争。
- Redis采用了单线程的模型,保证了每个操作的原子性,也减少了线程的上下文切换和竞争。
- Redis存储结构多样化,不同的数据结构对数据存储进行了优化,如压缩表,对短数据进行压缩存储,再如,跳表,使用有序的数据结构加快读取的速度。
- Redis采用自己实现的事件分离器,效率比较高,内部采用非阻塞的执行方式,吞吐能力比较大。
二、Redis下载与安装
2.1、Redis下载
这里只提供 linux 版本的安装部署
下载 Redis
进入官网找到下载地址:https://redis.io/download
右键 Download 按钮,选择复制链接地址,然后进入 linux 的 shell 控制台:输入 wget 将上面复制的下载链接粘贴上,如下命令:
wget https://download.redis.io/releases/redis-6.2.14.tar.gz
回车后等待下载完毕。
历史版本下载地址: http://download.redis.io/releases/
2.2、Redis安装
2.2.1、指定redis存放位置
[root@localhost]# cd /usr/local/src/
[root@localhost src]# wget http://download.redis.io/releases/redis-6.2.14.tar.gz
2.2.2、解压
[root@localhost src]# tar -xvf redis-6.2.14.tar.gz
cd redis-7.2.4
make && make install
2.2.3、安装
Ubuntu22.04安装依赖
sudo apt install build-essential gcc g++ make tcl -y
CentOS7 安装依赖
yum clean all
yum makecache fast
yum -y install gcc gcc-c++ make tcl
# (可选安装) 安装新版本gcc
# yum -y install centos-release-scl
# yum -y install devtoolset-9-gcc devtoolset-9-gcc-c++ devtoolset-9-binutils
# source /opt/rh/devtoolset-9/enable
# echo "source /opt/rh/devtoolset-9/enable" >>/etc/profile
# 查看GCC版本
gcc --version
进入redis目录,输入make
[root@localhost /]# cd /usr/local/src/redis-6.2.14
[root@localhost redis-6.2.14]# make && make PREFIX=/usr/local/redis install
[root@localhost redis-6.2.14]# mkdir -p /usr/local/redis/{etc,logs,data}
[root@localhost redis-6.2.14]# egrep -v "^$|^#" redis.conf > /usr/local/redis/etc/redis.conf
2.2.4、启动服务
进入/usr/local/redis/bin目录,输入./redis-server
[root@localhost redis]# cd /usr/local/redis/bin
[root@localhost bin]# ./redis-server
2.2.5、使用客户端程序
进入src目录,输入./redis-cli
./redis-cli -h 指定ip -p 指定端口 -a 指定密码
[root@localhost ~]# cd /usr/local/redis/bin
[root@localhost bin]# ./redis-cli
三、服务器操作
3.1、常用配置
在目录 /usr/local/redis/etc
下有一个 redis.conf 的配置文件。我们上面启动方式就是执行了该配置文件的配置运行的。我们可以通过 cat、vim、less
等 linux 内置的读取命令读取该文件。
如果我们现在这个 文件 /usr/local/redis/etc/redis.conf是空的也不要担心,因为原本的配置文件里面也全部都是注释行,我们可以根据自己的需求往里加内容,或者是自己cp 自己原有的压缩包里的配置文件进去,这样就有内容了
cp /usr//local/src/redis-6.2.14/redis.conf /usr/local/redis/etc/redis.conf
这里列举下比较重要的配置项:
配置项名称 | 配置项值范围 | 说明 |
---|---|---|
daemonize | yes、no | yes表示启用守护进程,默认是no即不以守护进程方式运行。其中Windows系统下不支持启用守护进程方式运行 |
port | 指定 Redis 监听端口,默认端口为 6379 | |
bind | 绑定的主机地址,如果需要设置远程访问则直接将这个属性备注下或者改为bind * 即可,这个属性和下面的protected-mode控制了是否可以远程访问 | |
protected-mode | yes 、no | 保护模式,该模式控制外部网是否可以连接redis服务,默认是yes,所以默认我们外网是无法访问的,如需外网连接rendis服务则需要将此属性改为no |
loglevel | debug、verbose、notice、warning | 日志级别,默认为 notice |
databases | 16 | 设置数据库的数量,默认的数据库是0。整个通过客户端工具可以看得到 |
rdbcompression | yes、no | 指定存储至本地数据库时是否压缩数据,默认为 yes,Redis 采用 LZF 压缩,如果为了节省 CPU 时间,可以关闭该选项,但会导致数据库文件变得巨大 |
dbfilename | dump.rdb | 指定本地数据库文件名,默认值为 dump.rdb |
dir | 指定本地数据库存放目录 | |
requirepass | 设置 Redis 连接密码,如果配置了连接密码,客户端在连接 Redis 时需要通过 AUTH命令提供密码,默认关闭 | |
maxclients | 0 | 设置同一时间最大客户端连接数,默认无限制,Redis 可以同时打开的客户端连接数为 Redis 进程可以打开的最大文件描述符数,如果设置 maxclients 0,表示不作限制。当客户端连接数到达限制时,Redis 会关闭新的连接并向客户端返回 max number of clients reached 错误信息 |
maxmemory | XXX | 指定 Redis 最大内存限制,Redis 在启动时会把数据加载到内存中,达到最大内存后,Redis 会先尝试清除已到期或即将到期的 Key,当此方法处理 后,仍然到达最大内存设置,将无法再进行写入操作,但仍然可以进行读取操作。Redis 新的 vm 机制,会把 Key 存放内存,Value 会存放在 swap 区。配置项值范围列里XXX为数值 |
3.2、服务器端
3.2.1、查看是否启动
[root@localhost redis]# ps -ef|grep redis
或
[root@localhost redis]# ./bin/redis-cli ping
3.2.2、启动
前台启动
[root@localhost redis]# ./bin/redis-server
后台启动
修改/usr/local/redis/etc/redis.conf文件
daemonize yes #前台启动,改后台启动
指定配置文件,启动
[root@localhost redis]# ./bin/redis-server ./etc/redis.conf
3.1.3、关闭
[root@localhost redis]# ./bin/redis-cli shutdown
3.2、客户端
3.2.1、启动
[root@localhost redis]# ./bin/redis-cli
127.0.0.1:6379>
3.2.2、关闭
方式一:指令ctrl+c
方式二:执行指令quit
方式三:执行指令exit
3.3、设置远程访问
修改/usr/local/redis/etc/redis.conf文件
#bind 127.0.0.1 #注释掉允许本地连接
protected-mode no #允许远程访问
四、Redis客户端
4.1、Redis客户端下载
下载地址:
(局域网)http://192.168.56.200/Software/RedisDesktopManager.exe
4.2、安装
双击打开程序,选择“下一步”
继续选择“我同意”
选择安装路径,点击“安装”
安装中。。。。。。。
安装完成,点击“下一步”
选择“桌面快捷”,点击“完成”
五、Redis客户端应用
5.1、连接Redis服务端
打开客户端
点击“Connect to Redis Server”,创建连接
5.2、客户端操作
如果报错:
一。允许远程登录
基本配置
把yes改为no允许远程登录即可
#更改配置文=文件内的内容
protected-mode no #保护模式,该模式控制外部网是否可以连接redis服务,默认是yes,所以默认我们外网是无法访问的,如需外网连接rendis服务则需要将此属性改为no
#bind 127.0.0.1 -::1
添加 bind 0.0.0.0 #测试环境是允许所有 生成环境中尽量指定IP地址
#以上操作 就可以做到访问
二。创建远程登录密码
#为了安全,远程访问必须设置密码认证:
#在配置文件中设置密码:
找到 requirepass 配置(默认被注释),取消注释并设置密码:
requirepass your_password # 替换为你的密码,如requirepass redis123
#保存配置文件并重启 Redis:
#先停止Redis(若已启动)
redis-cli -h 127.0.0.1 -p 6379 shutdown
#用新配置启动
redis-server /usr/local/redis/conf/redis.conf
#redis-server /usr/local/redis/conf/redis.conf 和 redis-server直接启动的区别是什么
>
redis-server /usr/local/redis/conf/redis.conf 明确指定了配置文件路径,Redis 会 优先加载该文件中的所有配置(如端口、密码、持久化方式、允许远程访问等)。
>
直接执行 redis-server 未指定配置文件,Redis 会 使用内置的默认配置,忽略你在 redis.conf