Redis:基础

简介

Redis 是一种运行在内存中数据结构存储,可用作 数据库 缓存 消息中间件。Redis 是键值型数据库。

特点

  • 支持数据的持久化,可将内存中的数据保存在磁盘中,重启后可再次加载使用;
  • 是基于内存的,因此读写性能极高,其读写速度约是关系型数据库的几倍至几十倍。其读的速度是十一万次每秒,写的速度是八万次每秒;
  • 丰富的数据类型;
  • 所有的操作都是原子性的,且支持流水线(pipline)技术;
  • 丰富的特性,支持 publish / subscribe 通知 key 过期等特性。

数据类型

  1. String:字符串,二进制安全,可以接受任何格式的数据,例如 jpeg 图像数据或者 json 对象描述信息等。数据长度是 512M;
  2. List:按照插入顺序排序的字符串链表,类似 Java 中的 LinkedList;
  3. Set:无序的字符串集合,类型 Java 中的 HashSet;
  4. Sorted Set:字符串集合,和 Redis Sets 类似,区别是 Sorted Sets 中的每一个成员都有一个分数 (score)与之关联,通过分数的大小对成员进行排序,虽然 Sorted Sets 成员必须是唯一的,但是分数可以重复;
  5. Hash:类似 Java 中的 HashMap,键值都是字符串;
  6. Bit array (or simply bitmaps):位图,官方解释是 it is possible, using special commands, to handle String values like an array of bits: you can set and clear individual bits, count all the bits set to 1, find the first set or unset bit, and so forth.
  7. HyperLogLog:是一个概率数据结构,用于估计集合的基数,官方解释是 this is a probabilistic data structure which is used in order to estimate the cardinality of a set.
  8. Stream:流,官方解释是 append-only collections of map-like entries that provide an abstract log data type.

前五种比较常用,后面两种主要用于海量数据计算,最后一种用于消息队列。

数据持久化

  • RDB 持久化:在指定的时间间隔内将内存中的数据集快照写入磁盘;
  • AOF 持久化:以日志的形式记录服务器所处理的每一个写操作(append only file),Redis 服务器启动之初会以读取该日志文件构建数据库;

Redis 可以采用上面任意一种,也可以同时采用两种,也可以禁用持久化机制。

RDB 优点

  • 数据的备份和恢复非常方便,因为一个数据库只有一个持久化文件;
  • 性能最大化。对于 Redis 的服务进程而言,在开始持久化时,它唯一需要做的只是 fork 出子进程,之后再由子进程完成这些持久化的工作,这样就可以极大的避免服务进程执行 IO 操作了;
  • 相比于 AOF 机制,如果数据集很大,RDB 的启动效率会更高。

RDB 缺点

  • 系统一旦在定时持久化之前出现宕机现象,此前没有来得及写入磁盘的数据都将丢失;
  • 由于 RDB 是通过 fork 子进程来协助完成数据持久化工作的,因此,如果当数据集较大时,可能会导致整个服务器停止服务几百毫秒,甚至是1秒钟。

AOF 优点

  • 该机制可以带来更高的数据安全性,即数据持久性。Redis 中提供了3种同步策略,即每秒同步、每修改同步和不同步;
  • 对日志文件的写入操作采用的是 append 模式,因此在写入过程中即使出现宕机现象,也不会破坏日志文件中已经存在的内容;
  • 如果日志过大,Redis 可以自动启用 rewrite 机制迅速瘦身(也可手动触发aof的rewrite操作,命令:bgrewriteaof)
  • AOF日志格式清晰、易于理解,很容易用 AOF 日志文件完成数据的重建

AOF 缺点

  • 对于相同数量的数据集而言,AOF 文件通常要大于 RDB 文件;
  • 根据同步策略的不同,AOF 在运行效率上往往会慢于 RDB。总之,每秒同步策略的效率是比较高的,同步禁用策略的效率和 RDB 一样高效。

参考:

Redis 官网文档 https://redis.io/topics/introduction

原文地址:https://www.cnblogs.com/colin220/p/14696662.html