1.数据库
sql结构化数据库:里面存储的数据类型是结构化数据。别称:关系型数据库
nosql非结构化数据库:里面存储的数据类型是非结构化数据。别称:非关系型数据库
分类依据:
结构化数据:方便通过二维表格形式表述这个数据
非结构化数据:不方便以二维表格的形式表述的这种类型的数据、
非关系型数据库产生背景
High performance–对数据库高并发读写需求
Huge Storage–对海量数据高效存储与访问需求
High Scalability && High Availability–对数据库高可扩展性与高可用性需求
Redis概述
Redis基于内存运行并支持持久化
采用key-value(键值对)的存储形式
优点:
具有极高的数据读写速度
支持丰富的数据类型
支持数据的持久化
原子性
支持数据备份
2.安装Redis
tar -zxvf redis-5.0.4.tar.gz
make && make PREFIX=/usr/local/redis install
ln -s /usr/local/redis/bin/* /usr/bin/
cd redis-5.0.4/utils/
./install_server.sh
//修改配置文件
vi /etc/redis/6379.conf
bind 127.0.0.1 20.0.0.13
port 6379
daemonize yes
pidfile /var/run/redis_6379.pid
loglevel notice
logfile /var/log/redis_6379.log
dir /var/lib/redis/6379
//连接redis数据库
redis-cli
2.Redis支持的数据类型
2.1 String
- string是redis最基本的类型,你可以理解成与Memcached一模一样的类型,一个key对应一个value
- string类型是二进制安全的,意思是redis的string可以包含任何数据,比如jpg图片或者序列化对象
- string类型是redis最基本的数据类型,string类型的值最大能存储512M
2.2 Hash
Redis hash是一个键值(key=>value)对集合
Redis hash是一个string类型的field和value的映射表,hash特别适合用于存储对象
场景:存储、读取、修改用户属性
2.3 List
Redis列表是简单的字符串列表,按照插入顺序,可以添加一个元素到列表的头部(左边)或者尾部(右边)
lpush list1 1 #插入到List最左侧
lpush list1 2
lpush list1 3
lpush list1 4
lien list1 //查看List长度
4
rpop list1 //弹出最右侧的值
1
lpop list1 //弹出最左侧的值
4
rpush list1 5 //插入到List最右侧
2.4 Set
Redis的set是string类型的无序集合
sadd set1 1 //向set中插入一个值,插入成功返回1,不成功返回0
1
sadd set1 2
1
sadd set1 2 //因为set集合中已有一个值为2
0
scard set1 //查看集合长度
2
sismember set1 1 //查看是否已有“1”
1
sismember set1 3 //没有则返回0
0
srem set1 1 //删除集合中的数
2.5 zset
Redis zset和set一样也是string类型元素的集合,且不允许重复的值
不同的是每个元素都会关联一个double类型的分数,redis正是通过分数来为集合中的成员进行从小到大的排序
zset的成员是唯一的,但score却可以重复
3. 多数据库
3.1 keys命令
使用keys命令可以取符合规则的键值列表
set aa 1
set bb 2
set cc 3
set aaaa 4
keys * #查看当前数据库中所有键
1)aa
2)bb
3)cc
4)aaaa
keys aa* #查看当前数据库中以k开头的所有键
1)aa
2)aaaa
keys a? #查看当前数据库中以v开头并只跟了一个参数的键
1)aa
3.2 del
keys *
1)aa
2)bb
3)cc
4)aaaa
del bb
1
get bb
(nil)
3.3 flushdb 清空数据库数据
redis数据库的数据删除主要分为两个部分:1,清空当前数据库数据,2,使用flushdb清空所有数据库数据
flushdb
ok
3.4 move 多数据库移动
redis数据库提供了一个move命令,可以进行多数据库的数据移动
select 0 //使用数据库0
get aa
move aa 1 #将数据库0中的aa移动到数据库1中
get aa
select 1 //使用数据库1
get aa
"1"
3.5 rename 重命名
rename命令是对已有key进行重命名,格式为rename 源key 目标key,使用rename进行重命名时,无论目标key是否存在都进行重命名,且源key的值会覆盖目标key的值,在实际使用过程中,建议先用exists命令查看目标key是否存在,再决定是否重命名,以避免覆盖数据
keys a*
1)aa
2)aaaa
get aa
1
rename aa ab
keys v*
1)ab
2)aaaa
get ab
1
type 查看value值类型
使用type可以获取key对应的value值类型
type cc
string
4.持久化
概述
- Redis是运行在内存中,内存中的数据断电丢失
为了能够重用Redis数据,或者放置系统故障,需要将Redis中的数据写入到磁盘空间中,即持久化 - 持久化分类
RDB:创建快照的方式获取某一时刻Redis中所有数据的副本
AOF:将执行的写命令写到文件的末尾,以日志的方式来记录数据的变化 - 触发条件
在指定的时间间隔内,执行指定次数的写操作(配置文件控制)
执行save或bgsave(异步)命令
执行flushall命令,清空数据库所有数据
执行shutdown命令,保证服务器正常关闭且不丢失任何数据
RDB持久化
通过RDB文件恢复数据,将dump.rdb文件拷贝到redis的安装目录的bin目录下,重启redis服务即可
vi /etc/redis/6379.conf
save 900 1
save 300 10
save 60 10000
dbfilename dump.rdb
dir /var/lib/redis/6379
rdbcompression yes
AOF持久化
根据AOF文件恢复数据,将appendonly.aof文件拷贝到Redis安装目录的bin目录下,重启Redis服务即可
vi /etc/redis/6379.conf
appendonly yes
appendfilename "appendonly.aof"
#appendfsync always
appendfsync everysec
#appendfsync no
aof-load-truncated yes
AOF重写
- AOF的重写机制
- AOF的工作原理是将写操作追加到文件中,问价你的冗余内容会越来越多
- 当AOF文件的大小超过所设定的阈值时,Redis就会对AOF文件的内容压缩
- AOF重写的原理
Redis会fork出一条新进程,读取内存中的数据(并没有读取旧文件),并重新写到一个临时文件中,最后替换旧的aof文件
vi /etc/redis/6379.conf
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb