1.1 Redis简介
1.1.1 什么是Redis
Redis(Remote Dictionary Server)是一个开源的、基于内存的数据结构存储系统,可以用作数据库、缓存和消息代理。Redis支持多种数据结构,如字符串、哈希、列表、集合、有序集合等。
1.1.2 Redis的特点
高性能
- 基于内存存储,读写速度极快
- 单线程模型,避免了锁竞争
- 支持异步I/O操作
丰富的数据类型
- String(字符串)
- Hash(哈希)
- List(列表)
- Set(集合)
- Sorted Set(有序集合)
- Bitmap(位图)
- HyperLogLog
- Geospatial(地理位置)
- Stream(流)
持久化支持
- RDB快照
- AOF日志
- 混合持久化
高可用性
- 主从复制
- 哨兵模式
- 集群模式
原子性操作
- 所有操作都是原子性的
- 支持事务
- 支持Lua脚本
1.1.3 Redis的应用场景
缓存系统
- 数据库查询缓存
- 页面缓存
- 对象缓存
会话存储
- 用户会话信息
- 购物车数据
- 临时数据存储
计数器
- 网站访问量统计
- 点赞数、评论数
- 限流计数
排行榜
- 游戏排行榜
- 热门文章排序
- 实时统计
消息队列
- 发布/订阅模式
- 任务队列
- 实时通信
分布式锁
- 资源互斥访问
- 防止重复操作
- 分布式协调
1.2 Redis安装与配置
1.2.1 Linux环境安装
使用包管理器安装
# Ubuntu/Debian
sudo apt update
sudo apt install redis-server
# CentOS/RHEL
sudo yum install epel-release
sudo yum install redis
# 或者使用dnf(较新版本)
sudo dnf install redis
源码编译安装
# 下载Redis源码
wget http://download.redis.io/redis-stable.tar.gz
tar xzf redis-stable.tar.gz
cd redis-stable
# 编译安装
make
sudo make install
# 创建配置目录
sudo mkdir /etc/redis
sudo cp redis.conf /etc/redis/
1.2.2 Windows环境安装
使用WSL(推荐)
# 在WSL中安装
sudo apt update
sudo apt install redis-server
使用Docker
# 拉取Redis镜像
docker pull redis:latest
# 运行Redis容器
docker run --name redis-server -p 6379:6379 -d redis:latest
# 运行带配置文件的容器
docker run --name redis-server \
-p 6379:6379 \
-v /path/to/redis.conf:/usr/local/etc/redis/redis.conf \
-d redis:latest redis-server /usr/local/etc/redis/redis.conf
1.2.3 基本配置
主要配置参数
# redis.conf 主要配置项
# 绑定地址
bind 127.0.0.1
# 端口号
port 6379
# 后台运行
daemonize yes
# 进程文件
pidfile /var/run/redis_6379.pid
# 日志级别
loglevel notice
# 日志文件
logfile /var/log/redis/redis-server.log
# 数据库数量
databases 16
# 密码设置
requirepass your_password
# 最大内存
maxmemory 2gb
# 内存淘汰策略
maxmemory-policy allkeys-lru
# 持久化配置
save 900 1
save 300 10
save 60 10000
# AOF持久化
appendonly yes
appendfilename "appendonly.aof"
appendfsync everysec
启动和停止服务
# 启动Redis服务
sudo systemctl start redis
# 停止Redis服务
sudo systemctl stop redis
# 重启Redis服务
sudo systemctl restart redis
# 设置开机自启
sudo systemctl enable redis
# 查看服务状态
sudo systemctl status redis
# 手动启动(使用配置文件)
redis-server /etc/redis/redis.conf
# 手动停止
redis-cli shutdown
1.3 Redis客户端工具
1.3.1 redis-cli命令行工具
基本连接
# 连接本地Redis
redis-cli
# 连接远程Redis
redis-cli -h hostname -p port
# 使用密码连接
redis-cli -h hostname -p port -a password
# 选择数据库
redis-cli -n database_number
# 执行单个命令
redis-cli set key value
redis-cli get key
常用参数
# 主要参数说明
-h <hostname> # 服务器地址
-p <port> # 端口号
-a <password> # 密码
-n <database> # 数据库编号
-r <repeat> # 重复执行命令次数
-i <interval> # 命令执行间隔(秒)
-c # 集群模式
--latency # 延迟监控
--stat # 统计信息
--bigkeys # 查找大key
1.3.2 图形化管理工具
Redis Desktop Manager
# 下载地址
https://resp.app/
# 主要功能
- 可视化数据管理
- 多连接管理
- 数据导入导出
- 性能监控
- 命令执行
RedisInsight
# 官方推荐工具
https://redis.com/redis-enterprise/redis-insight/
# 主要特性
- 实时监控
- 内存分析
- 慢查询分析
- 集群管理
- 数据可视化
1.4 Redis基本操作
1.4.1 连接和认证
# 测试连接
PING
# 返回:PONG
# 密码认证
AUTH password
# 选择数据库
SELECT 0
# 查看当前数据库信息
INFO keyspace
# 查看服务器信息
INFO server
1.4.2 键操作
# 查看所有键
KEYS *
# 查看匹配模式的键
KEYS user:*
# 检查键是否存在
EXISTS key
# 删除键
DEL key1 key2
# 设置键的过期时间(秒)
EXPIRE key 3600
# 设置键的过期时间(毫秒)
PEXPIRE key 3600000
# 查看键的剩余生存时间
TTL key
PTTL key
# 移除键的过期时间
PERSIST key
# 重命名键
RENAME old_key new_key
# 查看键的类型
TYPE key
# 随机返回一个键
RANDOMKEY
1.4.3 数据库操作
# 切换数据库
SELECT database_number
# 查看当前数据库键的数量
DBSIZE
# 清空当前数据库
FLUSHDB
# 清空所有数据库
FLUSHALL
# 将键移动到其他数据库
MOVE key database_number
1.4.4 服务器管理
# 查看服务器信息
INFO
INFO server
INFO memory
INFO stats
# 查看配置
CONFIG GET *
CONFIG GET maxmemory
# 设置配置
CONFIG SET parameter value
# 重写配置文件
CONFIG REWRITE
# 保存数据到磁盘
SAVE
BGSAVE
# 获取最后保存时间
LASTSAVE
# 关闭服务器
SHUTDOWN
# 查看客户端连接
CLIENT LIST
# 监控命令执行
MONITOR
1.5 Redis数据类型概览
1.5.1 数据类型总览
数据类型 | 描述 | 使用场景 | 主要命令 |
---|---|---|---|
String | 字符串 | 缓存、计数器 | SET, GET, INCR |
Hash | 哈希表 | 对象存储 | HSET, HGET, HMGET |
List | 列表 | 队列、栈 | LPUSH, RPUSH, LPOP |
Set | 集合 | 标签、去重 | SADD, SMEMBERS, SINTER |
Sorted Set | 有序集合 | 排行榜 | ZADD, ZRANGE, ZRANK |
Bitmap | 位图 | 统计、标记 | SETBIT, GETBIT, BITCOUNT |
HyperLogLog | 基数统计 | 去重计数 | PFADD, PFCOUNT, PFMERGE |
Geospatial | 地理位置 | LBS应用 | GEOADD, GEORADIUS |
Stream | 流 | 消息队列 | XADD, XREAD, XGROUP |
1.5.2 选择合适的数据类型
# 数据类型选择指南
class RedisDataTypeGuide:
def __init__(self):
self.type_guide = {
'simple_cache': 'String',
'counter': 'String',
'object_storage': 'Hash',
'user_profile': 'Hash',
'message_queue': 'List',
'recent_items': 'List',
'unique_visitors': 'Set',
'tags': 'Set',
'leaderboard': 'Sorted Set',
'ranking': 'Sorted Set',
'online_users': 'Bitmap',
'daily_active': 'HyperLogLog',
'location_service': 'Geospatial',
'event_stream': 'Stream'
}
def recommend_type(self, use_case):
return self.type_guide.get(use_case, 'String')
def get_all_recommendations(self):
for use_case, data_type in self.type_guide.items():
print(f"{use_case}: {data_type}")
# 使用示例
guide = RedisDataTypeGuide()
print(f"缓存推荐类型: {guide.recommend_type('simple_cache')}")
print(f"排行榜推荐类型: {guide.recommend_type('leaderboard')}")
1.6 Redis性能特性
1.6.1 性能优势
内存存储
- 数据存储在内存中,访问速度极快
- 避免了磁盘I/O的延迟
- 支持数据持久化到磁盘
单线程模型
- 避免了线程切换的开销
- 消除了锁竞争
- 简化了数据结构设计
高效的数据结构
- 针对不同场景优化的数据结构
- 内存使用效率高
- 操作时间复杂度低
1.6.2 性能基准
# 使用redis-benchmark进行性能测试
# 基本性能测试
redis-benchmark
# 指定测试参数
redis-benchmark -h localhost -p 6379 -n 100000 -c 50
# 测试特定命令
redis-benchmark -t set,get -n 100000 -q
# 测试结果示例
# SET: 85000.00 requests per second
# GET: 90000.00 requests per second
1.6.3 内存使用优化
# 查看内存使用情况
INFO memory
# 查看键的内存使用
MEMORY USAGE key
# 内存优化配置
maxmemory 2gb
maxmemory-policy allkeys-lru
# 压缩配置
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-size -2
set-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
1.7 总结
本章介绍了Redis的基础知识,包括:
- Redis概述:了解了Redis的特点、优势和应用场景
- 安装配置:学习了在不同环境下安装和配置Redis
- 客户端工具:掌握了命令行和图形化管理工具的使用
- 基本操作:学习了Redis的基本命令和操作
- 数据类型:了解了Redis支持的各种数据类型
- 性能特性:认识了Redis的性能优势和优化方法
通过本章的学习,你已经具备了使用Redis的基础知识。在后续章节中,我们将深入学习Redis的各种数据类型、高级特性和实际应用。
下一章将详细介绍Redis的字符串类型及其操作方法。