Skip to content

Redis

Redis 是意大利程序员 Salvatore Sanfilippo 用 C 语言实现内存数据结构存储,使用 BSD 许可,首个正式版本发布于 2009 年; 2015 年作者加入美国 Redis, Ltd. 企业,该企业随后作为正式赞助商并主导后续开发。

安装工具

Ubuntu 上安装客户端 sudo apt install redis-tools

容器方式安装

在 Linux/macOS 上启动实例

分别创建配置、日志和数据目录

mkdir -p /data/etc/kv
mkdir -p /data/log/kv && chmod 777 /data/log/kv
mkdir -p /data/kv

生成随机密码 openssl rand -base64 10

创建配置文件 /data/etc/kv/redis.conf ,示例:

txt
port 6379
requirepass 这里替换为上面生成的密码...
loglevel warning
logfile "/var/log/redis/redis-server.log"

启动容器实例

shell
docker run -d \
--restart unless-stopped \
--name kv \
-p 6379:6379 \
-v /data/etc/kv:/usr/local/etc/redis \
-v /data/kv:/data \
-v /data/log/kv:/var/log/redis \
redis redis-server /usr/local/etc/redis/redis.conf

在 Windows 上启动实例

创建目录持久化数据 mkdir c:\docker-data\kv

创建自定义配置文件 c:\docker-data\kv\redis.conf

txt
port 6379
#requirepass secret...
loglevel debug
logfile /data/redis-server.log

启动容器实例 docker run -d --restart unless-stopped --name kv -p 6379:6379 -v c:/docker-data/kv:/data redis redis-server /data/redis.conf

常见问额

故障:持久化写入失败会删除部分或全部未过期数据

问题日志

txt
300548:M 06 Jul 2049 19:00:41.117 # Background saving error
300548:M 06 Jul 2049 19:00:47.029 * 1 changes in 900 seconds. Saving...
300548:M 06 Jul 2049 19:00:47.029 * Background saving started by pid 1859837
1859837:C 06 Jul 2049 19:00:47.029 # Failed opening the RDB file crontab (in server root dir /etc) for saving: Read-only file system

定位过程:

  1. 确定配置文件中数据目录位置 grep ^dir /etc/redis/redis.conf , 显示 dir /var/lib/redis
  2. 查看运行时配置 数据目录位置 redis-cli config get dir , 显示 /etc,确定是因为将数据目录设置错误导致数据丢失;

修复:redis-cli config set dir /var/lib/redis

Redis 分布式锁

Released under the CC-BY-NC-4.0