Redis(基础操作)

Redis(基础操作)

基础篇

一、Redis 简介

Redis(Remote Dictionary Server)是一个开源的、基于内存的高性能键值存储系统,支持多种数据结构(如字符串、哈希、列表、集合等),广泛应用于缓存、消息队列、实时分析等场景。以下内容将详细讲解 Redis 的基本操作。


二、Redis 安装与启动

1. 安装 Redis

# Ubuntu/Debian
sudo apt update
sudo apt install redis-server

# CentOS/RHEL
sudo yum install epel-release
sudo yum install redis

# macOS(使用 Homebrew)
brew install redis

2. 启动 Redis 服务

# Linux 系统
sudo systemctl start redis

# macOS(后台运行)
brew services start redis

# 手动启动 Redis 服务器
redis-server

3. 连接 Redis 客户端

redis-cli
# 指定主机和端口
redis-cli -h 127.0.0.1 -p 6379

三、Redis 通用命令

1. 查看所有键

KEYS *

2. 检查键是否存在

EXISTS key

3. 删除键

DEL key1 key2

4. 设置键过期时间

EXPIRE key seconds  # 设置过期时间(秒)
TTL key            # 查看剩余时间(-1 表示永不过期,-2 表示键不存在)

5. 持久化键

PERSIST key  # 移除键的过期时间

6. 重命名键

RENAME old_key new_key

四、字符串(String)操作

字符串是 Redis 最基本的数据类型,可以存储文本、数字或二进制数据。

1. 设置值

SET key value
SET name "Alice"          # 设置键值
SET age 25 EX 60          # 设置值并指定过期时间(60秒)
SET counter 0 NX          # 仅当键不存在时设置(原子操作)

2. 获取值

GET name  # 返回 "Alice"

3. 批量操作

MSET key1 "value1" key2 "value2"
MGET key1 key2  # 返回 ["value1", "value2"]

4. 数值增减

INCR counter     # 自增1(返回 1)
INCRBY counter 5 # 自增5(返回 6)
DECR counter     # 自减1(返回 5)

5. 追加字符串

APPEND name " Smith"  # 值变为 "Alice Smith"

五、哈希(Hash)操作

哈希用于存储对象,适合保存多个字段的结构化数据。

1. 设置字段值

HSET user:1 name "Alice" age 25
HSET user:1 email "alice@example.com"

2. 获取字段值

HGET user:1 name      # 返回 "Alice"
HGETALL user:1        # 返回所有字段和值
HMGET user:1 name age # 返回指定字段

3. 删除字段

HDEL user:1 email

4. 检查字段是否存在

HEXISTS user:1 age  # 返回 1(存在)

5. 获取所有字段或值

HKEYS user:1   # 返回 ["name", "age"]
HVALS user:1   # 返回 ["Alice", "25"]

六、列表(List)操作

列表是一个双向链表,支持在头部或尾部插入元素。

1. 插入元素

LPUSH list1 "item1"       # 头部插入,返回列表长度
RPUSH list1 "item2"       # 尾部插入
LINSERT list1 BEFORE "item2" "item1.5"  # 在指定元素前插入

2. 获取元素

LRANGE list1 0 -1  # 获取所有元素
LINDEX list1 0     # 获取第一个元素

3. 删除元素

LPOP list1  # 删除并返回头部元素
RPOP list1  # 删除并返回尾部元素
LREM list1 1 "item1"  # 删除1个值为 "item1" 的元素

4. 修剪列表

LTRIM list1 0 2  # 只保留前3个元素

七、集合(Set)操作

集合是无序且元素唯一的容器,适合去重和集合运算。

1. 添加元素

SADD tags "redis" "database" "cache"

2. 获取元素

SMEMBERS tags  # 返回所有元素
SCARD tags     # 返回元素数量

3. 集合运算

SINTER set1 set2    # 交集
SUNION set1 set2    # 并集
SDIFF set1 set2     # 差集(set1 有但 set2 没有)

4. 删除元素

SREM tags "cache"

八、有序集合(Sorted Set)操作

有序集合通过分数(score)为元素排序,适合排行榜、优先级队列等场景。

1. 添加元素

ZADD leaderboard 100 "Alice" 200 "Bob"

2. 获取元素

ZRANGE leaderboard 0 -1 WITHSCORES  # 按分数升序返回
ZREVRANGE leaderboard 0 -1          # 按分数降序返回
ZSCORE leaderboard "Alice"          # 返回分数 100

3. 范围查询

ZRANGEBYSCORE leaderboard 150 300  # 分数在150到300之间的元素

4. 删除元素

ZREM leaderboard "Bob"

九、发布订阅(Pub/Sub)

Redis 支持消息的发布与订阅,适用于实时消息系统。

1. 订阅频道

SUBSCRIBE news

2. 发布消息

PUBLISH news "Hello, World!"

十、事务与 Lua 脚本

1. 事务(Multi/Exec)

MULTI
SET balance 100
INCRBY balance 50
EXEC  # 提交事务

2. Lua 脚本

EVAL "return redis.call('GET', KEYS[1])" 1 key_name

十一、持久化与备份

1. RDB 快照

SAVE          # 阻塞式保存快照
BGSAVE        # 后台保存快照

2. AOF 日志

# 修改配置文件启用 AOF
appendonly yes
appendfsync everysec  # 每秒同步

十二、Redis 配置与安全

1. 修改配置文件

vim /etc/redis/redis.conf

2. 设置密码

# 配置文件添加
requirepass your_password

# 客户端验证
AUTH your_password

十三、性能优化

  1. 使用 Pipeline 批量操作

    (echo -en "PING\r\nSET key1 value1\r\nGET key1\r\n"; sleep 1) | nc localhost 6379
  2. 合理选择数据结构

    • 优先使用哈希存储对象,而非多个字符串键。

  3. 避免大键(Big Key)

    • 单个键的值不超过 1MB。


十四、常见问题与解决方案

1. 内存不足

  • 方案:启用淘汰策略(如 maxmemory-policy allkeys-lru)。

2. 高并发写入

  • 方案:使用集群模式分片数据。


LICENSED UNDER CC BY-NC-SA 4.0