Redis介绍
Redis(Remote Dictionary Server ),即远程字典服务,是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。
和其他的缓存比如Ecache比较
- 可以支持多种类型,满足不同的业务
- 吞吐量大,通过C 编写,性能较高
- redis 集群稳定性比较好
redis 搭建
通过源码编译安装
wget http://download.redis.io/releases/redis-5.0.0.tar.gz
tar xzf redis-5.0.0.tar.gz
cd redis-5.0.0
make
启动命令
# 服务端启动
./bin/redis-server ./etc/redis.conf
# 客户端启动 -h 为地址默认为本机 ,-a为 auth 密码
./bin/redis-cli -h 127.0.0.1 -p 6379 -a 123456
通过docker-compose 安装
由于redis 跨平台型,我们可以通过docker 进行快速搭建。docker-compose 是一个docker的编排工具。在之后搭建redis 主从和哨兵的时候通过Docker-compose 可以减少我们的工作量。
version: '2'
services:
redis:
image: redis:5.0.0
container_name: redis
command: redis-server --requirepass "123456"
ports:
- "6379:6379"
volumes:
- ./data:/data
redis 持久化
redis 的键值对是保存在内存中的,如果宕机之后所有的键值对都会丢失。所以需要配置落盘。
redis 常用的有两种落盘机制,一种是AOF appending-only 方式。另外一种是SnapShotting(RDB快照模式)方式也是默认的方式。
RDB
RDB 会生成多个文件,每一个数据文件都代表着,某一个时刻redis 里面的数据。
因为直接操作内存,通过rdb 恢复数据通常会比AOF 恢复快。
缺点是,如果中途宕机,可能会有几分钟的数据丢失。
AOF
在aof 持久化方式的时候,redis 将每一次收到的命令都会通过write 追加到appendonly.aof 文件中。redis 在重新启动之后会根据保存的命令重新构建数据库。
AOF 中存在的问题在于,由于只操作一个文件,可能导致这个文件很大,所以redis 提供BGREWRITEAOF 指令重写aof文件。
生产环境 数据备份策略
- 每小时copy rdb 备份,写到目录中,保留最近48小时备份
- 每天保留一个当天的rdb 备份,保存到一个目录中,保存最近48小时的备份
- 每天晚上将当天的服务器的所有备份发送到远程服务器中
参考shell 脚本
crontab -e
0 * * * * * sh /etc/init.d/redisback.sh
redisback.sh
#!/bin/sh
cur_date = 'date +%Y%m%d%k'
rm -rf /lujing/$cur_date
mkdir /lujing/$cur_date
cp /var/redis/6379/dump/rdb /lujing/$cur_date
del_date = 'date -d -48hour +%Y%m%d%k'
rm -rf /lujing/$del_date
序列化注意事项
- 如果同时配置aof 和rdb redis 启动会通过AOF文件恢复数据