SQL数据库|Redis从青铜到王者,从环境搭建到熟练使用,看这一篇就够了,超全整理详细解析,赶紧收藏吧!!!

SQL数据库|Redis从青铜到王者,从环境搭建到熟练使用,看这一篇就够了,超全整理详细解析,赶紧收藏吧!!!
文章图片


感谢各位一直以来的支持和鼓励 制作不易
求点赞 ? 收藏 ? ? ? ? 关注???
一键三连走起 ! ! !

目录 一、常见的非关系型数据库NOSQL分类
二、了解Redis
三、Redis的单节点安装教程
四、Redis的常用命令
1、Help帮助命令
2、SET命令
3、过期命令
4、查找键命令
5、操作键命令
6、GET命令
7、步长命令
8、登录不同的库命令
9、清除当前库数据命令
10、清除所有库中的数据命令
五、BITMAP位图
1、位图常用命令
2、位操作命令
3、统计指定位区间上值为1的个数
六、Redis的数据模型
1、Redis的 key 键
2、Redis的 Value 值
1、String字符串
2、 List列表
3、 Hash散列
4、Set集合
5、SortedSet有序集合
七、Redis持久化
1、Redis持久化-RDB
(1)RDB使用策略
(2)SAVE命令
(3)BGSAVE命令
(4)SAVE 和 BGSAVE 命令的区别
(5)RDB持久化的优缺点
2、Redis持久化-AOF
(1)AOF写入机制
(2) 写入磁盘的策略
(3)AOF重写机制
(4)AOF重写触发
(5)AOF持久化的优缺点
八、idea使用Jedis连接Redis
一、常见的非关系型数据库NOSQL分类 点我返回目录

NOSQL类型 主要数据库产品 类型特色
K-V键值对存储类型 Redis、Memcached 使用key可以快速的查询到value,Memcached可以支持String类型的值value,Redis支持的值的数据类型很多如:String\set\hash\sortset\list等等
文档存储类型 MongoDB、CouchDB 使用JSON或类JSON的BSON数据结构,存储的内容为文档型,能够实现部分关系型数据库的功能
列存储类型 HBase、Cassandra 按照列进行数据存储,该类型便于存储结构化和半结构化的数据,可以方便做数据压缩和针对某一列或者某几列的数据查询
图存储类型 Neo4J、FlockDB 以图形关系存储数据,能够很好的弥补关系型数据库在图形存储时的不足
对象存储类型 Db4o、Versant 该存储类型的数据库通过类似面向对象的方式操作数据库,通过对象的方式存取数据
XML存储类型 Berkeley DB XML、BaseX 该类型数据库可以高效的存储XML数据,并且支持XML的内部查询语法,例如;XQuery、XPath
二、了解Redis 点我返回目录
Redis(Remote Dictionary Server ),即远程字典服务,是一个开源的(BSD协议)使用ANSI C语言编写,基于内存的且支持持久化,高性能的Key-Value的NOSQL数据库; Redis支持的数据结构类型很丰富,如 :字符串(strings), 散列(hashes), 列表(lists), 集合(sets), 有序集合(sorted sets) 以及范围查询, bitmaps(位图), hyperloglogs (超级日志)和 地理空间(geospatial) 索引半径查询等等。并且Redis有着丰富的支持主流语言的客户端,C/C++、Python、Erlang、R、C#、Java、PHP、Objective-C、Perl、Ruby、Scala、Go、JavaScript等;Redis 内置复制、Lua 脚本、LRU 驱逐、事务和不同级别的磁盘持久化,并通过 Redis Sentinel 和 Redis Cluster 自动分区提供高可用性;我们可以将Redis应用在缓存(StackOverFlow)、数据库、消息中间件等上。
Redis官网链接: https://redis.io/
三、Redis的单节点安装教程 点我返回目录
安装准备:Linux虚拟机:CentOS7、操作工具:Xshell 、Xftp
Redis安装包下载地址:https://download.redis.io/releases/
(1)、在安装Redis之前,我们需要先配置阿里云的yum源 下载配置文件
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

生成缓存
yum makecache

(2)、安装Redis 1、因为Redis是使用ANSI C语言编写的,所以我们要先安装gcc依赖
yum install -y gcc-c++ gcc tcl

2、使用Xftp上传Redis压缩的安装包到Linux虚拟机并解压
上传的压缩包的路径,可以自己指定或创建上传的目录
小北是上传到了/usr/local/module/目录,然后解压到了/usr/local/soft/目录下
tar -xvf redis-3.0.0.tar.gz

SQL数据库|Redis从青铜到王者,从环境搭建到熟练使用,看这一篇就够了,超全整理详细解析,赶紧收藏吧!!!
文章图片

3、进入解压好的目录redis-3.0.0,编译make
cd redis-3.0.0

make

SQL数据库|Redis从青铜到王者,从环境搭建到熟练使用,看这一篇就够了,超全整理详细解析,赶紧收藏吧!!!
文章图片

下面shell命令是用于测试make的,可用可不用
make test

创建安装目录
这是小北的安装目录mkdir -p /usr/local/soft/redis

安装
make PREFIX=/usr/local/soft/redis install

SQL数据库|Redis从青铜到王者,从环境搭建到熟练使用,看这一篇就够了,超全整理详细解析,赶紧收藏吧!!!
文章图片

4、复制配置文件
cp /usr/local/soft/redis-3.0.0/redis.conf /usr/local/soft/redis/bin/

配置环境变量
vim /etc/profile

添加环境变量
export REDIS_HOME=/usr/local/soft/redis/ export PATH=$REDIS_HOME/bin

让环境变量修改生效
source /etc/profile

5、启动Redis
后台启动
cd /usr/local/soft/redis/bin

nohup redis-server redis.conf &

SQL数据库|Redis从青铜到王者,从环境搭建到熟练使用,看这一篇就够了,超全整理详细解析,赶紧收藏吧!!!
文章图片

关闭redis的命令,要先获取Redis的进程号,杀死该进程
ps -aux | grep redis

kill -9

6、连接Redis
查看启动日志:
cat nohup.out

SQL数据库|Redis从青铜到王者,从环境搭建到熟练使用,看这一篇就够了,超全整理详细解析,赶紧收藏吧!!!
文章图片

后台启动Redis
redis-cli

SQL数据库|Redis从青铜到王者,从环境搭建到熟练使用,看这一篇就够了,超全整理详细解析,赶紧收藏吧!!!
文章图片

7、测试使用Redis
插入一条数据
setkey1 value1

查询数据
get key1

SQL数据库|Redis从青铜到王者,从环境搭建到熟练使用,看这一篇就够了,超全整理详细解析,赶紧收藏吧!!!
文章图片

四、Redis的常用命令 点我返回目录
1、Help帮助命令 SQL数据库|Redis从青铜到王者,从环境搭建到熟练使用,看这一篇就够了,超全整理详细解析,赶紧收藏吧!!!
文章图片

2、SET命令 点我返回目录
(1)设置字符串值 命令使用格式: SET key value [EX seconds] [PX milliseconds] [NX|XX] 注意: EX 表示设置过期时间,单位:秒,等同于SETEX key seconds value PX 表示设置过期时间,单位:毫秒,等同于PSETEX key milliseconds value NX 表示键不存在,才能设置,等同于SETNX key value XX 表示键存在时,才能设置(2)设置多个键的字符串值 使用格式: MSET key value [key value ...](3)当键不存在时,设置字符串值 MSETNX key value [key value ...] 注意:这是原子操作

SQL数据库|Redis从青铜到王者,从环境搭建到熟练使用,看这一篇就够了,超全整理详细解析,赶紧收藏吧!!!
文章图片

3、过期命令 点我返回目录
Redis中可以给Key设置一个生存时间(秒或毫秒),当达到这个时长后,这些键值将会被自动删除。
(1)设置多少秒或者毫秒后过期 EXPIRE key seconds PEXPIRE key milliseconds (2)设置在指定Unix时间戳过期 EXPIREAT key timestamp PEXPIREAT key milliseconds-timestamp (3)删除过期 PERSIST key (4)生存时间 Time To Live,指Key的剩余生存时间 (5)查看剩余生存时间 TTL key PTTL key key存在但没有设置TTL,返回-1 key存在,但还在生存期内,返回剩余的秒或者毫秒 key曾经存在,但已经消亡,返回-2(2.8版本之前返回-1)

SQL数据库|Redis从青铜到王者,从环境搭建到熟练使用,看这一篇就够了,超全整理详细解析,赶紧收藏吧!!!
文章图片

4、查找键命令 点我返回目录
(1)查找键使用格式: KEYS pattern(2)pattern的取值 * 任意长度字符 ? 任意一个字符 [] 字符集合,表示可以是集合中的任意一个

SQL数据库|Redis从青铜到王者,从环境搭建到熟练使用,看这一篇就够了,超全整理详细解析,赶紧收藏吧!!!
文章图片

5、操作键命令 点我返回目录
(1)查看键的数据类型 TYPE key (2)判断键是否存在 EXISTS key (3)给键重命名 RENAME key newkey RENAMENX key newkey若键存在就rename (4)删除键 DEL key [key ...]

SQL数据库|Redis从青铜到王者,从环境搭建到熟练使用,看这一篇就够了,超全整理详细解析,赶紧收藏吧!!!
文章图片

6、GET命令 点我返回目录
(1)获取值 GET key(2)获取多个给定的键的值 MGET key [key ...](3)返回旧值并设置新值 GETSET key value如果键不存在,就创建并赋值(4)获取字符串长度 STRLEN key(5)追加字符串 APPEND key value 如果键存在就追加;如果不存在就等同于SET key value(6)获取子字符串 GETRANGE key start end 索引值从0开始,负数表示从字符串右边向左数起,-1表示最有一个字符 (7)覆盖字符串 SETRANGE key offset value

SQL数据库|Redis从青铜到王者,从环境搭建到熟练使用,看这一篇就够了,超全整理详细解析,赶紧收藏吧!!!
文章图片

7、步长命令 点我返回目录
注意:只能对整形的数据进行步长操作(1)步长1的增减 INCR key DECR key 字符串值会被解释成64位有符号的十进制整数来操作,结果依然转成字符串(2)步长增减,指定步长长度 INCRBY key decrement DECRBY key decrement 字符串值会被解释成64位有符号的十进制整数来操作,结果依然转成字符串

SQL数据库|Redis从青铜到王者,从环境搭建到熟练使用,看这一篇就够了,超全整理详细解析,赶紧收藏吧!!!
文章图片

8、登录不同的库命令 点我返回目录
redis-cli --help redis-cli -n 2

9、清除当前库数据命令 点我返回目录
FLUSHDB

10、清除所有库中的数据命令 点我返回目录
FLUSHALL

五、BITMAP位图 点我返回目录
位图不是真正的数据类型,它是定义在字符串类型中的,我们知道一个字符串类型的值最多能存储512M字节的内容,其中位上限:2^(9+10+10+3) =2^32b
1、位图常用命令 【SQL数据库|Redis从青铜到王者,从环境搭建到熟练使用,看这一篇就够了,超全整理详细解析,赶紧收藏吧!!!】点我返回目录
(1)设置某一位上的值 SETBIT key offset value offset偏移量,从0开始 value不写,默认是0 (2)获取某一位上的值 GETBIT key offset (3)返回指定值0或者1在指定区间上第一次出现的位置 BITPOS key bit [start] [end]

SQL数据库|Redis从青铜到王者,从环境搭建到熟练使用,看这一篇就够了,超全整理详细解析,赶紧收藏吧!!!
文章图片

SQL数据库|Redis从青铜到王者,从环境搭建到熟练使用,看这一篇就够了,超全整理详细解析,赶紧收藏吧!!!
文章图片

2、位操作命令 点我返回目录
对一个或多个保存二进制位的字符串 key 进行位元操作,并将结果保存到 dteskey 上
  • operation 可以是 AND 、 OR 、 NOT 、 XOR 这四种操作中的任意一种
  • BITOP AND destkey key [key …] ,对一个或多个 key 求逻辑并,并将结果保存到 destkey
  • BITOP OR destkey key [key …] ,对一个或多个 key 求逻辑或,并将结果保存到 destkey
  • BITOP XOR destkey key [key …] ,对一个或多个 key 求逻辑异或,并将结果保存到 destkey
  • BITOP NOT destkey key ,对给定 key 求逻辑非,并将结果保存到 destkey
  • 除了 NOT 操作之外,其他操作都可以接受一个或多个 key 作为输入
  • 当 BITOP 处理不同长度的字符串时,较短的那个字符串所缺少的部分会被看作 0
  • 空的 key 也被看作是包含 0 的字符串序列
已知a和b的二进制表示: a = 01100001 b = 01100010都为1才为1 AND=》求逻辑并(与) 1 and 1->10 and 0->01 and 0->0 bitop and aband a b有一个为1就为1 OR=》求逻辑或1 or 1->10 or 0->01 or 0->1 bitop or abor a b就是取反(反转) NOT=》求逻辑非not 0 ->1not 1->0 bitop not anot a bitop not bnot b相同为0,相异为1 XOR=》求逻辑异或0 xor 0->01 xor 1->01 xor 0->1 bitop xor abxor a b

3、统计指定位区间上值为1的个数 点我返回目录
使用格式1: BITCOUNT key [start] [end] 从左向右从0开始,从右向左从-1开始, 注意:官方start、end是位,测试后是字节 使用格式2: BITCOUNT testkey 0 0 表示从索引为0个字节到索引为0个字节,也就是指对第一个字节的统计 注意: BITCOUNT testkey 0-1 等同于BITCOUNT testkey 我们最常用的格式就是 BITCOUNT testkey

SQL数据库|Redis从青铜到王者,从环境搭建到熟练使用,看这一篇就够了,超全整理详细解析,赶紧收藏吧!!!
文章图片

六、Redis的数据模型 点我返回目录
SQL数据库|Redis从青铜到王者,从环境搭建到熟练使用,看这一篇就够了,超全整理详细解析,赶紧收藏吧!!!
文章图片

1、Redis的 key 键 点我返回目录
Redis的 key 值是二进制安全的,这意味着可以用任何二进制序列作为key值,从形如”foo”的简单字符串到一个JPEG文件的内容都可以。空字符串也是有效key值。
Key取值原则:
  • 键值不需要太长,太长会消耗内存,且在数据中查找这类键值的计算成本较高
  • 键值不宜过短,过短则可读性较差
2、Redis的 Value 值 点我返回目录
1、String字符串 点我返回目录
字符串是一种最基本的Redis值类型。Redis字符串是二进制安全的,这意味着一个Redis字符串能包含任意类型的数据;并且一个字符串类型的值最多能存储512M字节的内容。
2、 List列表 点我返回目录
List列表是基于Linked List实现的,列表中的元素是字符串类型;而列表的头尾增删速度快,中间增删速度慢,正常使用过程中增删元素是常态,列表中元素可以重复出现,并且列表中最多能包含2^32-1个元素;列表的索引,从左至右,从0开始;从右至左,从-1开始
(1)注意: 命令说明: B --》block 块,阻塞 L --》left 左 R --》right 右 X --》exist 存在

(2)左右(或者头尾)压入元素 左(头)压入元素: 格式: LPUSH key value [value ...] 举例: LPUSHX key value左(头)压入元素: 格式:RPUSH key value [value ...] 举例:RPUSHX key value

SQL数据库|Redis从青铜到王者,从环境搭建到熟练使用,看这一篇就够了,超全整理详细解析,赶紧收藏吧!!!
文章图片

(3)左右(或者头尾)弹出元素(取出元素后,原先的位置就没有了) LPOP key RPOP key(4)从一个列表尾部弹出元素压入到另一个列表的头部 RPOPLPUSH source destination(5)返回列表中指定范围元素(返回元素后,原先的位置还有) LRANGE key start stop LRANGE key 0 -1 表示返回所有元素(6)获取指定位置的元素 LINDEX key index(7)设置指定位置元素的值 LSET key index value(8)获取列表长度(元素个数) LLEN key(9)从列表头部开始删除值等于value的元素count次 LREM key count value count > 0 : 从表头开始向表尾搜索,移除与 value 相等的元素,数量为 count count < 0 : 从表尾开始向表头搜索,移除与 value 相等的元素,数量为 count 的绝对值 count = 0 : 移除表中所有与 value 相等的值(10)去除指定范围外元素 LTRIM key start stop(11)在列表中某个存在的值(pivot)前或后插入元素 LINSERT key BEFORE|AFTER pivot value 若key和pivot不存在,则不进行任何操作(12)阻塞 如果弹出的列表不存在或者为空,就会造成阻塞 若超时时间设置为0,就是永久阻塞,直到有数据可以弹出 如果多个客户端阻塞在同一个列表上,那么使用First In First Service原则,先到先服务 (13)左右(或者头尾)阻塞弹出元素 BLPOP key [key ...] timeout BRPOP key [key ...] timeout(14)从一个列表尾部阻塞弹出元素压入到另一个列表的头部 BRPOPLPUSH source destination timeout

3、 Hash散列 点我返回目录
Hash散列是由field和关联的value组成的map键值对,而field和value都是字符串类型,一个hash中最多包含2^32-1键值对。
(1)设置单个字段 HSET key field value HSETNX key field value 当在key的filed不存在的情况下执行,那么key不存在会直接创建(2)设置多个字段 HMSET key field value [field value ...](3)返回字段个数 HLEN key(4)判断字段是否存在 HEXISTS key field key或者field不存在,返回0(5)返回字段值 HGET key field(6)返回多个字段值 HMGET key field [field ...](7)返回所有的键值对 HGETALL key(8)返回所有字段名 HKEYS key(9)返回所有值 HVALS key(10)在字段对应的值上进行整数的增量计算 HINCRBY key field increment(11)在字段对应的值上进行浮点数的增量计算 HINCRBYFLOAT key field increment(12)删除指定的字段 HDEL key field [field ...]

1).使用Hash的优点
  • 节约内存空间
  • 每创建一个键,它都会为这个键储存一些附加的管理信息(例如这个键最后一次被访问的时间等等)所以数据库里面的键越多,Redis数据库服务器在储存附加管理信息方面耗费的内存就会越多,那么用在管理数据库键上的CPU也会越多,在字段对应的值上进行浮点数的增量计算。
2).不适合使用Hash的情况
  • 使用二进制位操作命令:因为Redis目前支持对字符串键进行SETBIT、GETBIT、BITOP等操作,若要使用这些操作,那么只能使用字符串键,虽然散列也能保存二进制数据
  • 使用过期键功能:Redis的键过期功能目前只能对键进行过期操作,而不能对散列的字段进行过期操作,因此如果你要对键值对数据使用过期功能的话,那么只能把键值对储存在字符串里面
4、Set集合 点我返回目录
Set集合内存储的元素是无序的、去重的,元素是字符串类型,最多包含2^32-1个元素
(1)增加一个或多个元素 SADD key member [member ...] 如果元素已经存在,则自动忽略(2)移除一个或者多个元素 SREM key member [member ...] 元素不存在,自动忽略(3)返回集合包含的所有元素 SMEMBERS key 如果集合元素过多,例如百万个,需要遍历,可能会造成服务器阻塞,生产环境应避免使用 (4)检查给定元素是否存在于集合中 SISMEMBER key member(5)集合的无序性 SADD friends "java" "hadoop" "tomcat" "hive" "mapreduce" "spark" SADD anotherfriends "java" "hadoop" "tomcat" "hive" "mapreduce" "spark" SMEMBERS friends SMEMBERS anotherfriends 注意: SMEMBERS 有可能返回不同的结果, 如果需要存储有序且不重复的数据使用有序集合,存储有序可重复的使用列表 (6)随机返回集合中指定个数的 SRANDMEMBER key [count] 如果 count 为正数,且小于集合基数, 那么命令返回一个包含 count 个元素的数组,数组中的元素各不相同。 如果 count 大于等于集合基数,那么返回整个集合 如果 count 为负数, 那么命令返回一个数组,数组中的元素可能会重复出现多次,而数组的长度为 count 的绝对值 如果 count 为 0,返回空 如果 count 不指定,随机返回一个元素 (7)返回集合中元素的个数 SCARD key 键的结果会保存信息,集合长度就记录在里面,所以不需要遍历 (8)随机从集合中移除并返回这个被移除的元素 SPOP key(9)把元素从源集合移动到目标集合 SMOVE source destination member(10)求差集 SDIFF key [key ...],从第一个key的集合中去除其他集合和自己的交集部分 SDIFFSTORE destination key [key ...],将差集结果存储在目标key中(11)求交集 SINTER key [key ...],取所有集合交集部分 SINTERSTORE destination key [key ...],将交集结果存储在目标key中(12)求并集 SUNION key [key ...],取所有集合并集 SUNIONSTORE destination key [key ...],将并集结果存储在目标key中

5、SortedSet有序集合 点我返回目录
SortedSet有序集合与Set集合类似,它是有序的、去重的,元素是字符串类型,每一个元素都关联着一个浮点数分值(Score),并按照分值从小到大的顺序排列集合中的元素。其分值可以相同;最多包含2^32-1个元素。
(1)增加一个或多个元素 ZADD key score member [score member ...] 如果元素已经存在,则使用新的score(2)移除一个或者多个元素 ZREM key member [member ...] 元素不存在,自动忽略(3)显示分值 ZSCORE key member(4)增加或者减少分值 ZINCRBY key increment member increment为负数就是减少(5)返回元素的排名(索引) ZRANK key member(6)返回元素的逆序排名 ZREVRANK key member(7)返回指定索引区间元素 ZRANGE key start stop [WITHSCORES] 如果score相同,则按照字典序lexicographical order 排列 默认按照score从小到大,如果需要score从大到小排列,使用ZREVRANGE(8)返回指定索引区间元素 ZREVRANGE key start stop [WITHSCORES] 如果score相同,则按照字典序lexicographical order 的 逆序 排列 默认按照score从大到小,如果需要score从小到大排列,使用ZRANGE(9)返回指定分值区间元素(升序排序) ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count] 返回score默认属于[min,max]之间,元素按照score升序排列,若score相同则按照字典排序 LIMIT中offset代表跳过多少个元素,count是返回几个。类似于Mysql 使用小括号,则修改区间为开区间,例如(5、(10、5) -inf 和 +inf 分别表示负无穷和正无穷(10)返回指定分值区间元素(降序排序) ZREVRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count] 返回score默认属于[min,max]之间,元素按照score降序排列,score相同字典降序 LIMIT中offset代表跳过多少个元素,count是返回几个。类似于Mysql 使用小括号,修改区间为开区间,例如(5、(10、5) -inf和+inf表示负无穷和正无穷(11)移除指定排名范围的元素 ZREMRANGEBYRANK key start stop(12)移除指定分值范围的元素 ZREMRANGEBYSCORE key min max(13)返回集合中元素个数 ZCARD key(14)返回指定范围中元素的个数 ZCOUNT key min max ZCOUNT fruits 4 7 ZCOUNT fruits (4 7(15)求并集 ZUNIONSTORE destination numkeys key [key ...] [WEIGHTS weight] [AGGREGATE SUM|MIN|MAX] numkeys必须指定key的数量 WEIGHTS选项,与前面设定的key对应,对应key中每一个score都要乘以这个权重 AGGREGATE选项,指定并集结果的聚合方式 SUM:将所有集合中某一个元素的score值之和作为结果集中该成员的score值 MIN:将所有集合中某一个元素的score值中最小值作为结果集中该成员的score值 MAX:将所有集合中某一个元素的score值中最大值作为结果集中该成员的score值(16)求交集 ZINTERSTORE destination numkeys key [key ...] [WEIGHTS weight] [AGGREGATE SUM|MIN|MAX] numkeys指定key的数量,必须 WEIGHTS选项,与前面设定的key对应,对应key中每一个score都要乘以这个权重 AGGREGATE选项,指定并集结果的聚合方式 SUM:将所有集合中某一个元素的score值之和作为结果集中该成员的score值 MIN:将所有集合中某一个元素的score值中最小值作为结果集中该成员的score值 MAX:将所有集合中某一个元素的score值中最大值作为结果集中该成员的score值

七、Redis持久化 点我返回目录
Redis持久化是指将数据从掉电易失的内存存放到能够永久存储的设备上
Redis持久化两种方式:RDB(Redis DB) 和 AOF(AppendOnlyFile)
1、Redis持久化-RDB 点我返回目录
在默认情况下,Redis 将数据库快照保存在名字为 dump.rdb的二进制文件中
(1)RDB使用策略 点我返回目录
  • 自动:按照配置文件中的条件满足就执行BGSAVE
    save 60 10000,Redis要满足在60秒内至少有10000个键被改动,会自动保存一次
  • 手动:客户端发起SAVE、BGSAVE命令
注意:RDB策略会容易造成数据丢失
(2)SAVE命令 点我返回目录
在redis 客户端使用 save命令用于将数据持久化的保存到disk(磁盘)中,但执行该命令时会阻塞Redis服务,无法响应客户端请求,也就是在服务器执行save命令期间,Redis服务器不允许执行其它的命令直到save命令执行完,执行save命令会创建新的dump.rdb替代旧文件。
(3)BGSAVE命令 点我返回目录
(该命令是在后台执行的,是一个异步命令)
在redis客户端 使用 bgsave命令时,不会阻塞Redis服务,也就是非阻塞,Redis服务正常接收处理客户端请求,并且Redis会folk()一个新的子进程来创建RDB文件,子进程处理完后会向父进程发送一个信号,通知它处理完毕,父进程用新的dump.rdb替代旧文件
(4)SAVE 和 BGSAVE 命令的区别 点我返回目录
  • SAVE不用创建新的进程,速度略快
  • BGSAVE需要创建子进程,消耗额外的内存
  • SAVE适合停机维护,服务低谷时段
  • BGSAVE适合线上执行
(5)RDB持久化的优缺点 点我返回目录
优点
  • 完全备份,不同时间的数据集备份可以做到多版本恢复
  • 紧凑的单一文件,方便网络传输,适合灾难恢复
  • 恢复大数据集速度较AOF快
缺点
  • 会丢失最近写入、修改的而未能持久化的数据
  • folk过程非常耗时,会造成毫秒级不能响应客户端请求
2、Redis持久化-AOF 点我返回目录
Append only file(AOF),该方式采用追加的方式保存数据,默认保存的文件appendonly.aof;该方式会记录所有的写操作命令,在服务启动的时候使用这些命令就可以还原数据库;调整AOF持久化策略,可以在服务出现故障时,不丢失任何数据,也可以丢失一秒的数据。相对于RDB方式损失要小得多
(1)AOF写入机制 点我返回目录
  • AOF方式不能保证绝对不丢失数据
  • 目前常见的操作系统中,执行系统调用write函数,将一些内容写入到某个文件里面时,为了提高效率,系统通常不会直接将内容写入硬盘里面,而是先将内容放入一个内存缓冲区(buffer)里面,等到缓冲区被填满,或者用户执行fsync调用和fdatasync调用时才将储存在缓冲区里的内容真正的写入到硬盘里,而在未写入磁盘之前,数据可能会丢失。
(2) 写入磁盘的策略 点我返回目录
在redis.conf文件中的appendfsync选项,这个选项的值可以是always、everysec或者no
  • Always:服务器每写入一个命令,就调用一次fdatasync,将缓冲区里面的命令写入到硬盘。这种模式下,服务器出现故障,也不会丢失任何已经成功执行的命令数据
  • Everysec(默认):服务器每一秒重调用一次fdatasync,将缓冲区里面的命令写入到硬盘。这种模式下,服务器出现故障,最多只丢失一秒钟内的执行的命令数据
  • No:服务器不主动调用fdatasync,由操作系统决定何时将缓冲区里面的命令写入到硬盘。这种模式下,服务器遭遇意外停机时,丢失命令的数量是不确定的
运行速度:always的速度慢,everysec和no都很快
(3)AOF重写机制 点我返回目录
  • AOF文件过大
  • 合并重复的操作,AOF会使用尽可能少的命令来记录
重写的过程
  • folk一个子进程负责重写AOF文件
  • 子进程会创建一个临时文件写入AOF信息
  • 父进程会开辟一个内存缓冲区接收新的写命令
  • 子进程重写完成后,父进程会获得一个信号,将父进程接收到的新的写操作由子进程写入到临时文件中
  • 新文件替代旧文件
注意:如果写入操作的时候出现故障导致命令写半截,可以使用redis-check-aof工具修复
(4)AOF重写触发 点我返回目录
  • 手动:客户端向服务器发送BGREWRITEAOF命令
  • 自动:配置文件中的选项,自动执行BGREWRITEAOF命令
    • auto-aof-rewrite-min-size < size >,触发AOF重写所需的最小体积:只要在AOF文件的体积大于等于size时,才会考虑是否需要进行AOF重写,这个选项用于避免对体积过小的AOF文件进行重写
    • auto-aof-rewrite-percentage < percent >,指定触发重写所需的AOF文件体积百分比:当AOF文件的体积大于auto-aof-rewrite-min-size指定的体积,并且超过上一次重写之后的AOF文件体积的percent %时,就会触发AOF重写。(如果服务器刚刚启动不久,还没有进行过AOF重写,那么使用服务器启动时载入的AOF文件的体积来作为基准值)。将这个值设置为0表示关闭自动AOF重写
举例:
auto-aof-rewrite-percentage 100 auto-aof-rewrite-min-size 64mb 当AOF文件大于64MB时候,可以考虑重写AOF文件 只有当AOF文件的增量大于起始size的100%时, 也就是文件大小翻了一倍时,启动重写

(5)AOF持久化的优缺点 点我返回目录
优点
  • 写入机制,默认fysnc每秒执行,性能很好不阻塞服务,最多丢失一秒的数据
  • 重写机制,优化AOF文件
  • 如果误操作了(例如:FLUSHALL等),只要AOF未被重写,停止服务移除AOF文件尾部FLUSHALL命令,重启Redis,可以将数据集恢复到 FLUSHALL 执行之前的状态
缺点
  • 相同数据集,AOF文件体积较RDB大了很多
  • 恢复数据库速度叫RDB慢(文本,命令重演)
八、idea使用Jedis连接Redis 点我返回目录
首先需要在idea中的maven中的依赖配置文件pom.xml中导入jedis的依赖包,这里北使用的3.0版本的redis,那么导入的jedis依赖也是对应版本的;若是其它版本可以在maven仓库中选择对应版本,链接地址:https://mvnrepository.com/artifact/redis.clients/jedis
redis.clients jedis 3.0.0

idea中建立连接
import redis.clients.jedis.Jedis; /** * jdbc:是一种连接关系型数据的规范 * redis: 是kv结构的非关系型数据库(没有sql语句),使用jedis连接 */public class jedistest {public static void main(String[] args) {//创建redis连接 Jedis jedis = new Jedis("master", 6379); //获取数据 String name = jedis.get("name"); System.out.println(name); } }

SQL数据库|Redis从青铜到王者,从环境搭建到熟练使用,看这一篇就够了,超全整理详细解析,赶紧收藏吧!!!
文章图片

    推荐阅读