您好,欢迎来到微智科技网。
搜索
您的当前位置:首页Redis知识小结

Redis知识小结

来源:微智科技网

Redis知识小结

Redis 内存型数据库,是单进程单线程服务,通过 epoll、select 等实现了 IO 多路复用。

Redis 数据类型

Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。

string

memcache也是内存数据库,但是Memcached存储单个item最大数据是在1MB内,如果数据超过1M,存取set和get是都是返回false,可能引起性能的问题。
注意: redis一个键最大能存储512MB。

Hash(哈希)

Redis hash 是一个 string 类型的 field 和 value 的映射表,hash 特别适合用于存储对象。
1、使用 MurmurHash3 Hash 算法,针对规律性强的字符串有更好分布性。
2、新节点插入到表头而非表尾,因为缓存一定程度上会存在,「后加入的缓存会比先前加入的缓存更容易被访问」的特点。
3、渐进式 rehash。Redis 数据库本身是个巨大的 Hash 表,每次 rehash 要操作几百上 千万的 key,渐进式 rehash 则是其中必不可少的保障。 rehash 的方式是维护两张表和索引,需要 rehash 时将 rehashIndex 置为 0,然后每次除 insert 操作外,都会将 oldTable 的 rehashIndex 中数据转移到 newTable 中,直到 rehashIndex == oldTable.length() - 1,再将 rehashIndex 置为 -1,rehash 完成。

每个 hash 可以存储 2 32 2^{32} 232 -1 键值对(40多亿)

List(列表)

Redis 列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。

跳跃表(skiplist)通过给链表分层,实现了平均 O(logN),最坏 O(N) 的时间复杂度。Redis 使用该数据结构实现了 Sorted Set 数据类型。另外 Sorted Set 中还需要使用 HashTable 来实现 O(1) 的查询。

列表最多可存储 2 32 2^{32} 232 - 1 元素 (4294967295, 每个列表可存储40多亿)。

Set(集合)

Redis的Set是string类型的无序集合。整数集合intset
,即只保存整数的集合。Redis 使用该数据结构实现了 Set。

集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。

集合中最大的成员数为 2 32 2^{32} 232 - 1(4294967295, 每个集合可存储40多亿个成员)。

zset(sorted set:有序集合)

Redis zset 和 set 一样也是string类型元素的集合,且不允许重复的成员。
不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。

zset的成员是唯一的,但分数(score)却可以重复。

持久化

不论是内存型的数据库还是关系型数据库,宕机、停电后数据无法恢复都是不可接受的。Redis 有两种备份数据的方式:

AOF
即 Append-Only-File,当开启备份时,Redis 会创建出一个默认名称为 appendonly.aof 的文件。并将内存中所有数据以命令的形式写入文件中,后续执行新的操作数据的命令时,会放入缓冲区中定时写入文件(appendfsync 不为 always 时)。 在 redis.conf 中用以下参数配置 AOF 策略:
AOF 模式是直接将命令写入文件中,所以在恢复数据时,Redis 会逐条执行命令来恢复数据。所以 AOF 模式恢复数据的效率并不高,而且当重复对一个 key 进行操作时,也需要执行所有操作命令。 针对同一数据重复操作的问题,Redis 提供了 AOF 重写的功能,即丢弃原有的 appendonly.aof 文件,重新将内存中的数据作为命令写入文件中。

RDB

即 Redis DataBase,此持久化模式默认开启。 开始备份时,Redis 会 fork 出一个子进程(bgsave),创建默认名为 dump.rdb 的二进制文件,逐个对内存中的数据进行备份。每次备份时都会抛弃原有的 RDB 文件,重新将数据全量备份。 对于备份的时机,在 redis.conf 有以下选项来触发备份:

save 900 1		900 秒内有 1 次变动
save 300 10		300 秒内有 10 次变动
save 60 10000	60 秒内有 10000 次变动

RDB 由于体积和天然的指令压缩能力,恢复数据速度要大大快于 AOF。但是因为每次只能全量备份,资源消耗比 AOF 大,不如 AOF 灵活。并且因为备份时机的不确定性,数据完整不如 AOF。

RDB-AOF
Redis 在 4.0 之后提出了 RDB-AOF 混合模式持久化,可以在 redis.conf 中通过 aof-use-rdb-preamble 选项开启。 此模式下,全量备份、重写 AOF 时会使用 RDB 格式,随后执行命令还是以 AOF 的格式追加到文件中。

这样一来,恢复数据时性能比单纯 AOF 强,全量备份比 AOF 快,备份体积比 AOF 小,部分备份性能比 RDB 高。

注意: 目前最新版本redis为5.0.3,截止至2019年3月1日

部分内容转载自:

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- 7swz.com 版权所有 赣ICP备2024042798号-8

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务