Redis高级实用特性(持久化机制、发布订阅消息、虚拟内存的使用)
持久化机制
Redis是一个支持持久化的内存数据库,也就是说redis需要经常将内存中的数据同步到硬盘来保证持久化。
- snapshotting(快照)也是默认方式
快照是默认的持久化方式。这种方式是将内存中的数据以快照的方式写入到二进制文件中,默认的文件名为dump.rdb。可以通过配置设置自动做快照持久化的方式。我们可以配置redis在n秒内如果超过m个key被修改则自动做快照。
save 900 1# 900秒内1个key被修改则自动快照
save 300 10
save 600 10000
bin目录下有dump.rdb文件
cat dump//无法查看
2. Append-only file(缩写aof)的方式(更安全)
由于快照方式是在一定间隔时间做一次的,所以如果redis意外down掉的话,就会丢失最后一次快照后的所有修改。
aof比快照方式有更好的持久性,是由于在使用aof时,redis会将每一个收到的写命令通过write函数追加到文件中,当redis重启时会通过重新执行文件中保存的写命令来在内存中重建整个数据库的内容。
当然由于OS会在内核中缓存write做的修改,所以可能不是立即写到磁盘上。这样aof方式的持久化也还是有可能会丢失部分修改。
可以通过配置文件告诉redis我们想要通过sync函数强制OS写入到磁盘的时机
appendonly yes//启用aof持久化方式
#appendsync always// 收到写命令立即写入磁盘,最慢,但是保证完全的持久化
appendsync everysec//每秒钟写入磁盘一次,在性能和持久化方面做了最好的折中
#appendsync no//完全依赖os,性能最好,持久化没保证
修改完redis.conf后,发现,如果改变key,bin目录下有appendonly.aof文件,记录操作的改变
发布订阅消息
发布订阅(pub/sub)是一种消息通信模式,主要的目的是解除消息发布者和消息订阅者之间的耦合,Redis作为一个pub/sub的server,在订阅者和发布者之间起到了消息路由的功能。订阅者可以通过subscribe和psubscribe命令向redis server订阅自己感兴趣的消息类型,redis将信息类型称为通道(channel)。当发布者通过publish命令向redis server发送特定类型的信息时,订阅该信息类型的全部client都会收到此消息。
虚拟内存的使用
(下面的参数在redis2.4之后不推荐使用了)
vm-enabled yes #开启vm功能
vm-swap-file# 交换出来的value保存的文件路径
vm-max-memory 1000000# redis使用的最大内存上限
vm-page-size 32# 每个页面的大小32字节
vm-ppages 134217728# 最多使用多少页面
vm-max-threads 4# 用于执行value对象换入的工作线程数量
下一篇: PHP手册下载