1. Redis数据库持久化

  redis提供了两种数据备份方式,一种是RDB,另外一种是AOF,以下将详细介绍这两种备份策略。

面试:

1.1  配置文件详解备份方式

[root@localhost ~]# vim /usr/local/reids/redis.conf
# save ""
save #900秒内发生1次数据更改就写入Redis当中
save #300秒内发生10次数据更改就写入Redis当中
save #60秒内发生10000次数据更改就写入Redis当中
#save值可以自定义更改,一般设置为5分钟执行一次,三者只要触发一个就写入Redis文件当中,若想关闭掉RBD备份,只需注释掉 此处的save即可。 #储存文件的绝对路径=dir+dbfilename
# The filename where to dump the DB
dbfilename dump.rdb
……
# Note that you must specify a directory here, not a file name.
dir ./ #查看dump.rdb文件
[root@localhost ~]# vim /usr/local/reids/dump.rdb
REDIS0009ú redis-ver^E5..0ú #表示压缩
redis-bitsÀ@ú^EctimeÂ#èã\ú^Hused-mem°^R^L^@ú^Laof-preambleÀ^@þ^@û^B^@^@ friendone^Czxj^@ #存储具体的值 friendtwo^CwrlÿY^Z^Zz<9b>ÇjÞ #RDB备份为全库备份,即每备份一次均备份数据库所有数据。 #开启AOF备份
[root@localhost ~]# vim /usr/local/reids/redis.conf
# Please check http://redis.io/topics/persistence for more information.
appendonly no #appendonly默认为no,若要开启AOF备份,此处改为yes #同步机制
# appendfsync always #只要更改就同步到Redis当中
appendfsync everysec #默认为每秒同步
# appendfsync no 按操作系统备份,一般为半小时 #AOF存储的是具体的操作命令
#开启AOF后启动进入Redis
[root@localhost ~]# redis-server redis.conf
[root@localhost ~]# ss -tnl
LISTEN 192.168.16.4: *:*
[root@localhost ~]# ll
-rw-r--r--. root root May : appendonly.aof #已生成aof文件
[root@localhost ~]# vim appendonly.aof #由于数据库未进行操作,文件是空的
~
192.168.16.4:> set username zxj #插入数据
OK #退出后再查看备份文件
192.168.16.4:> exit
[root@localhost ~]# vim appendonly.aof
*
$
SELECT #存储的是具体的命令
$ *
$
set
$
username
$
zxj
~
#存储文件的绝对路径=dir+appendfieldname

2.Redis主从架构的搭建

  Redis架构也是读写分离,与mariadb不同的是,mariadb的从数据库可以写但不能同步到主数据库(readonly),Redis从数据库只能读不能写。

Redis架构搭建:

  为节省空间,此处仅有一台主机进行搭建,在不同的窗口进行查看

#复制一份Redis配置文件slave.conf作为从数据库
[root@localhost ~]# cd /usr/local/redis/
[root@localhost redis]# cp redis.conf slave.conf
[root@localhost redis]# vim slave.conf
# JUST COMMENT THE FOLLOWING LINE.
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
bind 192.168.16.4
slaveof 192.168.16.4 #从属于192.168.16.4 63279
# If port is specified Redis will not listen on a TCP socket.
port #便于区分,将从节点端口改为6380 #启动从节点文件
[root@localhost redis]# redis-server slave.conf
[root@localhost redis]# ss -tnl #两实例
LISTEN 192.168.16.4: *:* #主
LISTEN 192.168.16.4: *:* #从 #打开两个窗口,进入数据库。窗口1:6379;窗口2:6380
#窗口1:
[root@localhost ~]# redis-cli -h 192.168.16.4 -p
192.168.16.4:>
#窗口2:
[root@localhost ~]# redis-cli -h 192.168.16.4 -p
192.168.16.4:>
192.168.16.4:> keys * #已同步
) "username1"
) "username"
192.168.16.4:> set username3 lvmy
(error) READONLY You can't write against a read only replica. #从节点无法写

3.Redis集群

  Redis集群一个主对应一个从,而且至少需要3个主(避免脑裂),因此需要6个集群。

Redis集群搭建实例详解

  为精简实验,在一台主机上搭建6个实例

#方便起见,端口设置为7001~7006
#按照习惯,将配置文件写在 conf下
[root@localhost conf]# vim .conf
port #绑定端口
bind 192.168.16.4 #绑定对外连接提供的ip
daemonize yes #开启守护进程
pidfile .pid #进程文件名
cluster-enabled yes #是否是集群
cluster-config-file 7001_node.conf #集群配置文件
cluster-node-timeout #集群连接超时时间
appendonly yes #数据持久化(备份)类型
~
#在7001.conf的基础上修改7002~7006.conf,只修该端口、进程、和配置。 #关闭原先实验的redis
[root@localhost conf]# ps aux | grep redis
root 0.1 1.3 ? Ssl : : redis-server 192.168.16.4:
root 0.1 1.4 ? Ssl : : redis-server 192.168.16.4:
root 0.0 0.7 pts/ S+ : : redis-cli -h 192.168.16.4 -p
root 0.0 0.0 pts/ S+ : : grep --color=auto redis
[root@localhost conf]# kill -
[root@localhost conf ]# ps aux | grep redis
root 0.0 0.0 pts/ S+ : : grep --color=auto redis #启动集群
[root@localhost conf]# vim start_conf.sh
#!/bin/bash
for i in {..}
do
redis-server $i.conf
done
~
[root@localhost conf]# bash start_conf.sh
[root@localhost conf]# ps aux | grep redis
root 0.1 0.7 ? Ssl : : redis-server 192.168.16.4: [cluster]
root 0.1 0.7 ? Ssl : : redis-server 192.168.16.4: [cluster]
root 0.1 0.7 ? Ssl : : redis-server 192.168.16.4: [cluster]
root 0.1 0.7 ? Ssl : : redis-server 192.168.16.4: [cluster]
root 0.1 0.7 ? Rsl : : redis-server 192.168.16.4: [cluster]
root 0.1 0.7 ? Ssl : : redis-server 192.168.16.4: [cluster] #建立主从联系
[root@localhost conf]# redis-cli --cluster create 192.168.16.4: 192.168.16.4: 192.168.16.4: 192.168.16.4: 192.168.16.4: 192.168.16.4: --cluster-replicas #每个主节点有一个从节点
………
M: 7140c88b7bd0778bbe71250dbe7597cc3df8ac95 192.168.16.4:
slots:[-] ( slots) master #M 主;S 从
M: c60cd50870fc97320bb4cf19557f6c5daced6745 192.168.16.4:
slots:[-] ( slots) master
M: 03783aeedfd9553e8b1bbe9a2054fba46f9f7e00 192.168.16.4:
slots:[-] ( slots) master #一共16384个槽,每个数据分配到槽里
S: 96396dbeeb6a94e632f9a9f585694a21d7235766 192.168.16.4:
replicates 03783aeedfd9553e8b1bbe9a2054fba46f9f7e00
S: d035beb18deb48a027b6c3fce0e123bebc3584c2 192.168.16.4:
replicates 7140c88b7bd0778bbe71250dbe7597cc3df8ac95
S: 67d8400b228762ad14841114775a3ee210fff5cd 192.168.16.4:
replicates c60cd50870fc97320bb4cf19557f6c5daced6745
Can I set the above configuration? (type 'yes' to accept):yes #是否要配置
…….
waiting …….
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All slots covered. #以集群的方式连接登录(-c),若以单个节点登录写入数据会报错
[root@localhost conf]# redis-cli -h 192.168.16.4 -p
192.168.16.4:> set username zcv
(error) MOVED 192.168.16.4:
[root@localhost conf]# redis-cli -c -h 192.168.16.4 -p
192.168.16.4:> #集群数据库是不存在以数字形式表示的数据库
192.168.16.4:> select
(error) ERR SELECT is not allowed in cluster mode 192.168.16.4:> set username zxj #每次输入数据会跳转数据库
-> Redirected to slot [] located at 192.168.16.4:7003 #值插入到槽14315当中,归7003管
OK
192.168.16.4:> set username2 aSD
-> Redirected to slot [] located at 192.168.16.4:
OK
192.168.16.4:> set username3 gfhn
-> Redirected to slot [] located at 192.168.16.4:
OK
192.168.16.4:> #主节点均正常,在主节点间跳转 #输入数据时的跳转并不影响取值
192.168.16.4:> get username
-> Redirected to slot [] located at 192.168.16.4:
"zxj"
192.168.16.4:> get username2
-> Redirected to slot [] located at 192.168.16.4:
"aSD"
192.168.16.4:> get username4
192.168.16.4:> get username3
-> Redirected to slot [] located at 192.168.16.4:
"gfhn"
192.168.16.4:> #模拟7002宕掉,自动从从节点补位
[root@localhost conf]# ps aux | grep redis
[root@localhost conf]# kill -
[root@localhost conf]# redis-cli -c -h 192.168.16.4 -p
192.168.16.4:> set bu dfgj
-> Redirected to slot [] located at 192.168.16.4:
OK
192.168.16.4:> set bu1 sdflj;
-> Redirected to slot [] located at 192.168.16.4:
OK
192.168.16.4:> set bu3 josd
-> Redirected to slot [] located at 192.168.16.4:
OK
192.168.16.4:>

Redis数据库(二)的更多相关文章

  1. 构建高性能数据库缓存之redis(二)

    一.概述 在构建高性能数据库缓存之redis(一)这篇文档中,阐述了Redis数据库(key/value)的特点.功能以及简单的配置过程,相信阅读过这篇文档的朋友,对Redis数据库会有一点的了解,此 ...

  2. Linux服务器运行环境搭建(二)——Redis数据库安装

    官网地址:http://redis.io/ 官网下载地址:http://redis.io/download 1. 下载Redis源码(tar.gz),并上传到Linux 2. 解压缩包:tar zxv ...

  3. 超强、超详细Redis数据库入门教程

    这篇文章主要介绍了超强.超详细Redis入门教程,本文详细介绍了Redis数据库各个方面的知识,需要的朋友可以参考下 [本教程目录] 1.redis是什么2.redis的作者何许人也3.谁在使用red ...

  4. redis(二)高级用法

    redis(二)高级用法 事务 redis的事务是一组命令的集合.事务同命令一样都是redis的最小执行单元,一个事务中的命令要么执行要么都不执行. 首先需要multi命令来开始事务,用exec命令来 ...

  5. 超强、超详细Redis数据库入门教程(转载)

    这篇文章主要介绍了超强.超详细Redis入门教程,本文详细介绍了Redis数据库各个方面的知识,需要的朋友可以参考下   [本教程目录] 1.redis是什么 2.redis的作者何许人也 3.谁在使 ...

  6. redis基础二

    前面已经学习了redis的基本的命令行操作和数据类型,下面开始redis一些有趣的功能. 订阅和发布机制 定义:发布者相当于电台,订阅者相当于客户端,客户端发到频道的消息,将会被推送到所有订阅此频道的 ...

  7. NoSQL数据库之Redis数据库:Redis的介绍与安装部署

     NoSQL(NoSQL = Not Only SQL),它指的是非关系型的数据库.随着互联网web2.0网站的兴起,传统的关系数据库在应付web2.0网站,特别是超大规模和高并发的SNS类型的w ...

  8. linux下redis数据库的简单使用

    一.redis简介 Redis是一个key-value存储系统.和 Memcached类似,但是解决了断电后数据完全丢失的情况,而且她支持更多无化的value类型,除了和string外,还支持list ...

  9. 操作redis数据库 & 操作Excel & 开发接口

    操作redis数据库: string类型 1. 增 set,传俩个参数 key value(只要是字符串就行)2. 删 delete 传一个参数 key3. 修改 set 在目标key重新传参 key ...

随机推荐

  1. C 语言实例 - 将字符串写入文件

    C 语言实例 - 将字符串写入文件 C 语言实例 C 语言实例 将字符串写入文件. 实例 #include <stdio.h> #include <stdlib.h> /* e ...

  2. Poj2299 Ultra-QuickSort(另附本质不同逆序对)

    Description 给定一个长度为 n(n≤5*10^5) 的序列 a,如果只允许进行比较和交换相邻两个数的操作求至少需要多少次交换才能把 a 从小到大排序. Input The input co ...

  3. insert后面value可控的盲注(第一次代码审计出漏洞)

    这个叫诗龙的cms真的很感谢他的编写人,全站注入~~一些特别白痴的就不说了,这里有一个相对有点意思的 很明显的注入,然后去直接利用报错注入想爆出数据结果发现没有开报错模式. 报错注入http://ww ...

  4. Codeforces 526F Pudding Monsters

    先把题目抽象一下: 有一个静态的数组,求有多少个区间[i,j]满足:j-i==max{ai,...,aj}-min{ai,...,aj} 也就是要求max-min+i-j==0的区间数 所以肿么做呢? ...

  5. Windows如何利用输入法简单的打出 ‘↑’ ‘↓’ ‘↖’等箭头

    ‘↑’  shang ‘↓’ xia ‘←’ zuo ‘→’ you ‘↖’ zuoshang ‘↙’  zuoxia ‘↗’  youshang ‘↘’  youxia

  6. Minikube-Kubernetes本地环境进行开发

    Minikube-Kubernetes本地环境进行开发 使用Minikube 启动Minikube # 启动 minkube start # 检查状态 minikube status host: Ru ...

  7. 让linux下的eclipse支持GBK编码

    原文链接:http://leaze.blog.51cto.com/83088/195584 今天,把windows下的工程导入到了Linux下eclipse中,由于以前的工程代码,都是GBK编码的,而 ...

  8. debian使用apt安装时出现“更换介质,插入驱动器"/media/chrom/"再按回车键”的提示,无法从网络安装,解决?

    原文链接:https://www.zhihu.com/question/22132663 nano /etc/apt/sources.list把那出现的那行注释掉:含CD盘的一行:然后apt-get ...

  9. js实现接口的几种方式

    Javascript模仿接口可以有三种方式:1.注释法 2.检查属性法 3.鸭式辨形法 1.注释法:此方法属于程序文档范畴,对接口的继承实现完全依靠程序员自觉 /* interface People{ ...

  10. 安卓ListView基础应用

    listview简单描述 主页面: package com.example.listview; import com.lidroid.xutils.ViewUtils; import com.lidr ...