Redis 入门基础
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
最佳实践
- 使用合适的数据类型
- 设置键的过期时间
- 使用 Pipeline 减少网络开销
- 监控内存使用
- 定期备份数据
总结
Redis 是一个功能强大的内存数据库,适用于缓存、消息队列和实时应用。掌握基本数据类型和操作可以构建高性能的应用系统。