Redis操作指南

目录

一、概述 4

1.1 目的 4

1.2 适用对象 4

1.3 文档内容 4

二、下载Redis及安装Redis 4

2.1 下载Redis 4

2.2 安装Redis 4

2.2.1 解压和编译 4

2.2.2 创建工作目录 5

三、 配置Redis 5

3.1 设置后台运行 5

3.2 设置工作目录 6

3.3 设置监听地址 6

3.4 设置pid存放路径 6

3.5 设置主从复制 7

3.6 修改脚本文件 7

使用Redis 8

4.1 启动Redis 8

4.2 停止Redis 8

4.3 使用redis-cli 8

4.4 查看主从及测试 9

配置Redis哨兵 10

5.1 哨兵配置 11

5.2 哨兵启动和停止 12

5.3 主从延迟 12

5.4 SpringBoot使用哨兵模式 13

Redis集群(RedisCluster) 14

七、 Redis日志分片 14

7.1 创建脚本 14

7.2 加上crontab 15

Redis配置解析 15

 

 

一、概述

1.1 目的

为引导团队对Redis工具的使用,将此工具高速、标准地接入到线上发卡系统,提高团队生产力,特制订此操作指南。本指南依据Redis官方文档(https://redis.io/documentation),可对详细过程进行理解和参考。除此之外,还对操作目录进行了规范,避免了多台机器目录不一致的问题。

1.2 适用对象

本文档适用于信用卡线上发卡开发人员,以开发人员角度来进行操作,开发环境为开发测试网络,操作系统为Linux主机,目录为/app/xsfk/,本问以redis-5.0.7为例,其他版本基本操作一致。

1.3 文档内容

本指南包括了Redis的下载、安装、配置、使用。

二、下载Redis及安装Redis

2.1 下载Redis

如果本机已存在redis安装目录,则无需下载。

不存在请下载,下载地址为:

$ curl -O 20.200.13.212/download/redis-5.0.7.tar.gz

2.2 安装Redis

2.2.1 解压和编译

 

设定包位置为/app/xsfk/redis-5.0.7.tar.gz, 解压tar包:

$ tar -zxvf redis-5.0.7.tar.gz

$ cd redis-5.0.7

$ make

$ sudo make install   (此步骤需要root添加sudo)

如果没有报错,则安装成功。

2.2.2 创建工作目录

$ mkdir -p /app/xsfk/redis //作为redis工作目录

$ cp -R /app/xsfk/redis-5.0.7/utils /app/xsfk/redis

$ cp /app/xsfk/redis-5.0.7/redis.conf  /app/xsfk

/redis

注意:设置完工作目录,则源代码目录/app/xsfk/

redis-5.0.7则没有作用了,可以进行删除操作。

  • 配置Redis

本节编辑并配置redis.conf文件。

3.1 设置后台运行

Redis默认前台运行,所以需要修改:

将daemonize no 改为 daemonize yes,如下图所示:

 

3.2 设置工作目录

 

Redis默认为当前路径,需要设置为在2.2.2中的目录,如下图所示:

 

3.3 设置监听地址

Redis默认只监听本机,导致外部访问不了本机,所以需要修改,将bind绑定为0.0.0.0,如下图所示:

 

3.4 设置pid存放路径

Redis pid文件默认在/var/run/redis.pid,当我们以xsfk用户运行redis的时候,会因权限问题无法写入pid到这个文件,所以需要修改,将pid文件放置在我们的工作目录,如下图所示:

 

 

3.5 设置主从复制

 

在本项目中Redis一共有两台,正常的redis本应该为三台,为一主两从,我们暂时没有那么多台机器,所以为一主一从,默认137为主服务器,138为从服务器,所以仅仅需要修改138即可,如下图所示:

 

3.6 修改脚本文件

打开在本项目中utils文件夹,编辑redis_init_script脚本文件,修改如下图所示:

 

请注意CONF和PIDFILE修改为2.2.2和3.4节所配置的。

使用Redis

4.1 启动Redis

在工作目录/app/xsfk/redis下进行如下操作:

$ utils/redis_init_script start

注意:如果redis_init_script没有执行权限,请加入执行:

chmod a+x redis_init_script

 

4.2 停止Redis

在工作目录/app/xsfk/redis下进行如下操作:

$ utils/redis_init_script stop

注意:如果进行重启操作,请分别执行上述两条指令。

禁止使用 kill -9停止Redis,不但不会做持久化操作,还会造成缓冲区等资源不能优雅关闭。极端情况下造成AOF和复制丢失数据的情况

4.3 使用redis-cli

 

在工作目录/app/xsfk/redis下进行如下操作:

$ redis-cli //连接本地redis服务端

127.0.0.1:6379>ping

PONG //如果为pong则本机测试成功。

$ redis-cli -h 20.201.22.137 -p 6379

20.201.22.137:6379>ping

PONG //如果为pong则连其他机器成功。

4.4 查看主从及测试

如果分别运行redis客户端:

在137(主服务器上),如下图所示:

 

我们主要看上图的 role 和 connected_slaves,slave0,发现137的角色是master,有一个连接的slave,且slave0的ip是138。

然后我们再看138的信息:

 

发现138的角色是slave,并标识了它的master的ip和port,以及连接master的状态为up。

最后我们测试一下:

在137上面写一个语句,看138是否能查询得到:

进入137,执行redis-cli

127.0.0.1:6379> set name liushiqiang

如下图:

 

然后切换至138,执行redis-cli

127.0.0.1:6379> get name

 

能得出字符串的值,这样达到了主从复制和读写分离的效果。

配置Redis哨兵

哨兵模式(Redis Sentinel)是一个高可用方案,用来抵抗节点故障,当故障发生时可以自动进行从主切换,程序可以不用重启,无需人工操作。

 

5.1 哨兵配置

编辑sentinel.conf

1.#绑定地址

bind 0.0.0.0

  1. #设置后台运行

daemonize yes

  1. #设置pid文件放置

pidfile /app/xsfk/redis/redis_sentinel.pid

  1. #设置log文件放置

logfile /app/xsfk/redis/log/redis_sentinel.log

  1. #设置哨兵工作目录

dir /app/xsfk/redis/

  1. #设置监视名称和地址

Sentinel monitor mymaster 20.201.22.137 6379 2

此ip为master IP地址,6379是端口号,2是quorum,也就是投票的哨兵个数。一般一主两从的结构,则这个数为2。

5.2 哨兵启动和停止

创建utils/sentinel_init_script文件,复制utils/

redis_init_script脚本内容,修改为如下所示:

端口修改为:

SENTINELPORT=26379

EXEC=/usr/local/bin/redis-sentinel

CLIEXEC=/usr/local/bin/redis-cli

 

PIDFILE=/app/xsfk/redis/redis_sentinel.pid

CONF=/app/xsfk/redis/sentinel.conf

然后再修改下面使用到的端口:

$CLIEXEC -p $SENTINELPORT shutdown

还包括一些提示信息,例如:

echo “Redis sentinel stopped”

5.3 主从延迟

Redis 主从采用异步复制,意味着当主节点挂掉时,从节点可能没有收到全部的同步消息,这部分未同步的消息就丢失了。如果主从延迟特别大,那么丢失的数据就可能会特别多。Sentinel 无法保证消息完全不丢失,但是也尽可能保证消息少丢失。它在redis.conf里面有两个选项可以限制主从延迟过大。

min-slaves-to-write 1

min-slaves-max-lag 10

第一个参数表示主节点必须至少有一个从节点在进行正常复制,否则就停止对外写服务,丧失可用性。

第二个参数用于区分何为正常复制,何为异常复制,它的单位是秒,表示如果 10s 没有收到从节点的反馈,就意味着从节点同步不正常,要么网络断开了,要么一直没有给反馈,也就是此时为异常复制。

5.4 SpringBoot使用哨兵模式

org.springframework.boot

spring-boot-starter-data-redis

以application.properties为例:

# config redis

spring.redis.database=0

spring.redis.sentinel.master=mymaster

spring.redis.sentinel.nodes=ip1:26379,ip2:26379,ip3:26379

spring.redis.pool.max-idle=8

spring.redis.pool.max-active=10

spring.redis.pool.max-wait=3

spring.redis.pool.min-idle=0

 

六、Redis日志分片

 

6.1 创建脚本

 

Redis默认是不保存日志的,但是我们设置保存日志,周期为30天,超过30天的自动删除,创建一个脚本,脚本内容如下:

/app/xmgl/redis/log/*.log {

daily

rotate 30

dateext

missingok

create 644 xmgl xmgl

compress

delaycompress

dateyesterday

copytruncate

}

将脚本加上执行权限:

$ chmod a+x redisForLogSlice

6.2 加上crontab

将脚本加上执行权限:

$ crontab -l //查看当前的任务

$ crontab -e //编辑任务

5 0 * * * /usr/sbin/logrotate -f /app/xsfk/redis/utils/redisForLogSlice -s /app/xsfk/redis/logrotate.status

Redis配置解析

1.# redis进程是否以守护进程的方式运行,yes为是,no为否

daemonize no

2.# 指定redis进程的PID文件存放位置

pidfile /var/run/redis.pid (默认放置路径)

3.# redis进程的端口号

port 6379

4.# 绑定的主机地址

bind 127.0.0.1

5.# 客户端闲置多长时间后关闭连接,默认此参数为0即关闭此功能

timeout 300

6.#redis日志级别,可用的级别有debug.verbose.notice.warning

loglevel verbose

6.# log文件输出位置,如果进程以守护进程的方式运行,此处又将输出文件设置为stdout的话,就会将日志信息输出到/dev/null里面去了

logfile stdout

7.# 设置数据库的数量,默认为0可以使用select 命令在连接上指定数据库id

databases 16

8.# 指定在多少时间内刷新次数达到多少的时候会将数据同步到数据文件

save

9.# 指定存储至本地数据库时是否压缩文件,默认为yes即启用存储

rdbcompression yes

10.# 指定本地数据库文件名

dbfilename dump.db

11.# 指定本地数据问就按存放位置

dir ./

12.# 指定当本机为slave服务时,设置master服务的IP地址及端口,在redis启动的时候他会自动跟master进行数据同步

slaveof

13.# 当master设置了密码保护时,slave服务连接master的密码

masterauth

14.# 设置redis连接密码,如果配置了连接密码,客户端在连接redis是需要通过AUTH命令提供密码,默认关闭

requirepass footbared

15.# 设置同一时间最大客户连接数,默认无限制。redis可以同时连接的客户端数为redis程序可以打开的最大文件描述符,如果设置 maxclients 0,表示不作限制。当客户端连接数到达限制时,Redis会关闭新的连接并向客户端返回 max number of clients reached 错误信息

maxclients 128

16.# 指定Redis最大内存限制,Redis在启动时会把数据加载到内存中,达到最大内存后,Redis会先尝试清除已到期或即将到期的Key。当此方法处理后,仍然到达最大内存设置,将无法再进行写入操作,但仍然可以进行读取操作。Redis新的vm机制,会把Key存放内存,Value会存放在swap区

maxmemory

17.# 指定是否在每次更新操作后进行日志记录,Redis在默认情况下是异步的把数据写入磁盘,如果不开启,可能会在断电时导致一段时间内的数据丢失。因为redis本身同步数据文件是按上面save条件来同步的,所以有的数据会在一段时间内只存在于内存中。默认为no。

appendonly no

18.# 指定跟新日志文件名默认为appendonly.aof

appendfilename appendonly.aof

19.# 指定更新日志的条件,有三个可选参数 - no:表示等操作系统进行数据缓存同步到磁盘(快),always:表示每次更新操作后手动调用fsync()将数据写到磁盘(慢,安全), everysec:表示每秒同步一次(折衷,默认值);

appendfsync everysec

 

Redis集群请查看另外一篇文章。

你可能感兴趣的:(database,redis,nosql)