Redis特性

Redis特性

一、多数据库

1.概念

    一个Redis实例可以包括多个数据库,客户端可以指定连接某个Redis实例的指定数据库(与mysql多个数据库类似)
    一个Redis实例最多可以提供16个数据库,下标从0到15,客户端默认连接第0号数据库,可以通过select 0-15命令选择连接其他数据库。

二、服务器命令

1)move newkey 1:将当前库的一个key移动(剪切)到1号库中
2)ping:返回pong则表示连接存活,否则返回错误信息
3)echo:在命令行打印一些内容
4)select 0-15:选择数据库
5)quit:退出连接
6)dbsize:返回当前数据库中key的数目
7)info:获取服务器的信息和统计
8)flushall:删除所有数据库中的所有key及数据

三、消息订阅与发布

1)subscribe channel:订阅碰到,如:subscribe mychan,订阅mychan这个频道
2)psubscribe channel*:批量订阅频道,如:psubscribe s*,订阅以's'开头的频道
3)publish channel content:在指定的频道发布消息,如:publish mychan today is a new day

四、Redis事务

1.概念

    和众多其他数据库一样,Redis作为NoSQL数据库也同样提供了事务机制。在Redis中,MULTI/EXEC/DISCARD这三个命令是我们实现事务的基石。

2.Redis事务特征

(1)在事务中所有的命令都会被串行化的顺序执行,事务执行期间Redis不会再为其他客户端的请求提供任何服务,保证了事务中所有命令被原子地执行。
(2)和关系型数据库中的事务相比,在Redis事务中如果有一条命令执行失败,其后的命令仍然会被继续执行
(3)可以通过MULTI命令开启一个事务,相当于关系型数据库的"BEGIN TRANSACTION"语句。在该语句之后执行的命令都将视为事务之内的操作,最后通过执行EXEC/DISCARD命令来提交/回滚该事务内的所有操作。这两个Redis命令相当于"COMMIT/ROLLBACK"语句。
(4)在事务开启之前,如果客户端与服务器之间出现通讯故障导致网络断开,其后所有待执行的操作都不会被服务器所执行。但若网络中断时间是发生在客户端执行EXEC命令之后的,该事务所与命令都会被服务器执行。
(5)当使用Append-Only模式时,Redis或通过调用系统函数write将该事务内的所有操作在本次调用中全部写入磁盘。然而如果在写入的过程中出现系统崩溃,如电源故障导致的宕机,那么此时也许只有部分数据被写入磁盘,而另外一部分数据却已丢失。Redis服务器会在重启时执行一系列必要的一致性检测,一旦发现类似问题,将立即退出并给出相应错误信息提示。此时应充分利用Redis工具包中提供的redis-check-aof工具,帮助定位数据一致性的错误,并将写入的部分数据进行回滚。然后再重启Redis服务器。 

3.命令解释

1)multi:开启事务,用于标记事务的开始,其后执行的命令将被存入命令队列,直至执行exec命令
2)exec:提交事务,类似"commit"
3)discard:回滚事务,类似"rollback"

4.尝试

(1)提交事务:注意错误的命令并没有被执行,但错误命令后的正确命令被执行了

(2)回滚事务:
*Redis Incr 命令将 key 中储存的数字值增一,如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 INCR 操作。
*Redis Incrby 命令将 key 中储存的数字加上指定的增量值,如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 INCR 操作。

五、Redis的持久化

1.概述

    Redis的高性能是由于其将所有数据都存储到了内存中,为了是Redis在重启之后仍能保持数据不丢失,需要将数据从内容中同步到硬盘中,即数据的持久化。
    Redis支持两种方式的持久化,一种是RDB方式,另一种是AOF方式。可以单独使用其中一种或结合使用

2.RDB持久化(默认支持,无需配置)

    该方式机制是在指定时间间隔内湛江内存中的数据集快照写入磁盘。
优势:
(1)该方式使整个Redis数据库之包含一个文件,易于备份和灾难后恢复数据。
(2)性能最大化。对于Redis的服务进程而言,在开始RDB持久化时,只需要fork(分叉)出子进程由子进程完成持久化。这样可以极大的避免服务进程执行IO操作。
(3)相比AOF机制,若数据集很大,RDB方式启动效率更高
劣势:
(1)不能很好地保证数据的高可用性,即不能最大限度地避免数据丢失。若系统在定时持久化数据之前出现宕机,未写入磁盘的数据都将丢失。
(2)由于RDB是通过fork子进程来协助完成数据的持久化操作,当数据集较大时,可能导致服务器停止服务几百毫秒到一秒。

3.AOF持久化

    该方式机制将以日志的形式记录服务器所处理的每一个写操作,在Redis服务器启动之初会赌气该文件来重构数据库,以保证启动后数据库中的数据是完整的。
优势:
(1)该方式可以带来更高的数据安全性,即数据持久性。Redis中提供了三种同步策略:每秒同步、每修改同步和不同步。事实上每秒同步也是异步完成的,效率也非常高,若系统出现宕机,则只会丢失这一秒内修改的数据。而每修改同步相当于同步持久化,即每次数据发生变化都会被立即记录到磁盘中(实际上一秒钟数据可以变化很多次)。效率比较低。
(2)该机制对日志文件的写入操作采用的是append模式,因此在写入过程中即使是出现宕机现象,也不会破坏日志文件中已存在的内容。若系统在写入未完成的状态下宕机,可以在Redis下一次启动前通过redis-check-aof工具来帮助解决数据一致性的问题。
(3)若日志过大,Redis可以自动启用rewrite机制。Reids以append模式不断地将修改数据写入到旧文件中同时创建一个新文件用于记录此期间有哪些修改命令被执行。所以在rewrite切换时可以保持数据的安全性。
(4)AOF日志文件可以由开发者重构以重构数据库。
劣势:
(1)对于相同数量的数据集而言,AOF文件通常大于RDB文件。
(2)根据同步策略的不同,AOF在运行效率上往往会比RDB慢。
总之,每秒同步策略的效率是比较高且有效的。

*两种方式的配置详细内容见Redis入门笔记中的pdf附件
更改配置文件后需要重启数据库使配置生效
posted @ 2018-08-28 21:00  zella1996  阅读(974)  评论(0编辑  收藏  举报