Redis学习第八课:Redis高级实用特性(二)

Redis高级实用特性html

四、持久化机制redis

Redis是一个支持持久化的内存数据库,也就是说Redis须要常常将内存中的数据同步到硬盘来保证持久化。
Redis支持两种持久化方式:
(1)、snapshotting(快照) 也是默认方式。
   快照是默认的持久化方式,这种方式是将内存中数据以快照的方式写入到二进制文件中,默认的文件名为dump.rdb。能够经过配置设置自动作快照持久化的方式。咱们能够配置redis在n秒内若是超过m个key的修改就自动作快照。数据库

修改配置文件redis.conf:
save 900 1 #900秒内若是超过1个key被修改,则发起快照保存。ubuntu


(2)、Append-only file(缩写aof)的方式。缓存

因为快照方式是在必定间隔时间作一次的,因此若是redis意外down掉的话,就会丢失最后一次快照后的全部修改。  aof比快照方式有更好的持久化性,是因为在使用aof时,redis会将每一个收到的写命令都经过write函数追加到文件中,当redis重启时会经过从新执行文件中保存的写命令来在内存中重建整个数据库的内容。  固然因为OS会在内核中缓存write作的修改,因此可能不是当即写到磁盘上,这样aof方式的持久化也仍是有可能丢失部分修改。能够经过配置文件告诉redis咱们想要经过fsync函数强制OS写入到磁盘的时机。app

appendonly yes //启用aof持久化方式 函数

#appendfsync always //收到写命令就当即写入磁盘,最慢,可是保证彻底的持久化 性能

appendfsync everysec //每秒钟写入磁盘一次,在性能和持久化方面作了很好的折中 ui

#appendfsync no //彻底依赖OS,性能最好,持久化没保证spa

修改配置文件redis.conf, 再在redis客户端进行写入操做,能够看到redis所在的bin目录下存在两个文件,appendonly.aof存的是操做命令,dump.rdb存的是二进制数据。

root@ubuntu:/usr/local/redis/bin# ll
total 12720
drwxr-xr-x 2 root root    4096 2015-06-18 01:25 ./
drwxr-xr-x 4 root root    4096 2015-06-18 01:21 ../
-rw-r--r-- 1 root root      56 2015-06-18 01:26 appendonly.aof
-rw-r--r-- 1 root root     180 2015-06-15 02:25 dump.rdb
-rwxr-xr-x 1 anny anny     566 2015-06-04 02:35 mkreleasehdr.sh*
-rwxr-xr-x 1 anny anny 3759902 2015-06-14 20:09 redis-benchmark*
-rwxr-xr-x 1 anny anny   20295 2015-06-14 20:09 redis-check-aof*
-rwxr-xr-x 1 anny anny   40868 2015-06-14 20:09 redis-check-dump*
-rwxr-xr-x 1 anny anny 3853871 2015-06-14 20:09 redis-cli*
-rwxr-xr-x 1 anny anny 5325229 2015-06-14 20:09 redis-server*


五、发布订阅消息

  发布订阅(pub/sub)是一种消息通讯模式,主要的目的是解除消息发布者和消息订阅者之间的耦合,Redis做为一个pub/sub的server,在订阅者和发布者之间起到了消息路由的功能。订阅者能够经过subscribe和psubscribe命令向Redis Server订阅本身感兴趣的消息类型,redis将信息类型称为通道(channel)。当发布者经过publish命令向redis server发送特定类型的信息时,订阅该信息类型的所有client都会收到此消息。

Redis 发布订阅(pub/sub)是一种消息通讯模式:发送者(pub)发送消息,订阅者(sub)接收消息。

Redis 客户端能够订阅任意数量的频道。

下图展现了频道 channel1 , 以及订阅这个频道的三个客户端 —— client2 、 client5 和 client1 之间的关系:

pubsub1

当有新消息经过 PUBLISH 命令发送给频道 channel1 时, 这个消息就会被发送给订阅它的三个客户端:

pubsub2

Redis中发布/订阅实验:

开启三个终端,

在第一个终端中输入以下命令,经过subscribe订阅了tv1和tv2两个频道:

anny@ubuntu:/usr/local/redis/bin$ ./redis-cli -a anny
127.0.0.1:6379> subscribe tv1 tv2
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "tv1"
3) (integer) 1
1) "subscribe"
2) "tv2"
3) (integer) 2

在第二个终端中输入以下命令,经过subscribe 订阅了tv1频道:

 anny@ubuntu:/usr/local/redis/bin$ ./redis-cli -a anny
127.0.0.1:6379> subscribe tv1
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "tv1"
3) (integer) 1

在第三个终端中输入以下命令,经过发布消息:

root@ubuntu:/usr/local/redis/bin# ./redis-cli -a anny
127.0.0.1:6379> publish tv1 test
(integer) 2
127.0.0.1:6379> publish tv2 abc
(integer) 1

能够看到第一个终端和第二个终端同时接收到第三个终端发布的消息:

第一个终端收到消息以下:

1) "message"
2) "tv1"
3) "test"
1) "message"
2) "tv2"
3) "abc"

第二个终端收到消息以下:

1) "message"
2) "tv1"
3) "test"

下表列出了 redis 发布订阅经常使用命令:

序号 命令及描述
1 PSUBSCRIBE pattern [pattern ...] 订阅一个或多个符合给定模式的频道。
2 PUBSUB subcommand [argument [argument ...]] 查看订阅与发布系统状态。
3 PUBLISH channel message 将信息发送到指定的频道。
4 PUNSUBSCRIBE [pattern [pattern ...]] 退订全部给定模式的频道。
5 SUBSCRIBE channel [channel ...] 订阅给定的一个或多个频道的信息。
6 UNSUBSCRIBE [channel [channel ...]] 指退订给定的频道。


六、虚拟内存的使用

 redis的虚拟内存与操做系统的虚拟内存不是一回事,可是思路和目的都是相同的。就是暂时把不常常访问的数据从内存交换到磁盘中,从而腾出宝贵的内存空间用于其余须要访问的数据。尤为是对于redis这样的内存数据库,内存老是不够用的。除了能够将数据分割到多个redis server外,另外可以提升数据库容量的办法就是使用虚拟内存把那些不常常访问的数据交换到磁盘上。

下面关于VM相关的配置项(redis.conf):

vm-enabled yes #开启vm功能

vm-swap-file /tmp/redis.swap #交换出来的value保存的文件路径

vm-max-memory 1000000 #redis使用的最大内存上限

vm-page-size 32 #每一个页面的大小32字节

vm-pages 134217728 #最多使用多少页面

vm-max-threads 4 #用于执行value对象换入缓存的工做线程数量

修改配置文件redis.conf后,杀掉redis-server进程,重启redis-server。
会提示在redis.conf文件中增长一个配置项 really-use-vm yes

注:我目前实验的Redis 3.0.2版本不存关于虚拟内存的配置项,手工加入后,启动Redis-server会报错。

 

W3C School Redis基础教程: http://www.w3cschool.cc/redis/redis-backup.html

相关文章
相关标签/搜索