加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

NoSQL数据库学习笔记之 初识Redis

发布时间:2020-12-13 13:49:13 所属栏目:百科 来源:网络整理
导读:Redis是一个开源的使用ANSI C编写的key-value数据库。和常见缓存系统Memcached类似,Redis的所有数据操作都在内存中完成,所以Redis的读写性能相当高。不同于MenCached,Redis不是一个缓存系统,而是一个独立的内存数据库系统。Redis实现了数据持久化,周期

Redis是一个开源的使用ANSI C编写的key-value数据库。和常见缓存系统Memcached类似,Redis的所有数据操作都在内存中完成,所以Redis的读写性能相当高。不同于MenCached,Redis不是一个缓存系统,而是一个独立的内存数据库系统。Redis实现了数据持久化,周期性地把数据写入磁盘或者把修改操作写入追加的记录文件。从2010年3月15日起,Redis的开发工作由VMware主持。

丰富的value类型

作为key-value型数据库,Redis也提供了key到value的映射关系。但不同于key-value型数据库,Redis中的value除了常规的数值或字符串,还可以是以下形式之一:

  • Lists(列表)
  • Sets(集合)
  • Sorted sets(有序集合)
  • Hashes(哈希表)
value的类型决定了其支持的操作,Redis支持诸如列表的push/pop、集合或有序集合的交并差等高级原子操作。这些操作在Redis内部实现显然比在应用层实现具有更高的性能。

数据持久化

数据持久化是内存数据库的必备功能,Redis提供RDB快照和AOF操作日志记录两种方式且持久化机制很灵活。

1. RDB快照

RDB快照方式就是将当前整个数据集按某个时间点进行一次保存,将所有数据写入RDB文件,然后通过fsync将文件持久化到磁盘。Redis借助了fork命令的copy on write机制。在生成快照时,Redis首先fork出一个子进程,然后在子进程中遍历所有的数据,将数据写成为文件。Redis提供用户配置接口,用以决定RDB快照生成的时机,比如10分钟内有100次或一小时内有1000次写入则生成RDB快照,也可以多个规则一起实施。RDB文件不仅用于恢复数据库,也被用于实现Redis主从同步。
不过,我们很容易发现,RDB有一个很大的不足。那就是当两次RDB快照生成之间,如果系统停机,那么这个时间段的修改将丢失。为此,Redis引入了另一种持久化机制:AOF.

2. AOF

AOF是Append Only File的缩写,顾名思义,它是一个追加写入的一个日志文件。AOF操作日志是最简单的日志记录,它记录Redis从第一次启动到当前时刻的所有写操作,生成一份完整的操作日志。从安全性方面讲,AOF自然比RDB更为安全,但是AOF存在两个问题。第一,AOF文件会越变越大;第二,写性能受损。对于第一个问题,Redis提供了AOF Rewrite功能,其功能就是重新生成一份AOF文件,新的AOF文件中一条记录的操作只有一次,而不像老文件那样可能记录了对同一个值的多次操作。对于第二个问题,这是无法避免的。不过,Redis提供了三种不同的配置类控制AOF日志写入磁盘的次数,分别是:
  • appendfsync always:每次写日志都调用fsync同步操作日志到硬盘;
  • appendfsync everysec:每秒调用一次fsync同步操作日志到硬盘;
  • appendfsync no:不主动调用fsync.
在开启AOF并设置appendfsync always时,Redis提供的数据安全性并不比传统数据库低。

读写性能

作为内存数据库,Redis的读写性能自然较传统硬盘数据库优越不少。另外,由于操作日志等原因,Redis的读写操作有较大性能差异。

提供的API语言

Redis对常用编程语言均提供了API,包括: C、C++、Java、Javascript、C#、Objective-C、Perl、PHP、Python、Ruby、Scala、Tcl、Erlang等。

应用

使用Redis的企业/应用有:新浪微博、GitHub、Engine Yard等。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读