redis高级特性-安全性 主从复制 事务处理 持久化 发布订阅

05-09 18:40:28   来源:shikezhi   评论: 点击:

本文将介绍redis高级特性:redis安全,主从复制,事务处理,持久化机制,发布订阅模式,虚拟内存等。通过本文您了解并掌握redis的高级特性
redis高级应用:
1》安全性
设置客户端连接后进行任何其他指定前需要使用的密码。
在配置文件redis.conf文件中的内容#requirepass foobared,修改为如下
requirepass mypwdstring
 
重启redis
pkill redis-server
 
redis-server /usr/local/redis/redis.conf
redis-cli -a mypwdstring  //以密码方式登陆或者进入命令行使用auth mypwdstring登陆
 
 
警告:因为redis速度相当快,所以一台比较好的服务器下,一个外部的用户可以在一秒钟进行150k次的密码尝试,这意味着你需要指定非常强大的密码来防止暴力破解
 
 
2》主从复制
redis主从复制配置和使用都挺简单,通过主从复制可以允许多个slave server拥有和master server相同的数据库副本
 
redis主从复制特点:master可以拥有多个slave;多个slave可以连接同一个master外,还可以连接其他slave;主从复制不会阻塞master,在同步数据时,master可以继续处理client请求;提高系统伸缩性
 
redis主从复制过程:
a.slave与master建立连接,发送sync同步命令
b.master会启动一个后台进程,将数据库快照保存到文件中,同时master主进程会开始收集新的写命令并缓存
c.后台完成保存后,就将此文件发送给slave
d.slave将此文件保存到硬盘上
 
配置主从服务器:
配置slave服务器很简单,只需要在slave的配置文件中加入以下配置即可:
slaveof 192.168.1.1 6379 #指定master的ip和端口
masterauth masterpwd  #master主机密码
 
 
info  //查看redis各种参数值,如主从信息,连接状态等
 
 
 
3》事务处理
redis对事务的支持目前还比较简单。redis只能保证一个client发起的事务中的命令可以连续的执行,而中间不会插入其他client的命令。当一个client在一个连接中发出multi命令时,这个连接会进入一个事务上下文,该连接后续的命令不会立即执行,而是先放到一个队列中,当执行exec命令时,redis会顺序的执行队列中得所有命令。事务可以通过discard终止结束
 
注意:redis目前的事务还有很多不足,如果在事务过程中出现问题,以前已经执行的操作不能回滚。也就是无法实现整个事务的回滚。
 
 
乐观锁复杂事务控制
乐观锁:大多数是基于数据版本(version)的记录机制实现的。即为数据添加一个版本标识,在基于数据库表的版本解决方案中,一般是通过为数据表添加一个“version”字段来实现读取出数据时,将此版本号一同读出,之后更新时,对此版本号加1.此时,将提交数据的版本号与数据库表对应记录的当前版本号进行比对,如果提交的数据版本号大于数据库当前版本号,则予以更新,否则认为是过期数据。
 
 
 
4》持久化机制
redis是一个支持持久化的内存数据库,也就是说redis需要经常将内存中的数据同步到硬盘来保持持久化。
redis支持两种持久化方式:
1.snapshotting(快照)也是默认方式
快照是默认的持久化方式。这种方式是将内存中数据以快照的方式写入到二进制文件中,默认的文件名为dump.rdb.可以通过配置设置自动做快照持久化的方式。我们可以配置redis在n秒内如果超过m个key被修改就自动化快照。
如:redis.conf配置文件
save 900 1 #900秒内如果超过1个key被修改,则发起快照保存
save 300 10 #300秒内容如果超过10个key被修改,则发起快照保存
save 60 10000
 
 
 
2.append-only file(缩写aof)的方式
aof方式:由于快照方式是在一定时间间隔做一次的,所以如果redis意外down掉得话,就会丢失最后一次快照所有更改。
aof比快照方式有更好的持久性,是由于在使用aof时,redis会将每一个收到的写命令都通过write函数追加到文件中,当redis重启时会通过重新执行文件中保存的写命令来在内存中重建整个数据库的内容。
 
当然由于os会在内核中缓存write做的修改,所以可能不是立即写到磁盘上。这样aof方式的持久化还是有可能会丢失部分修改
可以通过配置文件告诉redis我们想要通过fsync函数强制os写入到磁盘的时机。
appendonly yes //启动aof持久化方式
#appendfsync always //收到写命令就立即写入磁盘,最慢,但是保证完全的持久化
appendfsync everysec //每秒钟写入磁盘一次,在性能和持久化方面做的很好的折中
#appendfsync no //完全依赖os,性能最好,持久化没保证
 
 
5》发布订阅消息
发布订阅(pub/sub)是一种消息通信模式,主要的目的是解除消息发布者和消息订阅者之间的耦合,redis作为一个pub/sub的server,在订阅者和发布者之间起到了消息路由的功能。订阅者可以通过subscribe和psubscribe命令向redis server订阅自己感兴趣的消息类型,redis将消息类型称为通道(channel).当发布者通过publish命令向redis server发送特定类型的信息时订阅该消息类型的全部client都会收到此消息。
 
 
6》虚拟内存的使用
redis的虚拟内存与操作系统的虚拟内存不是一回事儿,但是思想和目的都是相同的。就是暂时把不经常访问的数据从内存交换到磁盘中,从而腾出宝贵的内存空间用于其他需要访问的数据。尤其是对于redis这样的内存数据库,内存总是不够用。除了可以将数据分割到多个redis server外。另外能够提高数据库容量的办法就是使用虚拟内存把那些不经常访问的数据交换到磁盘上。
 
配置方法(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 134217788  #最多使用多少页面
vm-max-threads 4 #用于执行value对象换入的工作线程数量
 

相关热词搜索:redis 高级特性

上一篇:redis配置文件redis.conf配置项中文详解 下一篇:mac下设置redis开机启动方法步骤
分享到: 收藏