redis高级实用特性
1. 安全性
2. 主从复制
3. 事务处理
4. 持久化机制
5. 发布订阅消息 : 可以做一个消息系统
6. 虚拟内存的使用
一 . 安全性
设置客户端连接后进行任何其他指定前需要使用的密码 .
警告 : 因为redis 速度相当快 , 所以在一台比较好的服务器下 , 一个外部的用户可以在一秒钟进行150k次的密码尝试 , 这意味着你需要指定非常非常强大的密码来防止暴力破解 .
> requirepass passwordStr // 在redis.conf 中添加这句话即可.
设置完成后需要重启服务才能生效 .
连接redis server时 需要添加密码
> redis-cli -a password // -a 参数代表是密码 .
二 . 主从复制
1. Master 可以拥有多个slave
2. 多个slave 可以连接同一个master外 , 还可以连接到其它slave
3. 主从复制 不会阻塞master , 在同步数据时 , master 可以继续处理client请求.
4. 提高系统的伸缩性
主从复制过程 :
1. slave 与 master 建立连接 , 发送sync同步命令
2. master 会启动一个后台进程 , 将数据库快照保存到文件中, 同时master主进程会开始收集新的写命令并缓存 .
3. 后台完成保存后 , 就将此文件发送给slave
4. slave 将此文件保存到硬盘上 .
配置主从服务器 :
配置slave服务器 , 只需要在slave的配置文件中加入以下配置
slaveof 192.168.1.1 6379 # 指定master的ip 和 端口
masterauth pwd # 这是主机的密码
查看主从信息 :
通过命令 info 即可 查看 , 有一个role 字段 ,如果是从机的话就是slave
事务处理 :
redis对事务的支持目前还比较简单 , redis 只能保证一个client发起的事务中的命令可以连续的执行 , 而中间不会插入其他client命令 , 当一个client在一个连接中发出multi命令时 , 这个连接会进入一个事务上下文 , 该连接后续的命令不会立即执行 , 而是先放到一个
multi : 打开事务 , 类似mysql begin
exec : 结束事务 , 类似mysql commit
乐观锁复杂事务控制
乐观锁 : 大多数是基于数据版本的记录机制实现的 . 即为数据增加一个版本标识,在基于数据库表的版本解决方案中,一般是通过为数据库表添加一个 version 字段来实现读取数据时 , 将此版本号一同读出 , 之后更新时 , 对此版本号加1 , 此时 , 将提交数据的版本号与数据库表对应记录的当前版本号进行比对 , 如果提交的数据版本号大于数据库当前版本号,则予以更新 , 否则认为是过期数据 .
snapshotting 方式
快照是默认的持久化方式 . 这种方式是将内存中数据以快照的方式写入到二进制文件中,默认的文件名为dump.rdb . 可以通过配置设置自动做快照持久化的方式 , 我们可以配置redis在n秒内如果超过m个key呗修改就自动做快照 .
aof 方式
由于快照方式是在一定时间间隔做一次的 , 所以如果redis意外down掉的话 , 就会丢失最后一次快照后的所有修改 .
aof比快照方式有更好的持久化性 , 是由于在使用aof时, redis会将每一个收到的写命令都通过write函数追加到文件中, 当redis重启时会通过重新执行文件中保存的写命令来在内存中重建整个数据库的内容 .