Redis高级实用特性:redis
1.安全性
2.主从复制
3.事务处理
4.持久化机制
5.发布订阅消息
6.虚拟内存的使用数据库
安全性:设计模式
设置客户端链接后进行任何其余指定前须要使用的密码警告:由于Redis速度至关快,因此一台比较好的服务器下一个外部的用户能够在一秒钟进行150k次的密码尝试,这意味着你须要指定很是很是强大的密码来防止暴力破解
配置方法:
requirepass beijing(在配置文件中配置密码)
auth beijing(受权方式1)
redis-cli -a beijing(受权方式2)缓存
主从复制:安全
Redis主从复制配置和使用都很是简单,经过主从复制能够容许多个Redis server拥有和master server相同的数据库副本
Redis主从复制特色:
1.Master能够拥有多个slave
2.多个slave能够链接同一个master外,还能够链接到其余slave
3.主从复制不会阻塞master,在同步数据时,master能够继续处理client请求
4.提升系统的伸缩性
Redis主从复制过程:
1.Slave与master创建链接,发送sync同步命令
2.Master会启动一个后台进程,将数据库快照保存到文件中,同时master主进程会开始收集新的写命令并缓存。
3.后台完成保存后,就将此文件发送给slave
4.slave将文件保存到硬盘上
配置主从服务器:
配置slave服务器很简单,只需在slave的配置文件中加入一下配置:
slaveof 192.168.1.1 6379 #指定master的IP和端口
masterauth lamp #这是主机的密码服务器
事务处理:app
Redis对事物的支持目前还比较简单,Redis智能保证一个client发起的事务中的命令能够连续的执行,而中间不会插入其中client的命令,当一个client在一个链接中发出multi命令时,这个链接会进入一个事务上下文该链接后续的命令不会当即执行,而是先放到一个队列中当执行exec命令时,redis会顺序的执行队列中的全部命令、
函数
添加一个事务
命令:
multi
OK
incr a
QUEUED
incr b QUEUED
exec
1)1
2)1
如何取消一个事务(回滚)
dicard
若是有一条不成功,并不影响上面的操做
incr age
incr name #不成功
exec
乐观锁复琐事务控制
乐观锁:大多数是基于数据版本(version)的记录机制实现的,即为数据加一个版本的标识,在基于数据库表的版本解决方案中,通常是经过为数据库表添加一个“version”字段来实现读取出数据时,将此版本号一同读出,以后更新时,对此版本号加1,此时,将提交数据的版本号与数据表对应记录的当前版本号进行对比,若是提交的数据版本号大于数据库当前版本号,则予以更新,不然认为是过时数据。watch命令会监视给定的key,当exec时候若是监视的key从调用watch后发生过变化,则整个事务会失败,也能够调用watch屡次监视多个key,这样就能够对指定的key加乐观锁了,注意watch的key是对整个链接有效的,事务也同样,若是链接断开,监视和事务会被自动清除,固然了exec,discard,unwatch命令都会清楚链接中的全部监视性能
持久化机制:学习
Redis是一个支持持久化的内存数据库,也就是说redis须要常常将内存中的数据同步到硬盘来保证持久化
Redis支持两种持久化方式:
1.snapshotting(快照)也就是默认方式
2.Append-only file(缩写aof)的方式
Snapshotting方式
快照是默认的持久化方式,这种方式是将内存中数据以快照的方式写入二进制文件中,默认的文件名为dump.rdb能够经过配置设置自动作快照持久化的方式,咱们能够配置redis在n秒内若是超过m个key修改就自动作快照
配置方式:
save 900 1 #900秒内若是超过1个key被修改,则发起快照保存
save 300 10 #300秒内容若是超过10个key被修改,则发起快照保存
save 60 10000
aof方式
因为快照方式是在必定间隔时间作一次的,因此若是redis意外down掉的话,就会丢失最后一次快照后的全部修改。aof比快照方式有更好的持久化性,是因为在使用aof时,redis会将每一个收到的写命令都经过write函数追加到文件中,当redis重启时会经过从新执行文件中保存的写命令来内存中重建真个数据库的内容。固然因为os会在内核中缓存write作的修改,因此可能不是当即写入磁盘上,这样aof方式的持久化也仍是有可能会丢失布冯修改。能够经过配置文件告诉redis咱们想要经过fsync函数强制os写入到磁盘的时机。
配置方式:
appendonly yes //启用aof持久化方式
#appendfsync always //收到写命令就当即写入磁盘最慢,可是保证彻底的持久化
appendfsync everysec //每秒钟写入磁盘一次,在性能和持久化方面作了很好的折中
#appendfync no //彻底依赖os,性能最好持久化没保证
发布及订阅消息:
发布订阅(pub/sub)是一种消息通讯模式,主要的目的是解耦消息发布者和消息订阅者之间的耦合,这点和设计模式中的观察者模式比较类似。pub /sub不只仅解决发布者和订阅者直接代码级别耦合也解决二者在物理部署上的耦合。redis做为一个pub/sub server,在订阅者和发布者之间起到了消息路由的功能。订阅者能够经过subscribe和psubscribe命令向redis server订阅本身感兴趣的消息类型,redis将消息类型称为通道(channel)。当发布者经过publish命令向redis server发送特定类型的消息时。订阅该消息类型的所有client都会收到此消息。这里消息的传递是多对多的。一个client能够订阅多个 channel,也能够向多个channel发送消息。
虚拟内存:
Redis的虚拟内存与操做系统的虚拟内存不是一回事,可是思路和目的都是相同的。都是暂时把不常常访问的数据从内存交换到磁盘中,从而腾出宝贵的内存空间用于其余须要访问的数据。尤为是对于redis这样的内存数据库,内存老是不够用的。除了能够将数据分割到多个
redisserver外。另外可以提升数据库容量的办法就是使用虚拟内存把那些不常常访问的数据交换到磁盘上。
配置:
vm-enabled yes #开启vm功能
vm-swap-file /tmp/redis.swap #交换出来的value保存的文件路径
vm-max-memory 1000000 #redis使用的最大内存上限
vm-page-size 32 #每一个页面的大小32字节
vm-pages 13417728 #最多使用多少页面
vm-max-threads 4 #用于执行value对象换入患处的工做线程数量
启动后提示,还要配置:
really-use-vm yes
注:Redis系列博客均是结合兄弟连Redis学习视频的笔记!