导图社区 Redis持久化事务知识点笔记
Redis的持久化事物的结构思维导图,阐述了主从复制,持久化,安装与调试,背景介绍,相关知识以及五大数据类型等。感兴趣的小伙伴可以看看。
编辑于2022-11-15 09:38:27 广东Redis持久化事务知识点笔记
背景介绍
NoSQL数据库简介
适用与不适用的场景
适用场景
对数据高并发的读写
海量数据的读写
对数据高可扩展性的
不适用场景
需要事务支持
基于sql的结构化查询存储,处理复杂的关系,需要即席查询。
即席查询:用户根据自己的需求,灵活的选择查询条件,系统能够根据用户的选择生成相应的统计报表。
NoSQL兄弟会
缓存数据库
Memcached
很早出现的NoSql数据库
数据都在内存中,一般不持久化
支持简单的key-value模式
一般是作为缓存数据库辅助持久化的数据库
Redis
几乎覆盖了Memcached的绝大部分功能
数据都在内存中,支持持久化,主要用作备份恢复
除了支持简单的key-value模式,还支持多种数据结构的存储,比如 list、set、hash、zset等。
一般是作为缓存数据库辅助持久化的数据库
文档数据库
mongoDB
数据都在内存中, 如果内存不足,把不常用的数据保存到硬盘
虽然是key-value模式,但是对value(尤其是json)提供了丰富的查询功能
支持二进制数据及大型对象
可以根据数据的特点替代RDBMS ,成为独立的数据库。或者配合RDBMS,存储特定的数据。
行式数据库
列式数据库
HBase
Cassandra
Redis的介绍
Redis简介
Redis是一个开源的key-value存储系统
几乎覆盖了Memcached的绝大部分功能
数据都在内存中,支持持久化,主要用作备份恢复
除了支持简单的key-value模式,还支持多种数据结构的存储,比如 list、set、hash、zset等。
一般是作为缓存数据库辅助持久化的数据库
Redis的用途
配合关系型数据库做高速缓存
高频次,热门访问的数据,降低数据库IO
分布式架构,做session共享
由于其拥有持久化能力,利用其多样的数据结构存储特定的数据
Redis的获取
http://www.Redis.net.cn/
Redis安装与调试
下载获得redis.tar.gz后置入Linux的目录 /opt并解压
cd redis-版本号
make命令
成功
失败
能上网
yum install gcc
yum install gcc-c++
不能上网
将资料中的rpmgcc目录复制到Linux的opt目录中
进入opt目录中的rpmgcc目录执行命令:rpm -Uvh *.rpm --nodeps --force
然后使用gcc –v和g++ -v查看gcc和g++版本,会看到详细的版本信息,然后
离线环境下安装GCC和GCC-C++就完成了。
make install
默认安装目录usr/local/bin
修改/opt/redis-3.2.5/redis.conf下的daemonize no 为yes
执行 redis-server /opt/redis-3.2.5/redis.conf
Redis相关知识
单线程+多路IO复用
数据通信系统或计算机网络系统中,传输媒体的带宽或容量往往会大于传输单一信号的需求,为了有效地利用通信线路,希望一个信道同时传输多路信号,这就是所谓的多路复用技术
多路复用是指使用一个线程来检查多个文件描述符(Socket)的就绪状态
Redis的数据库与选择
默认16个数据库
统一密码管理,所有库都是同样密码,要么都OK要么一个也连接不上。
使用命令 select <dbid> 来切换数据库。如: select 8
Redis五大数据类型(key +)
key概述
keys * 查询库里所有键
exists <key> 判断是否存在
type <key>查看类型
del <key>删除某个键
expire <key> <seconds> 设置过期时间
ttl <key> 查看还有多少秒过期,-1表示永不过期,-2表示已过期
dbsize 查看当前数据库的key的数量
flushdb 清空当前库
flushall 通杀全部库
String
概述
String类型是二进制安全的。意味着Redis的string可以包含任何数据。比如jpg图片或者序列化的对象
String类型是Redis最基本的数据类型,一个Redis中字符串value最多可以是512M
命令
get
set
append
strlen
setnx(key不存在时设置key)
incr(自增1)
decr(自减1)
incrby/decrby(规定自减自增多少)
mset
mget
msetnx
getrange
setrange
setex <key> <过期时间> <value>
设置键值的同时,设置过期时间,单位秒。
getset <key> <value>
以新换旧,设置了新值同时获得旧值。
原子性
所谓原子操作是指不会被线程调度机制打断的操作;这种操作一旦开始,就一直运行到结束,中间不会有任何 context switch (切换到另一个线程)
(1) 在单线程中, 能够在单条指令中完成的操作都可以认为是" 原子操作",因为中断只能发生于指令之间
(2)在多线程中,不能被其它进程(线程)打断的操作就叫原子操作
list
概述
双向链表,对两端的操作性能很高,通过索引下标的操作中间的节点性能会较差。
命令
lpush/rpush <key> <value1> <value2> <value3> ....
lpop/rpop <key>
值在键在,值亡键亡。
rpoplpush <key1> <key2> key1右边吐一个到key2左边
lrange <key> <start> <stop> 遍历start到stop
lindex <key> <index> 查对应脚标的key值
llen<key>
linsert <key> before <value> <newvalue> 在<value>的前面插入<newvalue>
lrem <key> <n> <value> 从左边删除n个value(从左到右)
set
hash
概述
Redis hash是一个string类型的field和value的映射表,hash特别适合用于存储对象。
类似Java里面的Map<String,Object>
zset
概述
Redis有序集合zset与普通集合set非常相似,是一个没有重复元素的字符串集合。不同之处是有序集合的所有成员都关联了一个评分(score) ,这个评分(score)被用来按照从最低分到最高分的方式排序集合中的成员。集合的成员是唯一的,但是评分可以是重复了 。
Redis事务
概述
Redis事务是一个单独的隔离操作:事务中的所有命令都会序列化、按顺序地执行。事务在执行的过程中,不会被其他客户端发送来的命令请求所打断。
Redis事务的主要作用就是串联多个命令防止别的命令插队
主要命令
Multi
Exec
discard
说明:组队阶段出错回滚,执行阶段出错跳过并执行下一行
watch/unwatch
悲观锁
并发操作串行化
传统的关系型数据库里边就用到了很多这种锁机制,比如行锁,表锁等,读锁,写锁等,都是在做操作之前先上锁
乐观锁
在更新的时候会判断一下在此期间别人有没有去更新这个数据,可以使用版本号等机制。乐观锁适用于多读的应用类型,这样可以提高吞吐量。Redis就是利用这种check-and-set机制实现事务的。
Redis的持久化
RDB(Redis DataBase)
概念
在指定的时间间隔内将内存中的数据集快照写入磁盘,也就是行话讲的Snapshot快照,它恢复时是将快照文件直接读到内存里。
备份如何执行
Redis会单独创建(fork)一个子进程来进行持久化,会先将数据写入到一个临时文件中,待持久化过程都结束了,再用这个临时文件替换上次持久化好的文件。
关于fork
在Linux程序中,fork()会产生一个和父进程完全相同的子进程,但子进程在此后多会exec系统调用,出于效率考虑,Linux中引入了“写时复制技术”,一般情况父进程和子进程会共用同一段物理内存,只有进程空间的各段的内容要发生变化时,才会将父进程的内容复制一份给子进程,。
rbd的保存策略
rdb的自动保存策略在redis.config文件中,可通过更改config配置文件来对rdb的自动保存策略进行修改
手动保存
save
bgsave
rdb的优点及缺点
优点
节省磁盘空间
恢复速度快
缺点
虽然Redis在fork时使用了写时拷贝技术,但是如果数据庞大时还是比较消耗性能。
在备份周期在一定间隔时间做一次备份,所以如果Redis意外down掉的话,就会丢失最后一次快照后的所有修改
AOF(Append Of File)
概念
以日志的形式来记录每个写操作,将Redis执行过的所有写指令记录下来
Redis重启的话就根据日志文件的内容将写指令从前到后执行一次以完成数据的恢复工作
AOF的开启
通过redis.conf文件配置,保存路径与rdb一致
AOF和RDB同时开启,系统默认取AOF的数据
AOF文件故障备份
AOF的备份机制和性能虽然和RDB不同, 但是备份和恢复的操作同RDB一样,都是拷贝备份文件,需要恢复时再拷贝到Redis工作目录下,启动系统即加载。
AOF文件故障恢复
如遇到AOF文件损坏,可通过 redis-check-aof --fix appendonly.aof 进行恢复
AOF的重写
概念:当AOF文件的大小超过所设定的阈值时,Redis就会启动AOF文件的内容压缩
bgrewriteaof
实现方式
将整个内存中的数据库内容用命令的方式重写了一个新的aof文件
重写条件
aof的优点和缺点
优点
可读的日志文本,通过操作AOF稳健,可以处理误操作。
备份机制更稳健,丢失数据概率更低。
缺点
比起RDB占用更多的磁盘空间。
恢复备份速度要慢。
每次读写都同步的话,有一定的性能压力。
存在个别Bug,造成恢复不能。
Redis的主从复制
概述
主从复制,就是主机数据更新后根据配置和策略,自动同步到备机的master/slaver机制,Master以写为主,Slave以读为主
意义
读写分离,性能扩展
容灾快速恢复
主从复制的配置