当前位置: 首页>数据库>正文

redis 中的db概念 redis中db是什么意思

传统DB的缺点

像Mysql、和Oracle 这种关系型数据库,虽然有着数据稳定和服务稳定、数据一致性的特点,但也存在一个致命的缺陷:

高并发下DB不稳定

在高并发的情况下,DB的不稳定性,在大量用户访问时DB出奇的慢,因为对磁盘操作需要使用IO流,一个字节一个字节存取操作。要将所有数据读取到内存中后才可以操作。所以在高并发下DB的高可用便成了问题。这时NoSQL便应运而生。

什么是NOSQl

NoSQL是对不同于传统的关系数据库的数据库管理系统的统称。即非关系型数据库
NOSQL:因为是内存操作数据,非常快,解决了三高问题(高并发、高海量、高可用)

非关系型数据库与非关系型数据库的区别

关系型数据库

非关系型数据库

以文件方式保存

存储在内存中,服务器关闭数据可能会丢失

数据可以永久保存

不能持久化保存,可能导致数据丢失

查询速度慢

存取速度快

常见的NOSQL数据库

redis 中的db概念 redis中db是什么意思,redis 中的db概念 redis中db是什么意思_redis 中的db概念,第1张

Redis

redis 中的db概念 redis中db是什么意思,redis 中的db概念 redis中db是什么意思_数据库_02,第2张

简单翻译下

Redis是一个开源(BSD许可)的内存数据结构存储,用作数据库、缓存和消息代理。它支持诸如字符串、散列、列表、集、带范围查询的排序集、位图、hyperloglogs、带半径查询和流的地理空间索引等数据结构。Redis具有内置的复制、Lua脚本、LRU清除、事务和不同级别的磁盘持久性,并通过Redis Sentinel和带有Redis集群的自动分区提供高可用性

redis的安装可以到官网下载,这里就不演示了。

Redis是一种高级的key:value存储系统,其中value支持五种数据类型
  • 字符串(strings)
  • 字符串无序集合(Set)
  • 有序字符串集合(zset)
  • 字符串列表(List)
  • -哈希类型(hash)

String类型

字符串类型是 Redis 中最为基础的数据存储类型,它在 Redis 中以二进制保存,没有编码和解码的过程,String字符串类型的Value数据长度512M

操作

作用

set key 值

添加字符串类型键和值

get key 值

取出指定类型的值,没有返回null

del key

删除指定的key 返回删除的个数 没有返回0

redis 中的db概念 redis中db是什么意思,redis 中的db概念 redis中db是什么意思_持久化_03,第3张

Set类型

我们可以将 Set 类型看作为没有排序的字符集合

操作

作用

sadd key 值1、值2

向集合中添加一个或多个元素

smembers key

查询指定集合所有的元素

sismember key 值

查询某个值是否存在 存在返回1、反则

srem key 值1、值2

删除指定元素

redis 中的db概念 redis中db是什么意思,redis 中的db概念 redis中db是什么意思_数据库_04,第4张

Zset类型

集合一样也是string类型元素的集合,且不允许重复的成员。
不同的是每个元素都会关联一个分数。redis正是通过分数来为集合中的成员进行从小到大的排序。有序集合的成员是唯一的,但分数(score)却可以重复,每个集合可存储40多亿个成员

操作

作用

zadd key 分数 值

向集合 添加一个或多个元素

zrang key 开始 结束

返回集合中指定区间内的元素

zrem key 值

删除集合的 一个元素或多个元素

zcard key

获取集合中的元素数

zrank key 值

返回集合中指定成员的索引

redis 中的db概念 redis中db是什么意思,redis 中的db概念 redis中db是什么意思_redis_05,第5张

list类型

List 类型是按照插入顺序排序的字符串链表。和数据结构中的普通链表一样,我们可以在其左部(left)和右部(right)添加新的元素。

操作

作用

lpush key 元素1 元素2

往链表左边添加元素 键不存在则 创建新链表

rpush key 元素1 元素2

往链表右边添加元素 键不存在则 创建新链表

lrange key 开始 结束

取出指定范围的元素列表 左边数第一个为0 右边数第一个为-1

lpop key

从左边删除一个元素

rpop key

从右边删除一个元素

llen key

得到指定链表的长度

redis 中的db概念 redis中db是什么意思,redis 中的db概念 redis中db是什么意思_java_06,第6张

redis 中的db概念 redis中db是什么意思,redis 中的db概念 redis中db是什么意思_持久化_07,第7张

Hash类型

Redis 中的 Hash 类型可以看成具 String 的键和 String 的值 Map 容器,每一个 Hash 可以存储 40(42 亿 9千多个)亿个键值对。

操作

作用

hset key MapKey 值

向指定的key中添加 hasnMap类型

hget key MapKey

获取指定key中的指定HashMap

hmset key MapKey1 值 MapKey2 值

向一个键中设置多个Map和值

hmget key MapKey1 MapKey2

获取一个键中的多个Map

hdel key MapKey1 MapKey1

删除一个键中的多个Map

hgetall key

得到一个键中的所有Map

redis 中的db概念 redis中db是什么意思,redis 中的db概念 redis中db是什么意思_redis_08,第8张

批量插入Map

redis 中的db概念 redis中db是什么意思,redis 中的db概念 redis中db是什么意思_redis 中的db概念_09,第9张

删除Map

redis 中的db概念 redis中db是什么意思,redis 中的db概念 redis中db是什么意思_持久化_10,第10张

其他操作命令

操作

作用

keys 匹配字符

查询数据库的键 ( * 为匹配全部字符)

del key1 key2

删除任意键

exists key

判断指定键是否存在

type key

判断该key 属于哪种类型

select 数据库编号

选择指定的数据库

move key 数据库编号

将某个键移动到另一个数据库

Expire key 秒

设置过期时间

TTL key

返回剩余生存时间

redis 中的db概念 redis中db是什么意思,redis 中的db概念 redis中db是什么意思_java_11,第11张

Redis数据库,Redis默认有16个数据库,我们可以通过Redis的一个图形化工具查看

redis 中的db概念 redis中db是什么意思,redis 中的db概念 redis中db是什么意思_redis 中的db概念_12,第12张

redis 中的db概念 redis中db是什么意思,redis 中的db概念 redis中db是什么意思_数据库_13,第13张

redis 中的db概念 redis中db是什么意思,redis 中的db概念 redis中db是什么意思_java_14,第14张

redis 中的db概念 redis中db是什么意思,redis 中的db概念 redis中db是什么意思_redis_15,第15张

设置过期时间(过期时为-2)

redis 中的db概念 redis中db是什么意思,redis 中的db概念 redis中db是什么意思_数据库_16,第16张

Redis持久化

Redis的最大特色就是持久化机制,当发生服务器宕机等不可预料因素时,Redis会将符合条件的数据进行持久化,在重启时恢复数据。RDB 和 AOF 是 Redis 内部的两种数据持久化策略,这是两种不同的持久化策略,一种是基于内存快照,一种是基于操作日志

RDB持久化策略(基于内存快照)

RDB(Redis DataBase)持久化策略就是在符合一定条件下将内存所有数据持久化到磁盘中dump.rdb文件中。RDB策略是redis默认持久化策略。也叫快照策略。

什么是快照策略,RDB持久化是指在某一段时间内将该内存下所有的数据存储为文件,当服务器丢失时,自动恢复到最新的一份RDB文件,简单点说就是相当于每隔一段时间就将Redis的文件
做一次备份,当然要满足一定的要求 RDB持久化是Redis默认的持久化机制

在安装完Redis的目录下有个config文件

redis 中的db概念 redis中db是什么意思,redis 中的db概念 redis中db是什么意思_java_17,第17张

在该文件下我们可以找到这样一段话

redis 中的db概念 redis中db是什么意思,redis 中的db概念 redis中db是什么意思_redis 中的db概念_18,第18张

简单翻译一下就是

将DB保存到磁盘上:
在下面的例子中行为将保存DB
900秒后(15分钟)如果至少1键改变了
300秒(5分钟)如果至少10键改变
60秒后如果至少10000键改变

也就是说:
当数据在15分钟内改变了一个key,就会执行持久化机制
如果数据在5分钟内有10个key改变,就会执行持久化机制
如果数据在1分钟内有10000key改变,就会执行持久化机制

而我们持久化完的数据在哪里显示呢?

在该文件下面也有进行说明

redis 中的db概念 redis中db是什么意思,redis 中的db概念 redis中db是什么意思_redis 中的db概念_19,第19张

简单翻译下

要将数据库转储到何处的文件名

于是我们就可以在Redis的安装目录下找到这个文件

redis 中的db概念 redis中db是什么意思,redis 中的db概念 redis中db是什么意思_redis_20,第20张

关于RDB持久化机制

RDB的持久化机制,我们可以在配置文件中修改持久化时间,但一般不建议修改,因为在Redis达到一定数据量时,频繁的进行RDB的持久化机制便是一个非常浪费性能的事。RDB的持久机制
不高,便意味可能RDB持久化会导致丢失一定的数据。以快的持久化时间来说,相当于我们还是有60秒的空档期。而这可以靠另一个持久化机制来解决。

AOF持久化策略(基于操作日志)

AOF(append only file)策略,是基于操作日志实现的
它的特点持久化的频率非常高了,默认每秒持久化1次。每一秒内将最新的写入与删除的命令进行持久化。

AOF的持久化机制和RDB的持久化机制完全不同,AOF是基于日志文件操作的,简单点说就是RDB会将数据进行备份,而AOF备份的是操作 , 就是说,AOF将你所有的写入和删除操作进行备份,当服务器宕机时,可以通过备份的操作还原数据。

在配置文件中有这么一小段

redis 中的db概念 redis中db是什么意思,redis 中的db概念 redis中db是什么意思_数据库_21,第21张

简单翻译下

可以同时启用AOF和RDB持久性,没有问题。如果在启动时启用了AOF,那么Redis将加载AOF,即具有更好持久性保证的文件

开启AOF机制

redis 中的db概念 redis中db是什么意思,redis 中的db概念 redis中db是什么意思_redis_22,第22张

AOF持久化选择

redis 中的db概念 redis中db是什么意思,redis 中的db概念 redis中db是什么意思_java_23,第23张

简单翻译下

默认设置是“每隔一秒”,因为这通常是正确的折衷
速度和数据安全。这取决于你是否能慢下来
“no”将允许操作系统在何时刷新输出缓冲区
为了更好的表现(但是如果你能接受一些数据丢失更多考虑的是快照的默认RDB持久性模式),或者相反,使用“always”,虽然很慢,但是更安全。

这里指的是AOF提供持久化的频率

redis 中的db概念 redis中db是什么意思,redis 中的db概念 redis中db是什么意思_持久化_24,第24张

always:指每次修改都进行持久化操作,效率是最低的,但也是最安全的。

everysec:指每秒持久化一次,默认使用

no:指的是不进行持久化,效率最高

AOF的重写机制

当AOF开启时每秒的操作都会进行持久化,这样会导致日志文件的过大

于是AOF就有了重写机制,同样在配置文件下

redis 中的db概念 redis中db是什么意思,redis 中的db概念 redis中db是什么意思_java_25,第25张

简单翻译下

这个基本大小与当前大小进行比较。如果当前大小大于指定的百分比,将触发重写。您需要为要重写的AOF文件指定一个最小的大小

默认当日志文件大小超过内存数据100%时触发重写
当日志文件达到64M时也触发重写

关于AOF持久化机制

AOF策略的优点是显而易见的, 每秒持久化,具有更高的数据安全,如果服务器崩溃只会丢1秒内的数据,但缺点也是一样明显:由于持久化频率高,Redis的性能会变低。

值得注意的是AOF和RDB同时开启,默认使用AOF恢复数据,
因为AOF是秒级以内的容错。

关于两者的选用
官方建议

通常,如果你要想提供很高的数据保障性,那么建议你同时使用两种持久化方式。
如果你可以接受灾难带来的几分钟的数据丢失,那么你可以仅使用RDB。很多用户仅使用了AOF,但是我们建议,既然RDB可以时不时的给数据做个完整的快照,并且提供更快的重启,所以最好还是也使用RDB。
因此,我们希望可以在未来(长远计划)统一AOF和RDB成一种持久化模式。

最后

关于Redis就讲到这里了



https://www.xamrdz.com/database/6ej1921952.html

相关文章: