Category 职业解析

Redis 作为一款高性能的开源内存数据库,凭借其高速读写、丰富的数据类型和灵活的运维特性,在缓存、计数器、排行榜等场景中被广泛应用。本文将从 Redis 的核心应用场景出发,带你一步步完成 Redis 6.2.13 的源码编译安装、配置优化,并详细讲解常用数据类型的用法及运维管理命令,适合 Redis 初学者快速入门并落地实操。

1. Redis 基础:应用场景与安装启动在开始实操前,我们先明确 Redis 的核心价值——基于内存的键值存储,支持持久化,兼具高性能与灵活性。下面从应用场景和安装配置两部分展开。

1.1 Redis 典型应用场景Redis 的应用场景与其数据类型和特性强相关,以下是企业中最常用的场景:

应用场景核心优势缓存内存读写速度远超磁盘,减轻数据库压力(如缓存热点商品、用户信息)计数器支持原子操作(incr/decr),适合点赞数、访问量、接口调用次数统计排行榜有序集合(zset)天然支持按分数排序,适合实现热门榜单、积分排名地理位置GEO 类型支持经纬度存储与距离计算,适合附近门店、定位服务队列列表(list)的 lpush/rpop 操作可实现简单消息队列,缓解高并发压力评论和弹幕字符串或列表存储,支持快速追加与读取,适配实时互动场景1.2 Redis 6.2.13 源码编译安装Redis 官方推荐通过源码编译安装,可灵活指定版本和安装路径,以下是详细步骤(支持 CentOS/Ubuntu 系统)。

1.2.1 准备依赖环境Redis 编译依赖 GCC 环境,需先安装对应工具:

CentOS 系统:yum install gcc -y

Ubuntu 系统:sudo apt update && sudo apt install gcc -y

1.2.2 下载并解压 Redis 源码进入源码存放目录(推荐 /usr/src):cd /usr/src

下载 Redis 6.2.13 源码包(官方地址:https://redis.io/downloads/):wget https://download.redis.io/releases/redis-6.2.13.tar.gz

解压源码包:tar zxvf redis-6.2.13.tar.gz

1.2.3 编译并安装 Redis进入解压后的源码目录:

cd redis-6.2.13

编译并指定安装路径(此处安装到 /usr/local/redis6):

make && make install PREFIX=/usr/local/redis6

验证安装结果:进入安装目录的 bin 文件夹,查看核心文件:

cd /usr/local/redis6/bin && ll

核心文件说明:

redis-server:Redis 服务启动命令redis-cli:Redis 客户端命令(用于连接服务)redis-benchmark:Redis 性能测试工具1.3 Redis 目录规划与配置文件为了便于后续运维(如数据、日志、配置分离),我们单独规划 Redis 工作目录,并编写配置文件。

1.3.1 创建工作目录创建包含 conf(配置)、data(数据)、log(日志)的目录结构:

mkdir /data/redis7001/{conf,data,log} -p

端口 7001:用于区分不同 Redis 实例(单机多实例部署时常用)1.3.2 编写 Redis 配置文件进入配置目录,创建并编辑 redis.conf:

cd /data/redis7001/conf && vim redis.conf

粘贴以下配置(关键参数已标注说明):

# 基础网络配置

port 7001 # Redis 服务端口

daemonize yes # 后台运行(守护进程模式)

# 进程与日志配置

pidfile "/data/redis7001/data/redis.pid" # PID 文件路径(用于管理进程)

loglevel notice # 日志级别(notice:常规信息,debug:调试信息)

logfile "/data/redis7001/log/redis.log" # 日志文件路径

# 数据库与持久化配置

databases 16 # 支持的数据库数量(默认16个,用 select 切换)

# save 1800 1 # 注释:关闭 RDB 自动持久化(按需开启)

dbfilename "dump.rdb" # RDB 持久化文件名

dir "/data/redis7001/data" # 数据文件(RDB/AOF)存储目录

# 内存管理配置

maxmemory 1gb # 最大使用内存(防止内存溢出)

maxmemory-policy volatile-lru # 内存满时策略:淘汰过期的 key

# AOF 持久化配置(按需开启)

appendonly no # 关闭 AOF 持久化(开启设为 yes)

appendfilename "appendonly.aof" # AOF 文件名

# 慢查询与安全配置

slowlog-log-slower-than 10000 # 慢查询阈值:超过 10ms 的命令记录

slowlog-max-len 128 # 慢查询日志最大条数

requirepass "IdfaUqTcdad82" # Redis 访问密码(生产环境必设)

1.4 Redis 服务启动与登录完成配置后,启动 Redis 服务并通过客户端连接。

1.4.1 启动 Redis 服务通过指定配置文件启动:

/usr/local/redis6/bin/redis-server /data/redis7001/conf/redis.conf

验证启动结果(查看进程):

ps -ef | grep redis

若输出包含 /usr/local/redis6/bin/redis-server *:7001,说明启动成功。

1.4.2 配置环境变量(可选,简化命令)为了避免每次输入完整路径,可将 Redis 命令加入系统环境变量:

编辑环境变量文件:vim /etc/profile

在文件末尾添加:export PATH="/usr/local/redis6/bin:$PATH"

生效环境变量:source /etc/profile

1.4.3 客户端登录 Redis通过 redis-cli 连接服务,两种方式:

直接带密码登录:redis-cli -p 7001 -a IdfaUqTcdad82

先连接再认证(更安全,避免密码暴露在命令行):redis-cli -p 7001

127.0.0.1:7001> auth IdfaUqTcdad82 # 输入密码认证

登录成功后,提示符会变为 127.0.0.1:7001>,此时可执行 Redis 命令。

2. Redis 核心:常用数据类型及用法Redis 支持 8 种数据类型,其中 string、hash、list、set、zset 是日常开发中最常用的 5 种,另外 HyperLogLog、bitmap、GEO 也有典型场景,以下逐一讲解其用法。

2.1 Redis 常用数据类型概览先通过表格快速了解各类型的核心特性:

数据类型核心描述典型场景string单键单值,value 可存字符串、数字或二进制(最大 512MB)缓存单个值、计数器hash键值对集合(key -> field -> value),适合存储对象存储用户信息、商品详情list有序字符串列表(按插入顺序),支持两端进出消息队列、最新消息列表set无序字符串集合,元素唯一,支持交集、并集运算好友去重、标签集合zset有序集合(元素唯一,关联分数 score),按分数排序排行榜、优先级队列HyperLogLog用于估计集合基数(不存储具体元素),占用内存极小UV 统计(独立访客数)bitmap位存储(0/1),按位操作,节省内存签到记录、状态标记GEO存储经纬度,支持距离计算、范围查询附近门店、地理位置排序2.2 各数据类型实操命令以下命令均在 Redis 客户端(127.0.0.1:7001>)中执行,代码块标注具体用法。

2.2.1 string:字符串类型核心能力:基础读写、数值增减(原子操作)。

# 1. 基础用法:设置、获取、删除

set string_test "hello redis" # 设置 key

get string_test # 获取 value(输出 "hello redis")

del string_test # 删除 key

# 2. 计数功能(value 为数字时)

incr count_test # 数值 +1(初始为 0,执行后为 1)

incrby count_test 3 # 数值 +3(执行后为 4)

decr count_test # 数值 -1(执行后为 3)

decrby count_test 2 # 数值 -2(执行后为 1)

get count_test # 查看结果(输出 "1")

2.2.2 hash:哈希类型核心能力:存储对象(如用户信息),支持单独操作字段(field)。

# 1. 设置字段(存储用户信息:user:01 为 key,name/age 为 field)

hset user:01 name "martin"

hset user:01 age 18

# 2. 获取字段值

hget user:01 name # 输出 "martin"

hget user:01 age # 输出 "18"

# 3. 获取所有字段和值

hgetall user:01 # 输出 1) "name" 2) "martin" 3) "age" 4) "18"

# 4. 其他常用操作

hlen user:01 # 统计字段数量(输出 2)

hkeys user:01 # 获取所有字段(输出 1) "name" 2) "age")

hdel user:01 age # 删除 age 字段

hkeys user:01 # 验证删除(输出 1) "name")

2.2.3 list:列表类型核心能力:有序存储,支持 LPUSH(左进)、RPUSH(右进)、LPOP(左出)、RPOP(右出)。

# 1. 插入元素(左进 + 右进)

LPUSH list_test "aaa" "bbb" # 左进:列表变为 ["bbb", "aaa"]

RPUSH list_test "ccc" # 右进:列表变为 ["bbb", "aaa", "ccc"]

# 2. 获取元素(范围查询)

lrange list_test 0 -1 # 获取所有元素(输出 ["bbb", "aaa", "ccc"])

lrange list_test 0 1 # 获取前 2 个元素(输出 ["bbb", "aaa"])

# 3. 元素弹出(删除并返回)

llen list_test # 查看列表长度(输出 3)

LPOP list_test # 左弹出 "bbb"(列表变为 ["aaa", "ccc"])

RPOP list_test # 右弹出 "ccc"(列表变为 ["aaa"])

lrange list_test 0 -1 # 验证结果(输出 ["aaa"])

2.2.4 set:集合类型核心能力:元素唯一(自动去重),支持交集、并集、差集运算。

# 1. 添加元素(自动去重)

sadd set_test "one" "two" "three"

sadd set_test "two" # 重复添加,无效果

# 2. 获取所有元素

SMEMBERS set_test # 输出 1) "one" 2) "two" 3) "three"(无序)

# 3. 判断元素是否存在

SISMEMBER set_test "one" # 存在,输出 1

SISMEMBER set_test "four" # 不存在,输出 0

# 4. 删除元素

srem set_test "two"

SMEMBERS set_test # 验证:输出 1) "one" 2) "three"

2.2.5 zset:有序集合类型核心能力:元素唯一,关联分数(score),按分数排序。

# 1. 添加元素(格式:zadd key score1 value1 score2 value2)

zadd zset_test 1 "zhangsan" 2 "lisi" 3 "wangwu"

# 2. 查看元素(按分数升序)

ZRANGE zset_test 0 -1 # 只看元素:输出 ["zhangsan", "lisi", "wangwu"]

ZRANGE zset_test 0 -1 WITHSCORES # 看元素+分数:输出包含分数的列表

# 3. 获取元素分数

zscore zset_test "lisi" # 输出 "2"

# 4. 删除元素

ZREM zset_test "lisi"

ZRANGE zset_test 0 -1 WITHSCORES # 验证:输出 ["zhangsan" (1), "wangwu" (3)]

# 5. 统计元素个数

ZCARD zset_test # 输出 2

2.2.6 特殊数据类型:HyperLogLog/bitmap/GEO1. HyperLogLog(基数估计)

用于统计“独立元素个数”(如 UV),占用内存仅约 12KB,适合大数据量场景:

PFADD hll_test "apple" "banana" "cherry" # 添加元素

PFCOUNT hll_test # 估计基数(输出 3)

PFADD hll_test "apple" # 重复添加

PFCOUNT hll_test # 基数仍为 3(去重)

2. bitmap(位存储)

用位(0/1)表示状态,适合签到、在线状态等场景(示例:用户 1001 的签到记录):

# 设置签到:第 0 天(1=签到,0=未签)

SETBIT user:1001 0 1 # 第 0 天签到

SETBIT user:1001 1 1 # 第 1 天签到

SETBIT user:1001 2 0 # 第 2 天未签

SETBIT user:1001 4 1 # 第 4 天签到

# 查询签到状态:第 1 天是否签到

getbit user:1001 1 # 输出 1(已签)

# 统计签到次数(位值为 1 的总数)

bitcount user:1001 # 输出 3(第 0、1、4 天签到)

3. GEO(地理位置)

存储经纬度,支持距离计算、范围查询(示例:存储两个地点并计算距离):

# 添加地理位置:格式 geoadd key 经度 纬度 地点名

geoadd geo_test 20 30 "point_a" 40 60 "point_b"

# 计算两点距离:单位 km(支持 m/km/mi/ft)

geodist geo_test "point_a" "point_b" km # 输出距离(约 4447.0083 km)

# 查询指定范围的地点:以 (25,35) 为中心,1000km 内的地点

georadius geo_test 25 35 1000 km # 输出 ["point_a"]

3. Redis 运维:常用管理命令掌握 Redis 运维命令,是保障服务稳定运行的关键。以下整理高频管理命令,涵盖认证、信息查看、key 操作、配置修改等场景。

3.1 基础运维:认证与信息查看3.1.1 客户端认证若未带密码登录,需执行 auth 命令认证:

127.0.0.1:7001> auth IdfaUqTcdad82 # 输入密码,返回 OK 表示成功

3.1.2 查看 Redis 服务信息通过 info 命令查看服务状态、内存、持久化等信息:

# 1. 查看所有信息(输出内容较多,分模块展示)

info

# 2. 查看指定模块信息(如 key 空间、内存)

info keyspace # 查看各数据库的 key 数量(如 db0:keys=9,expires=0)

info memory # 查看内存使用情况(如 used_memory_human:856.40K)

3.2 key 管理:查询、修改与删除3.2.1 key 查询与匹配

# 1. 先插入测试数据

set name.001 "zhangsan"

set name.002 "lisi"

set aaa "test"

# 2. 查看所有 key(生产环境慎用,数据量大时会阻塞)

keys *

# 3. 按前缀匹配(如查看 name 开头的 key)

keys name* # 输出 1) "name.001" 2) "name.002"

3.2.2 key 批量删除(按前缀)生产环境中,keys 匹配后删除建议用 scan(非阻塞)+ xargs:

# 格式:scan 匹配前缀 | xargs 批量删除

redis-cli -p 7001 -a IdfaUqTcdad82 --scan --pattern "name.*" | xargs -L 5000 redis-cli -p 7001 -a IdfaUqTcdad82 DEL

-L 5000:每次删除 5000 个 key,避免一次性删除过多导致阻塞。3.2.3 key 其他操作

# 1. 重命名 key(两种方式)

set hehe "test"

rename hehe hehe_bak # 直接重命名(若 hehe_bak 存在则覆盖)

renamenx hehe_bak hehe_new # 仅当 hehe_new 不存在时重命名(返回 1 成功,0 失败)

# 2. 判断 key 是否存在

exists hehe_bak # 存在返回 1,不存在返回 0

# 3. 查看 key 类型

type hehe_bak # 输出 "string"

# 4. 查看 key 占用内存

memory usage hehe_bak # 输出字节数(如 48)

# 5. 设置 key 过期时间

set martin "test"

expire martin 300 # 300 秒后过期

ttl martin # 查看剩余过期时间(输出 295,-2 表示已过期)

persist martin # 移除过期时间(key 永久有效)

3.3 数据库管理:切换、清空与统计

# 1. 切换数据库(默认 16 个,索引 0-15)

select 2 # 切换到 db2

# 2. 在 db2 插入数据

set aaa "db2_test"

# 3. 查看当前数据库 key 数量

dbsize # 输出 1

# 4. 清空当前数据库(db2)

flushdb # 谨慎使用!清空后 db2 无 key

# 5. 清空所有数据库(所有 db)

flushall # 生产环境严禁!清空 Redis 所有数据

3.4 配置修改与慢查询3.4.1 动态修改配置(无需重启)

# 1. 查看配置(如查看内存相关配置)

config get *memory* # 输出 maxmemory、maxmemory-policy 等

# 2. 动态修改配置(如将 maxmemory 改为 2GB)

config set maxmemory 2G

# 3. 将修改写入配置文件(避免重启后失效)

config rewrite # 需确保配置文件有写入权限

3.4.2 慢查询日志查看慢查询日志记录超过阈值(slowlog-log-slower-than)的命令,用于排查性能问题:

# 1. 查看慢查询日志(前 5 条)

slowlog get 5

# 2. 查看慢查询配置

config get slow* # 输出 slowlog-log-slower-than(10000)、slowlog-max-len(128)

3.5 客户端管理与服务控制3.5.1 客户端连接管理

# 1. 查看所有客户端连接

client list # 输出客户端 IP、端口、连接时间等信息

# 2. 强制关闭某个客户端(如 IP:42195)

client kill 127.0.0.1:42195

3.5.2 服务启动与关闭

# 1. 启动服务(指定配置文件)

/usr/local/redis6/bin/redis-server /data/redis7001/conf/redis.conf

# 2. 优雅关闭服务(登录客户端后执行)

shutdown # 会持久化数据后关闭,避免数据丢失

# 3. 强制关闭(不推荐,可能丢失数据)

ps -ef | grep redis | grep -v grep | awk '{print $2}' | xargs kill -9

4. 总结本文从 Redis 的应用场景出发,逐步讲解了 Redis 6.2.13 的源码编译安装、配置文件优化、核心数据类型用法及运维管理命令,覆盖了从“入门理解”到“实操落地”的全流程。

对于初学者,建议先跟着本文完成安装和数据类型实操,熟悉命令后再尝试在项目中应用(如用 string 做缓存、用 bitmap 做签到);对于运维人员,需重点掌握配置修改、慢查询排查、数据备份等命令,保障 Redis 服务稳定运行。

如果在实操中遇到问题(如启动失败、命令执行报错),可查看 Redis 日志文件(/data/redis7001/log/redis.log)定位原因,或在评论区留言交流!

Copyright © 2088 即时享福游戏特区 - 新服开荒福利基地 All Rights Reserved.
友情链接
top