1.安全性
设置客户端连接后进行任何其他指定前需要使用的密码
requirepass password
设置过密码后,重启一下redis就可以使用密码
auth password 登录之后,可以执行此命令进行授权
-a password 在启动redis时,加上该参数,也可进行授权
2.主从复制性
通过主从复制可以允许多个slave server拥有和master和server相同的数据库副本
Redis主从复制的特点:
1. master(主数据库)可以有多个slave(从数据库)
2. 多个salve可以连接到同一个master外,还可以连接到其他slave
3. 主从复制不会阻塞maste,在同步数据时,master可以继续处理client请求
4. 提高系统伸缩性
Redis主从复制的过程:
1. slave与master建立连接,发送sync命令
2. master会启动一个后台进程,将数据库快照保存到文件中,同时master主进程会开始收集新的写命令并缓存
3. 后台完成保存后,就将此文件发送给salve
4. Slave将此文件保存到硬盘上
配置主从服务器:
配置salve服务器很简单,只需要在salve服务器的redis配置文件中加入以下配置
salveof ip 端口 #指定master的Ip和端口
masterauth password #这是主机的密码
注意:我们可以通过info命令可以得到主从的信息
3.事务处理
Redis对事务的支持还比较简单。Redis只能保证一个client发起的事务中的命令可以连续执行,中间不会插入其他client的命令。
1.当一个client在一个连接中发出multi命令时,这个连接会进入一个事务上下文,该连接后续的命令不会立即执行(返回值是QUEUED),而是放到一个队列中,当执行exec命令时,redis会顺序的执行队列中的所有命令
2. 当一个client在一个连接中发出multi命令时,这个连接会进入一个事务上下文, 该连接后续的命令不会立即执行(返回值是QUEUED),而是放到一个队列中,当执行discard命令时,redis就会清空事务的命令队列并退出事务上下文,也就是我们所说的回滚
注意:有事务执行时,事务中的其中一个命令执行失败,整个事务不会回滚
乐观锁复杂事务控制
乐观锁:大多数是基于数据版本(version)的记录机制实现的。即为数据增加一个版本标识,在基于数据库表的版本解决方案中,一般是通过为数据库表添加一个version字段来实现读取出数据时,将此版本号一同读出,之后更新时,对此版本号加1。此时,将提交数据的版本号与数据库表对应记录的当前版本号进行比对,如果提交的数据版本号大于数据库当前版本,则予以更新,否则认为是过期数据。
乐观锁的使用:
Watch命令会监视给定的key,当exec时,如果监视的key从调用watch后发生过变化,则整个事务会失败。也可以调用watch多次监视多个key,这样就可以对指定的key加乐观锁。注意:watch的key是对整个连接有效的,事务也一样。如果连接断开,监视和事务都会被自动清除。当然了exec,discard中的乐观锁,unwatch命令都会清除连接中的所有监视
4.持久化机制
Redis是一个支持持久化的内存数据库,也就是说redis需要经常将内存中的数据同步到硬盘来保证持久化
Redis支持两种持久化方式:
1. snapshotting(快照) 也是默认方式
a) 快照保存时默认的持久化方式。这种方式是将内存中数据以快照的方式写入到二进制文件中,默认的文件名为dump.rpb。可以通过redis的配置文件设置自动做快照持久化的方式。
b) 命令:save 秒被修改的key的个数
(意义:redis在多少秒内如果超过多少个key被修改就自动做快照)
注意: 由于快照方式是在一定时间间隔做一次的,所以如果redis意外down掉的话,就会丢失最后一次快照后的所有修改。
2. Append-only file(缩写aof的方式)
a) aof比快照方式有更好的持久化性,是由于在使用aof时,redis会将每一个收到的写命令都通过write函数追加到文件中,当redis重启时会通过重新执行文件中保存的写命令来在内存中重建整个数据库的内容,默认文件名:appendonly.aof
b) aof的使用(通过配置redis的配置文件):
1.appendonly yes //启用aof持久化方式
2.appendfsyncalways //收到命令就立即写入磁盘,性能最差,但是保证完全的持久化
appendfsynceverysec //每秒钟写入磁盘一次,在性能和持久化方面做了很好的折中
appendfsyncno //完全依赖于os。性能最好,持久化没保证
注意:快照方式存储的文件内容是数据 aof方式存储的内容是命令
5.发布及订阅消息
发布订阅(pub/sub)是一种消息通信模式,主要的目的是解除消息发布者和消息订阅者之间的耦合,redis作为一个pub/sub的server,在订阅者和发布者之间起到了消息路由的功能。订阅者可以通过subscribe和psubscribe命令向redis server订阅自己感兴趣的消息类型,redis将信息类型称为通道(channel)。当发布者通过publish命令向redis server发送特定类型的信息时,订阅该信息类型的全部client(客户端)都会收到此消息
订阅消息: subscribe 消息类型(与发布消息时的消息类型相同)
发布消息: psubscribe 消息类型(自定义) 消息内容(自定义)
6.虚拟内存的使用
Redis的虚拟内存与操作系统的虚拟内存不是一回事,但是思路和目的都是相同的。就是暂时把不经常访问的数据从内存交换到磁盘中,从而腾出宝贵的内存空间用于其他需要的访问的数据。尤其是对于redis这样的内存数据库,内存总是不够用的。除了可以将数据分割到多个redis server外。另外能够提高数据库容量的办法就是使用虚拟内存把那些不经常访问的数据交换到磁盘上
虚拟内存的使用(需要配置redis的配置文件):
vm-enabled yes //开启vm功能
vm-swap-file //交换出来的value保存的文件路径
vm-max-memory 100 // redis使用的最大内存上限
vm-page-size 32 //每个页面的大小32字节
vm-pages 134217728 //最多使用多少个页面
vm-max-threads 4 //用于执行value对象的工作线程数量
注意:当在redis配置文件中将上述配置设置之后。
重启redis的时候,会出现是否要使用redis的虚拟内存的提示?
提示下面有really-use-vm yes,如果真的要使用redis的虚拟内存
则需要将这句话写在redis的配置文件vm-enabled yes下面,即可