Redis之--高级应用

1.安全性redis

因为redis的运行速度很是快(每秒能够尝试150k数据容量的密码破解),所以,为了提升其安全性,在进入客户端的设置密码是很是有必要的。数据库

具体操做:打开redis.conf文件,ctrl+f查找"requirepass",结果下图:设置对应的密码便可;缓存

使用:重启redis,进入客户端(redis-cli),发现能够进入,可是当操做命令的时候,发现报错:(error)ERR operation not permitted;输入受权命令:auth 刚刚设置的密码值;返回OK,表示受权成功;安全

上面操做的缺点是,每次进入客服端的时候都须要输入密码;能够在进入客户端就输入密码,避免了之后的重复输入:redis0-cli -a 刚刚设置的密码值;服务器

 

2.主从复制:app

经过主从复制可使多个从服务器(slave server)拥有和主服务器(master server)相同的数据库副本。函数

具体操做:打开从服务器的redis.conf文件,ctrl+f查找"slaveof",结果以下图:性能

设置:slaveof 主服务器ip  主机端口号 便可;测试

若是主服务设置了密码,还要再添加以下配置:ui

设置:masterauth 主服务器密码;

可使用info命令查看相关的信息。

 

3.事务处理

   redis只能保证一个client发起的事务的命令能够连续的执行,而中间不会插入其它的cli命令;

   当在一个client在一个链接中发出multi命令时,这个链接会进入一个事务上下文,该链接的手续命令不会当即执行,而是先放到一个队列中,当执行exec命令时,redi会顺序执行全部的命令。

  使用以下图:

取消事务处理:可使用discard命令;discard就是取消当前队列中全部的命令并退出事务上下文,也就是事务回滚。

说明:redis的事务机制还很原始;它只能让队列中全部的命令都执行,可是当其中一个命令执行失败的时候,不会让整个事务中全部的命令都回滚。(redis的事务须要改进)

 

补充:

乐观锁:大多数是基于数据库版本(version)实现的。即为数据库增长一个版本标识,在基于数据库表示的版本解决方案中,通常经过为数据库表添加一个表示版本的"version"字段,将此版本一同读出,当更新版本的时候,此版本号加1;此时,将提交到数据库的版本号通数据库中的版本号进行对比,若是提交的版本号大于数据库中的版本号,则予以更新;不然认为过时。(相似于版本控制器)

redis的乐观锁:使用watch命令。

 

4.持久化机制

redis是一个支持持久化的内存数据库,也就是说redis须要常常讲内存中的数据同步到硬盘来保证持久化;redis支持两种持久化方式:snapshotting(快照)和Append-only file(aof)。

a.snapshotting方式

   也称快照方式,也是默认方式;这种方式将内存中的数据以快照的方式写入二进制文件中,默认的文件名为dump.rdb。能够经过配置设置自动作快照持久方式。

例如:配置redis在n秒内若是超过m个key被修改了,就发起快照。

 save 300 10 #300秒内超过10个key被修改就发起快照

b.Append-only file方式

  因为快照方式是在必定间隔作一次的,因此若是redis意外down掉的话,就会丢失最后一次快照后的全部修改。

  aof方式比快照有更好的持久化性,是因为在使用aof时,redis会将每个收到的命令都经过write函数追加到文件中,当redis重启是会经过从新执行文件中保存的鞋命令来在内存中创建整个的数据库。

 因为OS在内核中缓存write作的修改,因此可能不是当即写到磁盘上。这样持久化也仍是有可能丢失部分文件;能够经过配置文件告诉redis咱们想要经过fsync(同步)函数强制os写入到磁盘的时机。

具体操做:打开从服务器的redis.conf文件,ctrl+f查找"appendonly",结果以下图:

      appendonly yes //启用aof持久化方式

而后设置同步方式:

     #appendfsync always //收到命令就当即写入,最慢,可是保证了彻底的持久化

     #appendfsync everysec //每秒钟写入磁盘一次,在性能和持久化方面作了了很好的折中

     #appendfsync no //彻底依赖os,性能最好,持久化没保证

开启其中一种便可。

 

5.发布与订阅信息

   当在一个redis客户端发布了频道消息以后,监听(subscribe)了该频道消息的各个客户端(IP不一样),便可收到该消息。

例如:发布与订阅信息测试

1.先打开两个客户端,监听(subscribe)不一样的频道;第一个客户端监听了tv1和tv2频道,第二个客户端监听了tv1频道:

2.打开第第三个客服端,发布(publish)消息:

3.再去看看第一个客户端和第二个客服端:

有没发现,不一样的客户端只要订阅了相关的频道,就会收到对应的消息。

 

5.虚拟内存的使用

  redis的虚拟内存就是把不常常访问的数据从内存交换到磁盘中,从而腾出宝贵的内存空间用于其余须要访问的数据。(也能够将数据分割到多个redis server中)

配置虚拟内存的使用:

1.打开从服务器的redis.conf文件,ctrl+f查找"vm",结果以下图:

2.分别在redis.conf文件中开启如下配置项:

 vm-enabled yes #开启vm功能

vm-swap-file /tmp/redis.swap #交换出来的values保存的路径

vm-max-memory 100000 #redis使用的最大内存上限

vm-page-size 32 #每一个页面的大小32字节

vm-pages 134217728 #最多使用多少个页面

vm-max-threads 4 #用于执行values对象换入的工做线程数量

作好以上配置,重启redis,redish会提示:

If you *really* want VM add this in the config file: 

                 really-use-vm yes

将配置项 really-use-vm yes 加到redis.conf文件便可。

相关文章
相关标签/搜索