Redis的官方网站
1 | http://www.redis.cn/
1、安装依赖包
1 | yum install gcc tcl
2、下载源码包
wget http://download.redis.io/releases/redis-4.0.10.tar.gz
3、解压安装
1 | tar -xf redis-4.0.10.tar.gz -C /usr/local
2 | cd redis-4.0.10
3 | mv redis-4.0.10 redis
4 | make && make install
4、配置redis
1 | mkdir /etc/redis
2 | cd redis
3 | cp redis.conf /etc/redis/6379.conf
配置centos7 systemd 管理 redis 服务
1.在/lib/systemd/system目录下创建一个脚本文件redis.service,里面的内容如下:
[root@ela2 ~]# vim /lib/systemd/system/redis.service
[Unit]
Description=Redis
After=network.target
[Service]
Type=simple
ExecStart=/usr/local/bin/redis-server /etc/redis/redis.conf --daemonize no
ExecStop=/usr/local/bin/redis-cli -p 6379 shutdown
[Install]
WantedBy=multi-user.target
[Unit] 表示这是基础信息配置块
Description 是描述
After 开启自启动时候的顺序, 指定的服务必须先于次此服务启动,一般是网络服务启动后启动
[Service] 表示这里是服务信息配置块
Type 指定启动服务的类型, simple 是默认的方式
EnvironmentFile 指定服务启动时用到的配置文件
ExecStart 是启动服务的命令
ExecStop 是停止服务的指令
[Install] 表示这是是安装信息配置块
WantedBy 是以哪种方式启动:multi-user.target表明当系统以多用户方式(默认的运行级别)启动时,这个服务需要被自动运行。
授权在主机启动的时候同时启动服务
1 | systemctl enable redis
5.使用使用 systemctl 操作
刷新配置,让 systemd 识别刚刚添加的 redis 服务
1 | systemctl daemon-reload
启动服务
1 | systemctl start redis
关于配置文件中的配置
设置监听地址
1 | vim /etc/redis/6379.conf
2 | bind 0.0.0.0
bind 参数若都注释掉,则会监听服务器上的所有 ip
可以指定一个或者多个,打开注释。
注意此配置项可能在 71 行左右。默认是 bind 127.0.0.1
检查并测试
检查默认端口 6379 是否监听
手动使用命令指定配置文件启动服务
1 | /usr/local/bin/redis-server /etc/redis/6379.conf
这种方式执行,默认 Redis 服务侯会在前台运行。
设置使用守护进程都方式运行服务
需要编辑配置文件 /etc/redis/6379.conf
1 | daemonize yes # 守护进程的方式启动服务
客户端指定端口访问
redis-cli -p 6379
手动停止服务
redis-cli -p 6379 shutdown
假如重启后出现如下错误信息,就按照提示操作
1 | 1044:M 27 Feb 14:47:21.993 # Server initialized
2 | 1044:M 27 Feb 14:47:21.993 # WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.
3 | 1044:M 27 Feb 14:47:21.993 # Short read or OOM loading DB. Unrecoverable error, aborting now.
4 | 1044:M 27 Feb 14:47:21.993 # Internal error in RDB reading function at rdb.c:1666 -> Unexpected EOF reading RDB file
解决方法
1 | echo "vm.overcommit_memory = 1" >> /etc/sysctl.conf
2 | sysctl -p
问题二
1 | error, aborting now.
2 | 1344:M 27 Feb 14:59:33.466 # Internal error in RDB reading function at rdb.c:1666 -> Unexpected EOF reading RDB file
移动 dump.db 文件或者更名,可以删除。
1 | rm -rf dump.rdb
一、持久化存储
1. 持久化存储的方式介绍
Redis 分别提供了 RDB 和 AOF 两种持久化机制:
RDB 将数据库的快照(snapshot)以二进制的方式保存到磁盘中。
AOF 则以协议文本的方式,将所有对数据库进行过写入的命令(及其参数)记录到 AOF 文件,以此达到记录数据库状态的目的。
- RDB
a. 什么是RDB
和 MySQL 中的 mysqldump 差不多一个道理。
b. 什么情况下会触发 RDB
第一种情况,主动执行 save 命令(同步,阻塞 ,就是save 命令执行完毕后才能执行后续的其他命令操作)
阻塞
保存 RDB 文件的策略
每次创建新的文件,并且替换原来旧文件(假如存在旧的文件)
第二种情况,主动执行 bgsave 命令 (异步,非阻塞 )
文件策略和 save 相同
第三种情况,自动触发
自动触发,就是通过对 Redis 的配置文件重相关选项的修改,当达到某个配置好的条件后,自动生成 RDB 文件
,其内部使用的是 bgsave 命令。
配置文件中相关选项的默认值如下表:
每次检查都会建立一个新的检查点,以便用于下次检查作为参考信息。
关于 RDB 文件的配置信息
默认文件名
dbfilename dump.rdb
默认文件保存位置
dir ./
假如 bgsave 执行中发生错误,是否停止写入,默认是 yes , 表示假如出错,就停止写入。
stop-writes-on-bgsave-error yes
是否使用压缩|
rdbcompression yes
是否进行数据的校验
rdbchecksum yes
建议的最佳配置
关闭自动生成 RDB 文件
在配置文件中注释掉如下内容
#save 900 1
#save 300 10
#save 60 10000
使用不同端口号进行区分,因为,有可能会在同一台主机上开启多个 Redis 实例。
防止多个实例产生的数据信息写到一个文件中。
dbfilename dump-${port}.rdb
指定一个大硬盘的路径
dir /redis_data
假如出现错误,停止继续写入
stop-writes-on-bgsave-error yes
采用压缩
rdbcompression yes
进行校验
rdbchecksum yes
实验
修改配置文件中的相关选项,使其成为如下内容中显示的值:
假如你的 Redis 服务器允许客户端可以从非本机访问,应该在配置文件中,把 protected-mode 的值设置问 no。
这样的话,客户端就可以从其他主机访问 Redis 服务器了,并且不需要密码。
重启服务后,在 Rdis 命令行客户端中输入 save 命令。
[root@s1 ~]# redis-cli
127.0.0.1:6379> save
OK
该命令将在配置文件重配置的指定目录中创建 dump-6379.rdb文件。
恢复数据时,只需要保证此文件完好,并且在配置文件中指定的目录下即可。这样 Rdis 启动时就会把此文件中的数据恢复到当前的服务器中。
bgsave 命令和 save基本一样,就是 bgsave 命令不会产生阻塞
127.0.0.1:6379> bgsave
Background saving started
127.0.0.1:6379>
查看当前服务器的数据文件目录
127.0.0.1:6379> CONFIG GET dir
1) "dir"
2) "/"