redis 清空缓存_redis简单安装学习

redis 介绍

Redis是noSql也就是非关系型数据库,可以用来做缓存,缓存就是在内存中存储的数据备份,当数据没有发生本质改变的时候,我们就不让数据的查询去数据库进行操作,而去内存中取数据,这样就大大降低了数据库的读写次数,而且从内存中读数据的速度比去数据库查询要快一些,这样同时又提高了效率。

一、redis单实例搭建

1. 下载redis-5.0.4.tar.gz(最新稳定版本)

2. 解压源码进入目录

3. make

4. make test测试编译情况(可能出现:need tcl >8.4这种情况,解决方法yum install tcl)

5. 安装 make PREFIX=/usr/local/redis install

6. make install之后,redis目录下的bin会有如下几个文件

redis-benchmark 性能测试工具

redis-check-aof 日志文件检测工(比如断电造成日志损坏,可以检测并修复)

redis-check-rdb 快照文件检测工具,效果类上

redis-cli 客户端

redis-server 服务端

a99946ddec1f81994fbf390de5ee14f1.png

7. 复制配置文件

cp /redis-5.0.4/redis.conf /usr/local/redis

38956130f18471ba3b35ace5f1f1e3b2.png

8. 编辑vim redis.conf

注释掉 bind 127.0.0.1 这个是 设置redis 只接收来自于该 IP 地址的请求,如果不进行设置,那么将处理所有请求。

f9bf7228a90673a632aadb2ba22dbcae.png

将daemonize no 改为yes 让redis 以后台服务形式运行。

b2388dfe880e85a29ba254b2706c4d83.png

9. ./bin/redis-server redis.conf 启动redis

79ac51bb3e69df555c9c14357008d4a9.png

./bin/redis-cli 客户端连接

a6c6c2c42848397f332e1ca29768634d.png

二、redis的三种集群方式

1. redis主从集群配置

复制 redis.conf 为redis6380.conf

编辑 vim redis6380.conf

将端口改6380 并设置为6379的端口从服务器(原本使用的是slaveof,但因为有人提出slave是奴隶的意思冒犯到了别人就改成看了replicaof)。

a46bb72e8d84e359f04082b260ec4bc3.png

7a13d598c634a2443c653596b221e29c.png

如果主服务器设置了密码如requirepass yhd123 则yhd123就是服务器密码(这里并没有设置密码),那从服务器就得设置masterauth yhd123,设置从服务器为只读replica-read-only yes。

882467ed2a9036713fd0ef7fa41c1ce6.png

1d8d3404e8440771538edc1d43285ced.png

056c7dcf8196e6d1e79c2b0e5b1b33db.png

启动redis 服务,用客户端连接6380,输入info ,会发现6380端口的角色role是slave。而6379端口的role是master,并且有一个slave。

6666eaf5424ab278ab23061220518996.png

f452cd1c2cef8234e45e48fd86b2d850.png

497b35695c4d3826ecc3c6a4ca815a49.png

9eeeb1520f5ee6923da2504646b35242.png

2. 哨兵主从集群配置

因为主从集群的情况下 如果master突然挂掉,除非手动将slave设置为master,再将其他slave连接到新的master,否则整个集群都不再工作,为了保证在master挂掉的情况下,集群继续工作,需要用到哨兵模式sentinel自动设置master并且slave连接上新master。

配置哨兵。

cp /usr/local/redis-5.0.4/sentinel.conf /usr/locla/redis

编辑 vim sentinel.conf 设置后台服务运行

be5944e3158d34211779f46ceefd2030.png

当2个sentinel实例都认为master失效时,正式失效。

f0d03ea2570121d956a34b0efc3568f4.png

835590faa7d5be3a01d856e45f2dd924.png

启动./bin/redis-server sentinel.conf --sentinel 如需配置哨兵集群,按以上方式使用多个配置文件监控同一个主节点即可。

三、redis-cluster 多主多从集群配置

编辑 vim redis.conf

0f8d9110802f6219e0addadf3d6db447.png

cluster开启必须重命名指定cluster-config-file,不能与别的节点相同,否则会启动失败。

创建6个实列,我这里是3台服务器 2个端口6个实例,然后将每个实例启动会生产节

点nodes-*.conf文件。

d5ab56555c622d0b14c17136a3381c08.png

执行命令创建命令redis-cli --cluster create ip:6379 ip:6380 ip1:6379 ip1:6380 ip2:6379 ip2:6380 --cluster-replicas 1

创建多主多从必须有 --cluster-replicas 1 ,不然就是6个master。

用redis客户端连接集群./bin/redis-cli -c输入命令查看集群信息。

查看集群节点cluster nodes,会看到对应master-slave,这样集群就搭建完毕了。任一主节点故障以后,从节点都会变为主节点,如果所有主从节点都故障则集群失效。

a2adee6ceff86f8b5ad61a793dcd0f3b.png

四、备份(持久化)

1. rdb持久化

save 900 1 // 900内,有1条写入,则产生快照

save 300 1000 // 如果300秒内有1000次写入,则产生快照

save 60 10000 // 如果60秒内有10000次写入,则产生快照

(这3个选项都屏蔽,则rdb禁用)

c5a868347b18492b6c5bbf16cd5dbe24.png

stop-writes-on-bgsave-error yes // 后台备份进程出错时,主进程停不停止写入?

rdbcompression yes // 导出的rdb文件是否压缩

Rdbchecksum yes // 导入rbd恢复时数据时,要不要检验rdb的完整性

dbfilename dump.rdb //导出来的rdb文件名

dir ./ //rdb的放置路径

fe7c0e3bf1f7cec6551b1383a30693b3.png

2. aof持久化

appendonly no # 是否打开 aof日志功能

Appendfilename #导出来的aof文件名

2d63fa7fed0432120378eff3a269f535.png

appendfsync always # 每1个命令,都立即同步到aof. 安全,速度慢

appendfsync everysec # 折衷方案,每秒写1次

appendfsync no # 写入工作交给操作系统,由操作系统判断缓冲区大小,统一写入到aof. 同步频率低,速度快

13934eae7ffe91630d2ce9363004da55.png

no-appendfsync-on-rewrite no: # 正在导出rdb快照的过程中,要不要停止同步aof

auto-aof-rewrite-percentage 100 #aof文件大小比起上次重写时的大小,增长率100%时,重写

auto-aof-rewrite-min-size 64mb #aof文件,至少超过64M时,重写

17326f194df6417db90066c0d18c782b.png

在集群里面只要一启动,只要rdb文件和aof没有丢失便会自动恢复,集群里面设置的备份方式为主aof 从 rdb+aof 。

五、运维

1. 在dump rdb过程中,aof如果停止同步,所有的操作缓存在内存的队列里, dump完成后,统一操作。

2. aof重写是指把内存中的数据,逆化成命令,写入到.aof日志里.以解决 aof日志过大的问题。

3. 如果rdb文件,和aof文件都存在,优先用aof来恢复数据。

4. 恢复时rdb快,因为其是数据的内存映射,直接载入到内存,而aof是命令,需要逐条执行。

5. 运维的一些命令

BGREWRITEAOF 后台进程重写AOF

BGSAVE 后台保存rdb快照

SAVE 保存rdb快照

LASTSAVE 上次保存时间

Slaveof master-Host port , 把当前实例设为master的slave

Flushall 清空所有库所有键

Flushdb 清空当前库所有键

Showdown 关闭服务器

注: 如果不小心运行了flushall, 立即 shutdown nosave ,关闭服务器

然后手工编辑aof文件,去掉文件中的 “flushall ”相关行,然后开启服务器,就可以导入回原来数据.如果,flushall之后,系统恰好bgrewriteaof了,那么aof就清空了,数据丢失.

Slowlog 显示慢查询

由slowlog-log-slower-than 10000,来指定多慢。(单位是微秒)

由 slowlog-max-len 128 ,来做限制服务器储存多少条慢查询的记录。

Info [Replication/CPU/Memory..]

查看redis服务器的信息
6.Redis运维时需要注意的参数

内存

# Memory

used_memory:859192 数据结构的空间

used_memory_rss:7634944 实占空间

mem_fragmentation_ratio:8.89 前2者的比例,1.N为佳,如果此值过大,说明redis的内存的碎片化严重,可以导出再导入一次.

主从复制

# Replication

role:slave

master_host:192.168.1.128

master_port:6379

master_link_status:up

持久化

# Persistence

rdb_changes_since_last_save:0

rdb_last_save_time:1375224063

fork耗时

#Status

latest_fork_usec:936 上次导出rdb快照,持久化花费微秒

注意: 如果某实例有10G内容,导出需要2分钟,

每分钟写入10000次,导致不断的rdb导出,磁盘始处于高IO状态.

慢日志

config get/set slowlog-log-slower-than

CONFIG get/SET slowlog-max-len

slowlog get N 获取慢日志


运行时更改master-slave

修改一台slave(设为A)为new master

1) 命令该服务不做其他redis服务的slave

命令: slaveof no one

2) 修改其readonly为yes

其他的slave再指向new master A

1) 命令该服务为new master A的slave

命令格式 slaveof IP port