跳转到内容

redis-guide

Redis(Remote Dictionary Server)是一个开源的、高性能的内存键值数据库。它支持多种数据结构(如字符串、哈希、列表、集合、有序集合等),通常被广泛用作缓存服务器、消息队列以及分布式锁。

可以通过系统默认包管理器快速安装 Redis 服务端:

Terminal window
apt update
apt install redis-server

通过 Docker 快速启动 Redis,可以前往 Docker Hub Redis 官方页面 获取详细信息。

2.3. 图形化管理客户端 (Windows/macOS/Linux)

Section titled “2.3. 图形化管理客户端 (Windows/macOS/Linux)”

推荐使用开源好用的 Another Redis Desktop Manager

在 Redis 配置文件 /etc/redis/redis.conf 中可以自定义端口和访问密码:

port 6380
requirepass [密码已隐藏]

在 Linux 系统中,使用 systemd 对 Redis 服务进行管理:

Terminal window
systemctl status redis-server # 查看服务状态
systemctl stop redis-server # 停止服务
systemctl start redis-server # 启动服务
systemctl restart redis-server # 重启服务
  • 缓存:减轻关系型数据库压力,加快读取速度。
  • 会话存储 (Session Storage):存储分布式 Web 应用的用户 Session 状态。
  • 分布式锁:利用 SETNX 或 Redisson 框架实现跨进程的分布式锁。
  • 速率限制器 (Rate Limiter):实现接口的滑动窗口或令牌桶限流。
  • 排行榜:使用 ZSET(有序集合)结构轻松维护实时更新的排行榜。

当 Redis 的内存占用达到最大上限时,它会触发内存淘汰策略以释放空间。这些策略可以分为:不淘汰针对所有 Key (allkeys-*) 和 针对设置了过期时间 (TTL) 的 Key (volatile-*) 三大类。

策略名称淘汰逻辑适用场景
noeviction不淘汰任何数据。 达到内存上限后,任何试图写入新数据的命令(如 SET, LPUSH 等)都会直接报错并返回错误提示,但读命令(如 GET)仍可正常执行。适用于数据绝对不能丢失的核心计算/存储场景,通常不作为纯缓存的配置。

6.2. 针对设置了过期时间的 Key 的策略 (volatile-*)

Section titled “6.2. 针对设置了过期时间的 Key 的策略 (volatile-*)”

此类策略只会淘汰 那些设置了 TTL 且尚未过期的 Key

策略名称淘汰逻辑 (仅针对设置了 TTL 的 Key)适用场景
volatile-lru淘汰 最近最少使用 (Least Recently Used) 的 Key。只有部分数据需要设置过期,且 Key 的访问频率具备明显的时间热度关联。
volatile-lfu淘汰 最不经常使用 (Least Frequently Used) 的 Key。数据访问频率分化明显,希望基于总体的访问次数而非最近一次访问时间进行筛选。
volatile-ttl淘汰 剩余生存时间最短 (Time To Live) 的 Key。优先回收即将自然失效的 Key。
volatile-random随机 选择 Key 进行淘汰。对缓存命中率无特定高要求,追求最简易低耗的淘汰操作。

6.3. 针对所有 Key 的策略 (allkeys-*)

Section titled “6.3. 针对所有 Key 的策略 (allkeys-*)”

此类策略在淘汰时会扫描 Redis 数据库中所有的 Key(无论其是否设置了过期时间)。

策略名称淘汰逻辑 (针对所有 Key)适用场景
allkeys-lru淘汰数据库中 最近最少使用 (LRU) 的 Key。最通用的缓存策略。当 Redis 纯粹用作通用缓存 时首选此配置。
allkeys-lfu淘汰数据库中 最不经常使用 (LFU) 的 Key。规避 LRU 对冷热转换数据清理不够及时的弊端(例如,在某时间段爆火随后变冷的 Key 不会被 LRU 及时淘汰,而 LFU 能够基于频次将其移除)。
allkeys-random随机 选择任意 Key 进行淘汰。适用于读写数据分布均匀,无需特殊热点策略的场景。

编辑 /etc/redis/redis.conf,根据服务器规格设置最大内存并指定淘汰策略(默认是不淘汰的 noeviction):

# 设置最大可用内存为 1GB
maxmemory 1gb
# 设置淘汰策略为全局 LRU
maxmemory-policy allkeys-lru

docker-compose.yml 中,可以通过命令行参数直接注入内存限制和淘汰策略:

version: '3.8'
services:
redis:
image: redis:latest
container_name: my_redis_cache
ports:
- "6379:6379"
# 通过 command 传入配置参数参数
command: redis-server --maxmemory 256mb --maxmemory-policy allkeys-lru
# volumes:
# - ./redis-data:/data