1.1 Redis简介

1.1.1 什么是Redis

Redis(Remote Dictionary Server)是一个开源的、基于内存的数据结构存储系统,可以用作数据库、缓存和消息代理。Redis支持多种数据结构,如字符串、哈希、列表、集合、有序集合等。

1.1.2 Redis的特点

  1. 高性能

    • 基于内存存储,读写速度极快
    • 单线程模型,避免了锁竞争
    • 支持异步I/O操作
  2. 丰富的数据类型

    • String(字符串)
    • Hash(哈希)
    • List(列表)
    • Set(集合)
    • Sorted Set(有序集合)
    • Bitmap(位图)
    • HyperLogLog
    • Geospatial(地理位置)
    • Stream(流)
  3. 持久化支持

    • RDB快照
    • AOF日志
    • 混合持久化
  4. 高可用性

    • 主从复制
    • 哨兵模式
    • 集群模式
  5. 原子性操作

    • 所有操作都是原子性的
    • 支持事务
    • 支持Lua脚本

1.1.3 Redis的应用场景

  1. 缓存系统

    • 数据库查询缓存
    • 页面缓存
    • 对象缓存
  2. 会话存储

    • 用户会话信息
    • 购物车数据
    • 临时数据存储
  3. 计数器

    • 网站访问量统计
    • 点赞数、评论数
    • 限流计数
  4. 排行榜

    • 游戏排行榜
    • 热门文章排序
    • 实时统计
  5. 消息队列

    • 发布/订阅模式
    • 任务队列
    • 实时通信
  6. 分布式锁

    • 资源互斥访问
    • 防止重复操作
    • 分布式协调

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 性能优势

  1. 内存存储

    • 数据存储在内存中,访问速度极快
    • 避免了磁盘I/O的延迟
    • 支持数据持久化到磁盘
  2. 单线程模型

    • 避免了线程切换的开销
    • 消除了锁竞争
    • 简化了数据结构设计
  3. 高效的数据结构

    • 针对不同场景优化的数据结构
    • 内存使用效率高
    • 操作时间复杂度低

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的基础知识,包括:

  1. Redis概述:了解了Redis的特点、优势和应用场景
  2. 安装配置:学习了在不同环境下安装和配置Redis
  3. 客户端工具:掌握了命令行和图形化管理工具的使用
  4. 基本操作:学习了Redis的基本命令和操作
  5. 数据类型:了解了Redis支持的各种数据类型
  6. 性能特性:认识了Redis的性能优势和优化方法

通过本章的学习,你已经具备了使用Redis的基础知识。在后续章节中,我们将深入学习Redis的各种数据类型、高级特性和实际应用。


下一章将详细介绍Redis的字符串类型及其操作方法。