← 返回首页
🔧

Redis 入门基础

📂 devops ⏱ 3 min 471 words

Redis 入门基础

什么是 Redis

Redis(Remote Dictionary Server)是一个开源的、基于内存的高性能键值数据库。它支持多种数据结构,包括字符串、哈希、列表、集合和有序集合,广泛用于缓存、消息队列和实时应用。

安装 Redis

Ubuntu/Debian

sudo apt update
sudo apt install redis-server

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

CentOS/RHEL

sudo yum install epel-release
sudo yum install redis

sudo systemctl start redis
sudo systemctl enable redis

macOS

brew install redis

# 启动服务
brew services start redis

验证安装

# 检查版本
redis-server --version

# 测试连接
redis-cli ping
# 应返回 PONG

基本操作

连接 Redis

# 连接本地 Redis
redis-cli

# 连接远程 Redis
redis-cli -h 192.168.1.100 -p 6379

# 使用密码连接
redis-cli -a password

# 交互式连接
redis-cli --no-auth-warning -h 192.168.1.100 -p 6379 -a password

基本命令

# 测试连接
PING

# 设置键值
SET key value

# 获取键值
GET key

# 删除键
DEL key

# 检查键是否存在
EXISTS key

# 设置过期时间
SETEX key 3600 value  # 3600 秒后过期

# 获取键的过期时间
TTL key

数据类型

字符串 (String)

# 基本操作
SET name "John"
GET name
MSET key1 value1 key2 value2
MGET key1 key2

# 数字操作
SET counter 0
INCR counter
INCRBY counter 10
DECR counter

# 追加
APPEND name " Doe"

# 截取
SUBSTR name 0 3

哈希 (Hash)

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

# 批量设置
HMSET user:2 name "Alice" email "alice@example.com" age 25

# 获取字段值
HGET user:1 name
HMGET user:1 name email

# 获取所有字段
HGETALL user:1

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

# 删除字段
HDEL user:1 age

列表 (List)

# 添加元素
LPUSH mylist "a"
RPUSH mylist "b"

# 获取元素
LRANGE mylist 0 -1  # 获取所有元素
LINDEX mylist 0     # 获取指定索引元素

# 弹出元素
LPOP mylist
RPOP mylist

# 获取列表长度
LLEN mylist

# 截取列表
LTRIM mylist 0 2

集合 (Set)

# 添加元素
SADD myset "a" "b" "c"

# 获取所有元素
SMEMBERS myset

# 检查元素存在
SISMEMBER myset "a"

# 获取集合大小
SCARD myset

# 集合运算
SINTER set1 set2    # 交集
SUNION set1 set2    # 并集
SDIFF set1 set2     # 差集

# 随机获取元素
SRANDMEMBER myset 2

有序集合 (Sorted Set)

# 添加元素(带分数)
ZADD leaderboard 100 "player1"
ZADD leaderboard 200 "player2"
ZADD leaderboard 150 "player3"

# 获取排名
ZRANK leaderboard "player1"  # 升序排名
ZREVRANK leaderboard "player1"  # 降序排名

# 获取范围内的元素
ZRANGE leaderboard 0 -1 WITHSCORES
ZREVRANGE leaderboard 0 9 WITHSCORES  # 前 10 名

# 获取分数
ZSCORE leaderboard "player1"

实践案例

缓存会话

# 存储用户会话
SET session:abc123 '{"user_id": 1, "username": "john"}' EX 3600

# 获取会话
GET session:abc123

# 删除会话
DEL session:abc123

计数器

# 页面访问计数
INCR page:views:home

# 获取计数
GET page:views:home

# 批量计数
MSET page:views:about 100 page:views:contact 50

消息队列

# 生产者
LPUSH queue:tasks '{"task": "send_email", "user": "john"}'

# 消费者
RPOP queue:tasks

排行榜

# 更新分数
ZINCRBY leaderboard 10 "player1"

# 获取前 10 名
ZREVRANGE leaderboard 0 9 WITHSCORES

# 获取玩家排名
ZREVRANK leaderboard "player1"

配置优化

redis.conf 关键配置

# 绑定地址
bind 127.0.0.1

# 端口
port 6379

# 密码
requirepass your_password

# 最大内存
maxmemory 1gb
maxmemory-policy allkeys-lru

# 持久化
save 900 1
save 300 10
save 60 10000

# 日志级别
loglevel notice
logfile /var/log/redis/redis.log

常用命令

# 服务器信息
INFO

# 查看键数量
DBSIZE

# 清空当前数据库
FLUSHDB

# 清空所有数据库
FLUSHALL

# 保存数据到磁盘
SAVE
BGSAVE

# 查看慢查询日志
SLOWLOG GET

常见问题

连接被拒绝

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

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

# 检查配置文件
cat /etc/redis/redis.conf | grep bind

内存不足

# 查看内存使用
INFO memory

# 清理过期键
redis-cli --bigkeys

# 调整淘汰策略
CONFIG SET maxmemory-policy allkeys-lru

最佳实践

总结

Redis 是一个功能强大的内存数据库,适用于缓存、消息队列和实时应用。掌握基本数据类型和操作可以构建高性能的应用系统。