Redis

发布于:2025-08-15 ⋅ 阅读:(17) ⋅ 点赞:(0)

Redis 是什么?

Redis(Remote Dictionary Server)是一个开源的、高性能的键值对(Key-Value)存储数据库,由 Salvatore Sanfilippo 开发。它支持多种数据结构(如字符串、哈希、列表、集合等),并通过内存存储实现超高读写速度,同时提供持久化、集群、事务等功能,广泛用于缓存、会话存储、消息队列等场景。

特性 Redis MySQL
存储位置 主要在内存中,磁盘仅用于持久化备份 主要在磁盘中,内存用于缓存(如 InnoDB 缓冲池)
读写速度 极快(微秒级),内存操作无磁盘 I/O 延迟 较慢(毫秒级),受磁盘 I/O 和索引效率影响
数据容量限制 受内存大小限制,适合存储热点数据 受磁盘容量限制,可存储海量数据
持久化方式 RDB(快照)、AOF(日志追加),可选 事务日志(如 InnoDB 的 redo log)、二进制日志

Redis 的核心优点

  1. 超高性能

    • 基于内存存储,读写速度极快(单机每秒可处理 10 万 + 请求)。
    • 采用单线程模型避免多线程切换开销,同时通过 I/O 多路复用处理并发请求。
  2. 丰富的数据结构
    支持多种数据类型,满足复杂业务需求:

    • 字符串(String):存储文本、数字(如计数器)。
    • 哈希(Hash):存储对象(如用户信息)。
    • 列表(List):实现队列、栈(如消息队列)。
    • 集合(Set):去重、交集 / 并集运算(如共同好友)。
    • 有序集合(Sorted Set):带分数的排序(如排行榜)。
  3. 持久化机制
    避免内存数据丢失,支持两种持久化方式:

    • RDB(快照):定期将内存数据生成二进制文件(适合备份)。
    • AOF(Append Only File):记录所有写操作日志,重启时重放(适合数据安全性要求高的场景)。
    • 可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用
  4. 高可用与集群

    • 主从复制:通过主节点同步数据到从节点,实现读写分离(主写从读)。
    • 哨兵(Sentinel):监控主从节点,自动故障转移(主节点挂了后从节点升级为主)。
    • 集群(Cluster):分片存储数据,支持水平扩展(最多 16384 个节点)。
  5. 原子操作与事务

    • 支持原子性命令(如 INCR 自增),避免并发问题。
    • 提供事务(MULTI/EXEC),确保一系列命令的原子执行。
  6. 跨平台与易用性

    • 支持 Linux、Windows、macOS 等系统,安装部署简单。
    • 提供简洁的命令行工具(redis-cli)和丰富的客户端库(Java、Python、Go 等)。
  7. 支持数据的备份,即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 高并发原理

  1. Redis是纯内存数据库,一般都是简单的存取操作,线程占用的时间很多,时间的花费主要集中在IO上,所以读取速度快
  2. Redis使用的是非阻塞 IO,IO 多路复用,使用了单线程来轮询描述符,将数据库的开、关、读、写都转换成了事件,减少了线程切换时上下文的切换和竞争。
  3. Redis采用了单线程的模型,保证了每个操作的原子性,也减少了线程的上下文切换和竞争。
  4. Redis存储结构多样化,不同的数据结构对数据存储进行了优化,如压缩表,对短数据进行压缩存储,再如,跳表,使用有序的数据结构加快读取的速度。
  5. 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/

image-20240317111247063

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

image20200223235513766.png

三、服务器操作

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、安装

双击打开程序,选择“下一步”

image20200224005136221.png

继续选择“我同意”

image20200224005207896.png

选择安装路径,点击“安装”

image20200224005249413.png

安装中。。。。。。。

image20200224005325342.png

安装完成,点击“下一步”

image20200224005411045.png

选择“桌面快捷”,点击“完成”

image20200224005451664.png

五、Redis客户端应用

5.1、连接Redis服务端

打开客户端

image20200225125542277.png

点击“Connect to Redis Server”,创建连接

image20200225125723427.png

5.2、客户端操作

image20200225130032651.png

如果报错:

一。允许远程登录
基本配置

把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