Skip to main content

Redis数据库管理

Redis是一个开源的内存数据结构存储系统,可以用作数据库、缓存和消息中间件。它支持多种数据结构,如字符串、哈希、列表、集合等,具有高性能和丰富的特性。

Redis安装

Ubuntu/Debian系统

# 更新包列表
sudo apt update

# 安装Redis服务器
sudo apt install redis-server

# 启动Redis服务
sudo systemctl start redis-server

# 设置开机自启
sudo systemctl enable redis-server

# 检查Redis服务状态
sudo systemctl status redis-server

CentOS/RHEL系统

# 安装EPEL仓库
sudo yum install epel-release

# 安装Redis
sudo yum install redis

# 启动Redis服务
sudo systemctl start redis

# 设置开机自启
sudo systemctl enable redis

# 检查Redis服务状态
sudo systemctl status redis

从源码编译安装

# 安装编译依赖
sudo apt install build-essential tcl # Ubuntu/Debian
sudo yum groupinstall "Development Tools" # CentOS/RHEL

# 下载Redis源码
wget http://download.redis.io/redis-stable.tar.gz
tar xzf redis-stable.tar.gz
cd redis-stable

# 编译安装
make
make test
sudo make install

# 创建Redis用户
sudo adduser --system --group --no-create-home redis

# 创建数据目录
sudo mkdir /var/lib/redis
sudo chown redis:redis /var/lib/redis
sudo chmod 770 /var/lib/redis

Redis基本配置

配置文件位置

# 主配置文件
/etc/redis/redis.conf # Ubuntu/Debian
/etc/redis.conf # CentOS/RHEL

重要配置参数

# 网络配置
bind 127.0.0.1 # 绑定IP地址
port 6379 # 监听端口
timeout 0 # 客户端空闲超时时间

# 安全配置
requirepass yourpassword # 设置密码
rename-command FLUSHDB "" # 禁用危险命令
rename-command FLUSHALL "" # 禁用危险命令

# 持久化配置
save 900 1 # 900秒内至少1个key改变则保存
save 300 10 # 300秒内至少10个key改变则保存
save 60 10000 # 60秒内至少10000个key改变则保存

# 内存管理
maxmemory 256mb # 最大内存使用
maxmemory-policy allkeys-lru # 内存淘汰策略

# 日志配置
loglevel notice # 日志级别
logfile /var/log/redis/redis-server.log # 日志文件路径

# 数据目录
dir /var/lib/redis # 数据文件存储目录
dbfilename dump.rdb # 数据库文件名

Redis基本操作

连接Redis

# 连接本地Redis
redis-cli

# 连接远程Redis
redis-cli -h hostname -p port

# 连接带密码的Redis
redis-cli -a password

# 连接指定数据库
redis-cli -n 1

基本命令

# 查看Redis信息
INFO

# 查看服务器信息
INFO server

# 查看内存信息
INFO memory

# 查看客户端信息
INFO clients

# 查看持久化信息
INFO persistence

# 查看统计信息
INFO stats

# 查看配置
CONFIG GET *

# 设置配置
CONFIG SET loglevel verbose

# 选择数据库(0-15)
SELECT 0

# 查看所有key
KEYS *

# 查看key类型
TYPE keyname

# 检查key是否存在
EXISTS keyname

# 删除key
DEL keyname

# 设置过期时间
EXPIRE keyname 60
TTL keyname

数据类型操作

字符串(String)

# 设置字符串
SET mykey "Hello World"

# 获取字符串
GET mykey

# 设置多个键值对
MSET key1 "value1" key2 "value2"

# 获取多个值
MGET key1 key2

# 自增/自减
INCR counter
DECR counter
INCRBY counter 5
DECRBY counter 3

# 追加字符串
APPEND mykey " Additional text"

哈希(Hash)

# 设置哈希字段
HSET user:1 name "John" age "30" email "john@example.com"

# 获取哈希字段
HGET user:1 name

# 获取所有字段和值
HGETALL user:1

# 获取所有字段名
HKEYS user:1

# 获取所有字段值
HVALS user:1

# 检查字段是否存在
HEXISTS user:1 name

# 删除字段
HDEL user:1 email

# 字段数量
HLEN user:1

列表(List)

# 在列表左侧插入元素
LPUSH mylist "item1"
LPUSH mylist "item2"

# 在列表右侧插入元素
RPUSH mylist "item3"

# 获取列表元素
LRANGE mylist 0 -1

# 获取列表长度
LLEN mylist

# 从左侧弹出元素
LPOP mylist

# 从右侧弹出元素
RPOP mylist

# 在指定元素前后插入
LINSERT mylist BEFORE "item2" "newitem"

集合(Set)

# 添加元素到集合
SADD myset "item1"
SADD myset "item2" "item3"

# 查看集合所有元素
SMEMBERS myset

# 检查元素是否在集合中
SISMEMBER myset "item1"

# 获取集合元素数量
SCARD myset

# 删除元素
SREM myset "item1"

# 集合交集
SINTER set1 set2

# 集合并集
SUNION set1 set2

# 集合差集
SDIFF set1 set2

有序集合(Sorted Set)

# 添加元素到有序集合
ZADD myzset 1 "item1"
ZADD myzset 2 "item2" 3 "item3"

# 查看有序集合元素
ZRANGE myzset 0 -1 WITHSCORES

# 按分数范围获取元素
ZRANGEBYSCORE myzset 1 2

# 获取元素排名
ZRANK myzset "item2"

# 获取元素分数
ZSCORE myzset "item2"

# 删除元素
ZREM myzset "item1"

# 获取元素数量
ZCARD myzset

Redis持久化

RDB持久化

# 手动生成RDB快照
SAVE

# 后台生成RDB快照
BGSAVE

# 查看最近一次保存时间
LASTSAVE

AOF持久化

# 在redis.conf中启用AOF
appendonly yes

# AOF文件名
appendfilename "appendonly.aof"

# AOF同步策略
appendfsync everysec

# AOF重写配置
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb

持久化管理

# 重写AOF文件
BGREWRITEAOF

# 查看持久化状态
INFO persistence

Redis性能监控

性能指标

# 查看连接数
INFO clients

# 查看内存使用
INFO memory

# 查看命令统计
INFO commandstats

# 查看慢查询日志
SLOWLOG GET 10
SLOWLOG LEN
SLOWLOG RESET

性能优化

# 查看最大内存配置
CONFIG GET maxmemory

# 查看内存淘汰策略
CONFIG GET maxmemory-policy

# 设置最大内存
CONFIG SET maxmemory 512mb

# 设置内存淘汰策略
CONFIG SET maxmemory-policy allkeys-lru

Redis安全配置

密码认证

# 在redis.conf中设置密码
requirepass yourpassword
# 连接后认证
AUTH yourpassword

# 或在连接时指定密码
redis-cli -a yourpassword

网络安全

# 绑定特定IP地址
bind 127.0.0.1 192.168.1.100

# 禁用危险命令
rename-command FLUSHDB ""
rename-command FLUSHALL ""
rename-command KEYS ""
rename-command CONFIG "CONFIG_b83c92d1c2d34123"

防火墙配置

# Ubuntu/Debian (ufw)
sudo ufw allow from 192.168.1.0/24 to any port 6379

# CentOS/RHEL (firewalld)
sudo firewall-cmd --permanent --add-rich-rule="rule family='ipv4' source address='192.168.1.0/24' port protocol='tcp' port='6379' accept"
sudo firewall-cmd --reload

Redis集群和复制

主从复制

# 从服务器配置
slaveof masterip masterport

# 从服务器密码认证
masterauth masterpassword

哨兵模式

# sentinel.conf配置
sentinel monitor mymaster 127.0.0.1 6379 2
sentinel auth-pass mymaster password
sentinel down-after-milliseconds mymaster 5000
sentinel parallel-syncs mymaster 1
sentinel failover-timeout mymaster 10000

常用管理命令

系统管理

# 启动Redis服务
sudo systemctl start redis-server

# 停止Redis服务
sudo systemctl stop redis-server

# 重启Redis服务
sudo systemctl restart redis-server

# 查看Redis服务状态
sudo systemctl status redis-server

# 查看Redis版本
redis-server --version
redis-cli --version

数据库管理

# 切换数据库
SELECT 0

# 清空当前数据库
FLUSHDB

# 清空所有数据库
FLUSHALL

# 查看数据库大小
DBSIZE

# 后台保存数据
BGSAVE

# 查看最后保存时间
LASTSAVE

实践练习

练习1:Redis安装和基本配置

# 1. 安装Redis
sudo apt update
sudo apt install redis-server

# 2. 启动并检查服务
sudo systemctl start redis-server
sudo systemctl enable redis-server
sudo systemctl status redis-server

# 3. 连接Redis
redis-cli

# 4. 基本操作
SET mykey "Hello Redis"
GET mykey
INFO

# 5. 退出Redis客户端
EXIT

练习2:数据类型操作

# 1. 字符串操作
redis-cli
SET counter 0
INCR counter
INCR counter
GET counter

# 2. 哈希操作
HSET user:1 name "Alice" age "25" city "Beijing"
HGETALL user:1
HGET user:1 name

# 3. 列表操作
LPUSH tasks "task1"
LPUSH tasks "task2"
RPUSH tasks "task3"
LRANGE tasks 0 -1

# 4. 集合操作
SADD tags "redis" "database" "nosql"
SMEMBERS tags
SISMEMBER tags "redis"

# 5. 有序集合操作
ZADD scores 100 "Alice" 95 "Bob" 87 "Charlie"
ZRANGE scores 0 -1 WITHSCORES

练习3:持久化和备份

# 1. 查看持久化状态
redis-cli INFO persistence

# 2. 手动生成RDB快照
redis-cli BGSAVE

# 3. 查看AOF文件
ls -la /var/lib/redis/

# 4. 模拟数据备份
redis-cli SAVE
sudo cp /var/lib/redis/dump.rdb /backup/redis_backup.rdb

# 5. 恢复数据(需要停止Redis服务)
sudo systemctl stop redis-server
sudo cp /backup/redis_backup.rdb /var/lib/redis/dump.rdb
sudo chown redis:redis /var/lib/redis/dump.rdb
sudo systemctl start redis-server

故障排除

常见问题

  1. 无法连接Redis

    # 检查Redis服务状态
    sudo systemctl status redis-server

    # 检查端口监听
    netstat -tuln | grep 6379

    # 检查绑定地址配置
    grep "^bind" /etc/redis/redis.conf

    # 检查错误日志
    sudo tail -f /var/log/redis/redis-server.log
  2. 内存不足

    # 查看内存使用情况
    redis-cli INFO memory

    # 设置最大内存
    redis-cli CONFIG SET maxmemory 256mb

    # 设置内存淘汰策略
    redis-cli CONFIG SET maxmemory-policy allkeys-lru

    # 查看key数量
    redis-cli DBSIZE
  3. 性能问题

    # 查看慢查询日志
    redis-cli SLOWLOG GET 10

    # 查看命令统计
    redis-cli INFO commandstats

    # 查看客户端连接数
    redis-cli INFO clients

    # 优化大key
    redis-cli --bigkeys

通过掌握Redis数据库管理技能,你可以有效地在Linux系统上部署、配置和维护Redis数据库服务,为应用提供高性能的缓存和数据存储解决方案。