关系型数据库
- 一个结构化的数据库,创建在关系模型基础上
- 一般面向与记录
非关系型数据库
- 一般主流的关系型数据库之外的数据库都是非关系型数据库
Redis基于内存运行并支持持久化
采用key-value(键值对)的存储形式
优点
- 具有极高的数据读写速度
- 支持丰富的数据类型
- 支持诗句的持久化
- 原子性
- 支持数据备份
部署redis
#redis的安装包可以在下面地址下载
https://redis.io/downloads/
#上传安装包redis-4.0.9.tar.gz
yum -y install gcc gcc-c++
tar zxf redis-4.0.9.tar.gz
cd redis-4.0.9
make && make PREFIX=/usr/local/redis install
#安装到/usr/local/redis
ln -s /usr/local/redis/bin/* /usr/local/bin/
cd utils/
./install_server.sh
ss -anpt |grep 6379
#初始化redis
/etc/init.d/redis_6379 status
/etc/init.d/redis_6379 start
/etc/init.d/redis_6379 stop
/etc/init.d/redis_6379 restart
#redis管理命令
redis测试
redis-benchmark -h 127.0.0.1 -p 6379 -c 100 -n 10000
#测试redis性能-h测试的主机IP,-p测试的端口,-c测试的并发量,-n测试的数量
redis客户端
redis-cli
#设置键值对
127.0.0.1:6379> set name zhangsan
OK
#获取值
127.0.0.1:6379> get name
"zhangsan"
#查看所有数据
keys *
#匹配键
keys na*
1) "name"
#匹配?
127.0.0.1:6379> keys na??
1) "name"
127.0.0.1:6379> keys na???
(empty list or set)
#判断键是否存在
127.0.0.1:6379> EXISTS name
(integer) 1
127.0.0.1:6379> EXISTS lll
(integer) 0
#删除键值对
127.0.0.1:6379> del name
(integer) 1
127.0.0.1:6379> get name
(nil)
#EX设置过期时间,这里为10秒
127.0.0.1:6379> set name lisi EX 10
OK
127.0.0.1:6379> get name
"lisi"
127.0.0.1:6379> get name
(nil)
#在已经存在的键值对上设置过期时间
127.0.0.1:6379> set name lisi
OK
127.0.0.1:6379> get name
"lisi"
127.0.0.1:6379> EXPIRE name 5
(integer) 1
127.0.0.1:6379> get name
"lisi"
127.0.0.1:6379> get name
(nil)
#统计有多少数据
127.0.0.1:6379> dbsize
(integer) 4
#初始化过后会有16个数据库0-15
127.0.0.1:6379> select 15
OK
127.0.0.1:6379[15]>
#移动键值对到其他库
127.0.0.1:6379> set name lisi
OK
127.0.0.1:6379> move name 10
(integer) 1
127.0.0.1:6379> SELECT 10
OK
127.0.0.1:6379[10]> get name
"lisi"
#清空当前数据库的所有数据
127.0.0.1:6379[10]> flushdb
OK
127.0.0.1:6379[10]> get name
(nil)
#清空所有数据库的所有数据
127.0.0.1:6379[10]> FLUSHALL
OK
redis持久化
redis是运行在内存中,内存中的数据断电丢失
未来能够重用redis数据,或着防止系统故障,需要将redis中的数据写入到磁盘空间中,即持久化
持久化分类
- RDB方式:创建快照的方式获取某一时刻的Redis中所有数据的副本
- redis的默认持久化方式
- 默认文件名为dump.rdb
- 触发方式
- 手动触发
- SAVE 命令,会阻塞Redis服务,直到RDB文件创建完成
- BGSAVE 命令,通过fork操作创建一个子进程来负责持久化工作,而父进程(即主进程)则继续处理客户端的请求,不会造成服务阻塞。
- 自动触发
- Redis可以通过配置自动执行BGSAVE命令来定期进行数据持久化。配置文件中的save指令可以设置多个条件
- 当Redis接收到shutdown命令准备关闭时,如果没有开启AOF持久化,它也会自动执行一次BGSAVE,确保数据能够被保存。
- 手动触发
- 优缺点
- 适合大规模的数据恢复
- 如果业务对数据完整性和一致性要求不高,RDB是更好的选择
- 数据的完整性和一致性不高
- 备份时占用内存
- AOF方式:将执行的写命令写到文件的末尾,以日志的方式来记录数据的变化
- redis默认不开启
- 弥补RDB的不足
- 采用日志的形式来记录每个写操作,并追加到文件中
- redis重启会根据日志文件的内容将写指令从前到后执行一次以完成数据的恢复工作
RDB方式
#手动输入
127.0.0.1:6379>set name lisi
127.0.0.1:6379>get name
"lisi"
127.0.0.1:6379> save
OK
#关闭数据库把RDB的存储数据移走
/etc/init.d/redis_6379 stop
cd /var/lib/redis/6379/
mkdir /bak
mv dump.rdb /bak
/etc/init.d/redis_6379 start
127.0.0.1:6379> get name
(nil)
#备份文件移走后数据也会被移走
/etc/init.d/redis_6379 stop
mv /bak/dump.rdb ./
/etc/init.d/redis_6379 start
127.0.0.1:6379>get name
"lisi"
AOF方式
#默认不开启修改配置文件开启AOF
vim /etc/redis/6379.conf
--------673行---------
no改为yes
127.0.0.1:6379>set name lisi
127.0.0.1:6379>get name
"lisi"
/etc/init.d/redis_6379 stop
cd /var/lib/redis/6379/
mv appendonly.aof /bak
/etc/init.d/redis_6379 start
127.0.0.1:6379> get name
(nil)
/etc/init.d/redis_6379 stop
mv /bak appendonly.aof
/etc/init.d/redis_6379 start
127.0.0.1:6379>get name
"lisi"