上一篇博文讲述了Redis的一些常用命令,可以对数据库及数据库服务器进行操作,本篇将讲述Redis的高级应用及配置
- 安全性
- 设置密码:修改redis.conf中的requirepass,在其后面添加密码即可
- 使用:
- 进入客户端时,添加参数u;即 redis-cli -u password
- 进入客户端后,使用命令 auth,即 auth password
- 使用:
- 设置密码:修改redis.conf中的requirepass,在其后面添加密码即可
- 主从复制
- 通过主从复制可以允许多个是slave server拥有和master server相同的数据库副本
- 特点:
- Master可以拥有多个slave
- 多个slave可以连接同一个master外,还可以连接到其他的slave
- 主从复制不会阻塞master,在同步数据时,master可以继续处理client请求
- 提高系统的伸缩性
- Redis主从复制过程
- Slave与master建立连接,发送sync同步命令
- Master会启动一个后台进程,将数据库快照保存到文件中,同时master主进程会开始收集新的写命令并缓存
- 后台完成保存后,就将此文件发送给slave
- Slave将此文件保存到硬盘上
- 配置主从服务器
- 配置slave服务器:
- 在slave的配置文件中修改slaveof,在其后面添加master的ip
- 在slave的配置文件中修改masterauth,在其后面添加master的密码
- 事务处理
- Redis只能保证一个client发起的事务可以连续执行,中间不插入其他client的命令
- 原理:但一个client在一个连续中发出multi命令时,这个连接会进入一个事务上下文,该连接后续的命令不会立即执行,而是先放入一个队列中,当执行exec命令时,redis会顺序的执行队列中的所有命令
- 打开事务:multi
- 执行并关闭事务:exec
- 关闭并取消事务:discard
- 监视:watch命令会监视给定的key,当exec时,如果监视的key从调用watch后发生变化,这整个事务将失败
- 乐观锁:基于数据库表的版本解决方案中,一般是通过为数据库表添加一个“version”字段来实现读取数据时,将此版本号一同读出,之后更新时,对此版 本号+1。此时,将提交数据的版本号与数据库表对应记录的当前版本号进行比对,如果提交的数据版本号大于数据库当前版本号,则予以更新,否则认为是过期数据
- 监视key:watch,如 watch key
- 关闭监视:unwatch,如 unwatch key
- 持久化机制
- Redis两种持久化方式
- snapshotting(快照)默认方式
- 将内存中数据以快照的方式写入二进制文件中,默认文件名为dump.rdb。
- 可通过配置自动化快照持久化的方式,修改redis.conf的save参数,配置redis在n秒内如果超过m个key被修改就自动做快照
- Append-only file(aof)
- 将操作写入文件中,当发生操作时,写入磁盘
- 修改redis.conf的appendonly为yes,开启aof方式
- 修改redis.conf的appendfsync的参数,设置aof方式
- always:收到写命令就立即写入磁盘
- everysec:没秒钟写入磁盘一次
- no:完全依赖os写入
- snapshotting(快照)默认方式
- Redis两种持久化方式
- 发布订阅消息
- 发布订阅(pub/sub)是一种消息通信模式,主要目的是解除消息发布者和消息订阅者之间的耦合,
- 订阅者可以通过subscribe和psubscribe命令向redis server订阅自己感兴趣的消息类型,redis将信息类型称为通道(channel)。当发布者通过publish命令向redis server发送特定类型的信息时,订阅该信息类型的全部client都会收到此信息
- 订阅消息:subscribe/psubscribe,如 subscribe/psubscribe key
- 发布消息:publish,如 publish key value
- 虚拟内存的使用
- 暂时把不经常访问的数据内存交换到磁盘中,从而腾出内存空间用于其他需要访问的数据
- 提高数据库容量的办法之一是使用虚拟内存把那些不经常访问的数据交换到磁盘中
- 配置
- vm-enabled:设置虚拟内存是否开启
- vm-swap-file:交换出来的value保存的文件路径
- vm-max-memory:redis使用的最大内存上限
- vm-page-size:每个页面的大小
- vm-pages:最多使用多少个页面
- vm-max-threads:用于执行value对象换入的工作线程数量