前言

背景

当前的项目需要使用缓存提升响应时间并降低数据库压力。之前虽然也用 Redis 作为缓存,然而存在两个问题,一是没有关闭 Redis 的持久化,将 Redis 当作了内存数据库用;二是项目中处理缓存的代码逻辑结构有问题,不够灵活。

环境

  • Redis: 5.0.5;

目标

将 Redis 作为程序的 LRU 缓存。

  1. 关闭持久化;
  2. 限制总内存大小;
  3. 启用 LRU 算法;

详细操作

操作方式

一般来说有两种操作方式,一是命令行修改,二是直接修改配置文件。本文主要介绍第二种方式

根据操作系统和安装方式的不同,配置文件的路径也不同。

Mac 下的路径为 /usr/local/etc/redis.conf

关闭持久化

关闭持久化主要修改两个配置:

  • AOF。类似于 Mysql 的 binlog 的操作命令日志文件;
  • RDB。定时的数据快照文件;

首先编辑配置文件。

appendonly 的配置修改为 no,关闭 AOF;

将快照的计划任务配置注释掉。

#   save 900 1
#   save 300 10
#   save 60 10000
save ""

然后重启 Redis。

$ brew services reload redis

最后可以通过以下命令检查以下当前运行的备份的配置。

$ redis-cli config get save

如果是一个空字符串,说明配置修改成功。

设置最大使用内存

还是修改上面的配置文件。

maxmemory 512mb # 如果不写单位,默认单位是 bytes

重启验证一下。

$ redis-cli config get maxmemory

设置置换策略

当 Redis 使用内存达到预先设置好的 maxmemory 时,需要使用选择好的 maxmemory-policy 进行对老数据的置换。

$ maxmemory-policy allkeys-lru

以下是 Redis 支持的 6 种置换策略,默认是 noeviction,即从不失效,达到最大内存后直接报错。在这里,作为初学者建议使用 allkeys-lru 策略,即根据 LRU 算法删除访问频率最低的数据。

# volatile-lru -> remove the key with an expire set using an LRU algorithm
# allkeys-lru -> remove any key according to the LRU algorithm
# volatile-random -> remove a random key with an expire set
# allkeys-random -> remove a random key, any key
# volatile-ttl -> remove the key with the nearest expire time (minor TTL)
# noeviction -> don't expire at all, just return an error on write operations

同样,重启以后验证一下就好了。

参考资料