Redis简介
Redis基于内存运行并支持持久化
采用key-value(键值对)的存储方式
优点
具有极高的数据读写速度
支持丰富的数据类型
支持数据的持久化
原子性
支持数据备份
Redis持久化
持久化概述
Redis是运行在内存的,内存中的数据断电丢失
为了能够重写Redis数据,或者防止系统故障,需要将Redis中的数据写入到磁盘空间中,即持久化
持久化分类
RDB方式:创建快照的方式获取某一时刻Redis中搜有数据的副本
AFO方式:将执行的写命令写到文件的末尾,以日志的方式来记录数据的方式
RDB持久化
Redis的默认持久化方式
默认文件名dump.rdb
触犯条件
优缺点
适合大规模的数据恢复
如果业务对数据完整性和一致性要求不高,RDB是很好的选择
数据完整性和一致性不好
备份时占用内存
aof持久化
Redis默认不开启
弥补RDB的不足
采用日志的形式来记录每个写操作,并追加到文件中
Redis从其会根据日志文件的内容将写指令从前到后执行一次
实验案例
基础环境
系统版本 | 配置 | 主机名 | IP地址 |
CentOS 7.9 | 2C4G | Redis | 192.168.86.120 |
关闭防火墙
systemctl stop firewalld systemctl disable firewalld
关闭安全内核机制
setenforce 0 sed -i "s/^SELINUX=.*/SELINUX=disabled/g" /etc/selinux/config
修改主机名
hostanmectl set-hostname Redis
安装Redis
安装编译环境
[root@redis ~]# yum -y install gcc gcc-*
[root@redis ~]# tar zxf redis-4.0.9.tar.gz
[root@redis ~]# cd redis-4.0.9
[root@redis redis-4.0.9]# make && make PREFIX=/usr/local/redis install
[root@redis redis-4.0.9]# echo $?
0
[root@redis redis-4.0.9]# cd utils/
[root@redis utils]# ln -s /usr/local/redis/bin/* /usr/local/bin/
[root@redis utils]# sh install_server.sh
Redis常用命令
# 停止命令
[root@redis utils]# /etc/init.d/redis_6379 stop
# 启动命令
[root@redis utils]# /etc/init.d/redis_6379 start
# 查看服务状态命令
[root@redis utils]# /etc/init.d/redis_6379 status
# Redis测试命令
[root@redis utils]# redis-benchmark -h 127.0.0.1 -p 6379 -c 100 -n 100000
# -h 主机 -p 端口 -c 并发数请求数 -n 请求数
Redis数据库命令
# 连接到数据库
[root@redis ~]# redis-cli
# 创建键值对
127.0.0.1:6379> set name zhangsan
# 查看键值对
127.0.0.1:6379> get name
# 查看所有的键值对
127.0.0.1:6379> keys *
# 查看指定的键值对,*表示任意字符,多个字段
127.0.0.1:6379> keys na*
# 查看指定的键值对,?表示任意字符,一个字段
127.0.0.1:6379> keys na??
# 判断这个键值对是否存在
127.0.0.1:6379> exists name
# 删除键值对
127.0.0.1:6379> del name
# ex表示在创建键值对的时候设置一个过期时间,超过这个时间这条数据自动淘汰
127.0.0.1:6379> set name list ex 10
# expire表示在已经添加的数据添加一个过期时间
127.0.0.1:6379> expire name 5
# dbsize表示查看几个键值对
127.0.0.1:6379> dbsize
# Redis有0-15个数据库,select切换数据库,各个数据库之间相互独立存在,数据不相同
127.0.0.1:6379> select 15
# Redis数据库之间虽然不相通,但是可以移动数据
127.0.0.1:6379> move name 10
# 清空当前库的所有数据
127.0.0.1:6379[10]> flushdb
# 清空所有库的数据
127.0.0.1:6379[10]> flushall
RDB持久化配置
# 备份
[root@redis ~]# redis-cli
127.0.0.1:6379> set name '张三'
OK
127.0.0.1:6379> get name
"\xe5\xbc\xa0\xe4\xb8\x89"
127.0.0.1:6379> save
OK
127.0.0.1:6379> exit
[root@redis ~]# /etc/init.d/redis_6379 stop
[root@redis ~]# cd /var/lib/redis/6379/
[root@redis 6379]# mkdir /bak
[root@redis 6379]# mv dump.rdb /bak/
[root@redis 6379]# /etc/init.d/redis_6379 start
[root@redis 6379]# redis-cli
127.0.0.1:6379> keys *
(empty list or set)
127.0.0.1:6379> exit
# 恢复备份
[root@redis 6379]# /etc/init.d/redis_6379 stop
[root@redis 6379]# rm -rf dump.rdb
[root@redis 6379]# cp /bak/dump.rdb ./
[root@redis 6379]# /etc/init.d/redis_6379 start
[root@redis 6379]# redis-cli
127.0.0.1:6379> keys *
"name"
127.0.0.1:6379> get name
"\xe5\xbc\xa0\xe4\xb8\x89"
127.0.0.1:6379> exit
aof持久化配置
[root@redis ~]# vi /etc/redis/6379.confexit
# 创建要备份资料
[root@redis ~]# redis-cli
127.0.0.1:6379> set kgc kcs62
OK
127.0.0.1:6379> get kgc
"kcs62"
127.0.0.1:6379> set name zhangsan
OK
127.0.0.1:6379> get name
"zhangsan"
# 备份
[root@redis ~]# cd /var/lib/redis/6379/
[root@redis 6379]# /etc/init.d/redis_6379 stop
[root@redis 6379]# mv appendonly.aof /bak/
[root@redis 6379]# /etc/init.d/redis_6379 start
[root@redis 6379]# redis-cli
127.0.0.1:6379> keys *
(empty list or set)
127.0.0.1:6379> exit
# 恢复备份
[root@redis 6379]# cp /bak/appendonly.aof ./
[root@redis 6379]# /etc/init.d/redis_6379 restart
[root@redis 6379]# redis-cli
127.0.0.1:6379> keys *
"kgc"
"name"
127.0.0.1:6379> exit