1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# Redis 基础使用

## 进入 Redis 终端
使用 `redis-cli` 进入 Redis 交互终端。

## Redis 支持的数据类型
Redis 支持五种数据类型:
- **String**
- **Hash**
- **List**
- **Set**
- **Sorted Set(有序集合)**

### 1. String
```sh
set name mike
get name
del name

2. Hash

1
2
3
4
hset user name Alice
hget user name
hgetall user
hdel user name

PS: user 在这里是表名,name 是 key。

3. List

1
2
3
4
5
lpush queue task
rpush queue task
lpop queue
rpop queue
lrange queue 0 -1

PS: -1 表示倒数第一个,lrange queue 0 -1 表示遍历从 0 到最后一个元素。

4. Set

1
2
3
4
5
sadd myset a
sadd myset b
sadd myset c
smembers myset
srem myset a

5. Sorted Set

1
2
3
4
5
zadd scores 100 Alice
zadd scores 200 Bob
zrange scores 0 -1 withscores
zrevrange scores 0 -1 withscores
zrem scores Alice

PS: 有序集合插入时需要提供权重值,withscores 表示按照权重遍历。


配置文件位置

  • 配置文件路径:/etc/redis/redis.conf
  • 修改配置后需要重启 Redis:
    1
    sudo systemctl restart redis
  • 该配置文件可用于编辑 持久化 设置。

Redis 持久化

1. RDB 快照持久化(保存数据到磁盘)

1
2
3
save 900 1   # 900 秒(15 分钟)至少有 1 次写入操作,就保存 RDB
save 300 10 # 300 秒(5 分钟)至少有 10 次写入操作,就保存 RDB
save 60 10000 # 60 秒内有 10000 次写入操作,就保存 RDB

2. AOF 日志持久化

1
2
appendonly yes   # 启用 AOF
appendfilename "appendonly.aof" # AOF 文件名

Redis 使用场景

  1. 缓存

    • 存储常用数据,如页面渲染等。
  2. 实时系统

    • 统计网站点击率、实时排行榜、点赞功能等。
  3. 消息队列

    • 使用 ListPub/Sub 可实现轻量级消息队列。
  4. 分布式锁

    • 本质上与消息队列功能类似,可用于分布式环境下的锁管理。
  5. 计数器

    • Redis 具有原子操作能力,适合作为计数器,例如在线人数统计等。

Redis 为什么这么快?

  1. 数据存储在内存(而非磁盘)。
  2. 使用高效的数据结构 进行数据存储和查找。
  3. 单线程 + I/O 多路复用,避免了多线程的上下文切换,提高性能。

为什么 Redis 采用单线程?

  • Redis 的瓶颈不在 CPU,而在 网络 I/O 和键值对操作,因此使用单线程处理请求。
  • 持久化等操作由后台线程完成,并不会影响主线程的处理性能。

Redis 跳表实现

(略)


Redis 和 Memcached 的区别

特性 Redis Memcached
数据类型 丰富(String、Hash、List、Set、Sorted Set) 仅支持键值对(K-V)
持久化 支持(RDB、AOF) 不支持
事务 支持(但不支持回滚) 不支持
内存占用 较高 较低
速度 更快
使用场景 多种(缓存、队列、分布式锁等) 主要用于缓存

Redis 事务 vs MySQL 事务

  • Redis 事务本质上是 多个命令的原子性执行,执行期间不会被打断。
  • 但 Redis 不支持事务回滚,一旦执行,无法撤销。

PS: -1 表示倒数第一个,范围遍历 0 到最后一个元素。
PS: user 在这里是表名,name 是 key。