Redis的特性
目录
(1)相关特性:
多数据库
一个redis的实例可以包括多个数据库,客户端可以指定链接哪个数据库。一个redis最多可以提供16个数据库,默认是0-15,客户端默认是连接第0个数据库。可以通过select来具体连接哪个数据库。
1,使用select切换数据库:select
例子:选择1号数据库:127.0.0.1:6379> select 1。原本默认在0号数据库操作,在转成1号数据库的时候,则keys的值为空,没有。切换回去0号数据库的时候,则有显示keys的值。
127.0.0.1:6379> select 1
OK
127.0.0.1:6379[1]> keys *
(empty list or set)
127.0.0.1:6379[1]> select 0
OK
127.0.0.1:6379> keys *
1) "myb1"
2) "mya1"
3) "mya2"
4) "myhash"
5) "mylist2"
6) "num2"
7) "mylist3"
8) "mya3"
9) "name"
10) "myb3"
11) "mylist"
12) "num3"
13) "imooc"
14) "num5"
15) "mylist4"
16) "myb2"
17) "newnum"
18) "myset"
19) "mysort"
2,移动key到任意数据库:move
将某个key移动到另外一个数据库里面的时候,使用move命令。
移动key以后,类型不变。
127.0.0.1:6379> move myset 1
(integer) 1
127.0.0.1:6379> select 1
OK
127.0.0.1:6379[1]> keys *
1) "myset"
127.0.0.1:6379[1]> type myset
set
支持事务
redis提供事务机制。multi exec discard。redis如果某个命令执行失败,后边的命令依旧会执行。
multi :开启事务。(类似begin session)
exec :相当于提交,commit
discard:相当于回滚。rollback
如果客户端和服务器断开,所执行的语句将不会被提交。如果客户端执行后网络中断,但是所有的命令都会被服务器执行。
执行的命令都会被存储到队列中。
开启事务,没有执行的时候,num的值还是原来的值。只有提交了事务后,才会执行语句。
127.0.0.1:6379> multi
OK
127.0.0.1:6379> incr num
QUEUED
127.0.0.1:6379> incr num
QUEUED
127.0.0.1:6379> get num
QUEUED
127.0.0.1:6379> exec
1) (integer) 1
2) (integer) 2
3) "2"
127.0.0.1:6379> get num
"2"
使用回滚,值是不变的。
127.0.0.1:6379> set user jerry
OK
127.0.0.1:6379> get user
"jerry"
127.0.0.1:6379> multi
OK
127.0.0.1:6379> set user tom
QUEUED
127.0.0.1:6379> discard
OK
127.0.0.1:6379> get user
"jerry"
Redis的持久化
若想重启redis,但是数据不丢失,那么只能把数据从内存上同步硬盘上,这个过程称为称为持久化操作。
redis有两种持久化方式:RDB方式、AOF方式。
区别 |
Redis的持久化RDB方式 |
Redis的持久化AOF方式 |
优势 |
(1)一旦采用该方式,那么整个Redis数据库将只包含一个文件,这对于文件备份而言是非常完美的。比如,可能打算每个小时归档一次最近24小时的数据,同时还要每天归档一次最近30天的数据。通过这样的备份策略,一旦系统出现灾难性故障,我们可以非常容易的进行恢复。 (2)对于灾难恢复而言,RDB是非常不错的选择。因为我们可以非常轻松的将一个单独的文件压缩后再转移到其它存储介质上。 (3)性能最大化。对于Redis的服务进程而言,在开始持久化时,它唯一需要做的只是fork出子进程,之后再由子进程完成这些持久化的工作,这样就可以极大的避免服务进程执行IO操作了。 (4) 相比于AOF机制,如果数据集很大,RDB的启动效率会更高。 |
(1)该机制可以带来更高的数据安全性,即数据持久性。Redis中提供了3中同步策略,即每秒同步、每修改同步和不同步。事实上,每秒同步也是异步完成的,其效率也是非常高的,所差的是一旦系统出现宕机现象,那么这一秒钟之内修改的数据将会丢失。而每修改同步,我们可以将其视为同步持久化,即每次发生的数据变化都会被立即记录到磁盘中。可以预见,这种方式在效率上是最低的。至于无同步,无需多言,我想大家都能正确的理解它。 (2)由于该机制对日志文件的写入操作采用的是append模式,因此在写入过程中即使出现宕机现象,也不会破坏日志文件中已经存在的内容。然而如果我们本次操作只是写入了一半数据就出现了系统崩溃问题,不用担心,在Redis下一次启动之前,我们可以通过redis-check-aof工具来帮助我们解决数据一致性的问题。 (3) 如果日志过大,Redis可以自动启用rewrite机制。即Redis以append模式不断的将修改数据写入到老的磁盘文件中,同时Redis还会创建一个新的文件用于记录此期间有哪些修改命令被执行。因此在进行rewrite切换时可以更好的保证数据安全性。 (4)AOF包含一个格式清晰、易于理解的日志文件用于记录所有的修改操作。事实上,我们也可以通过该文件完成数据的重建。 |
劣势 |
(1)如果你想保证数据的高可用性,即最大限度的避免数据丢失,那么RDB将不是一个很好的选择。因为系统一旦在定时持久化之前出现宕机现象,此前没有来得及写入磁盘的数据都将丢失。 (2) 由于RDB是通过fork子进程来协助完成数据持久化工作的,因此,如果当数据集较大时,可能会导致整个服务器停止服务几百毫秒,甚至是1秒钟 |
(1)对于相同数量的数据集而言,AOF文件通常要大于RDB文件。RDB 在恢复大数据集时的速度比 AOF 的恢复速度要快。 (2) 根据同步策略的不同,AOF在运行效率上往往会慢于RDB。总之,每秒同步策略的效率是比较高的,同步禁用策略的效率和RDB一样高效。
|
备注 | 二者选择的标准,就是看系统是愿意牺牲一些性能,换取更高的缓存一致性(aof),还是愿意写操作频繁的时候,不启用备份来换取更高的性能,待手动运行save的时候,再做备份(rdb)。rdb这个就更有些 eventually consistent的意思了。 |
1,持久化使用常用方式:RDB方式,默认支持。在指定时间内,将内存数据和快照写入到硬盘上。比如指定多少秒,30则写入磁盘一次。
2,AOF方式,将日志形式记录服务器处理的每个操作。启动会读取该文件,会重新构建数据库,保证数据库数据完整。
3,无持久化。通过配置。
4,同时使用RDB和AOF的方式。
(1)RDB方式
Redis会将数据集的快照dump到dump.rdb文件中。此外,我们也可以通过配置文件来修改Redis服务器dump快照的频率,在打开6379.conf文件之后,我们搜索save,可以看到下面的配置信息:
save 900 1 #在900秒(15分钟)之后,如果至少有1个key发生变化,则dump内存快照。
save 300 10 #在300秒(5分钟)之后,如果至少有10个key发生变化,则dump内存快照。
save 60 10000 #在60秒(1分钟)之后,如果至少有10000个key发生变化,则dump内存快照。
在配置文件中可以看到文件名称、文件路径。
返回可以看到rdb的配置。
(2)AOF方式
把下边的no变为yes。
显示第一行,always。
在Redis的配置文件中存在三种同步方式,它们分别是:
appendfsync always #每次有数据修改发生时都会写入AOF文件。
appendfsync everysec #每秒钟同步一次,该策略为AOF的缺省策略。
appendfsync no #从不同步。高效但是数据不会被持久化。
重启redis即可,对于每次操作,都会记录文件中。
flushall 清空数据库。在文件目录下,可以看到多一个aof文件日志。
http://blog.csdn.net/jackpk/article/details/30073097
http://www.jb51.net/article/65264.htm