Redis高级实用特性
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Redis高级实用特性相关的知识,希望对你有一定的参考价值。
1、安全性
设置客户端连接后进行任何其他指定前需要使用的密码。
警告:
因为redis速度相当快,所以在一台比较好的服务器下,一个外部的用户可以在一秒钟进行150k次的密码尝试,这意味着需要指定非常非常强大的密码来防止暴力破解。
首先在配置文件redis.conf里设置密码,如图所示
这就设置好密码了,然后把redis客户端重启一下,再次进入,并进行操作的时候就需要认证,有两种认证方式
1)、在redis客户端里操作 auth 密码
2)、在登录客户端的时候输入密码./redis-cli -a 密码
2、主从复制
Redis主从复制配置和使用都非常简单。通过主从复制可以允许多个slave server拥有和master server相同的数据库副本。
Redis主从复制特点:
1)、master可以拥有多个slave;
2)、多个slave可以连接同一个master外,还可以连接到其他slave;
3)、主从复制不会阻塞master,在同步时数据的时候,master可以继续处理client请求;
4)、提高系统的伸缩性。
Redis主从复制过程:
1)、Slave与mater建立连接,发送sync同步命令;
2)、Master会启动一个后台进程,将数据库快照保存到文件中,同时master主进程会开始收集新的写命令并缓存;
3)、后台完成保存后,就将此文件发送给slave;
4)、Slave将此文件保存到硬盘上。
Redis主从复制配置:
配置slave服务器很简单,只需要在slave的配置文件中加入以下配置
slaveof 主机ip地址 主机端口
mastrauth 主机密码
然后就可以进行主从复制了
查看主机与从机的一些信息,在客户端里输入命令info
主机部分信息:
从机部分信息:
3、事务处理
Redis对事物的支持目前还比较简单。Redis只能保证一个client发起的事务中的命令可以连续的执行,而中间不会插入其他client的命令。当一个client在一个连接中发出multi命令时,这个连接会进入一个事务上下文,该连接后续的命令不会立即执行,而是先放到一个队列中,当执行exec命令时,redis会顺序的执行队列中的所有命令。
取消一个事物 discard
可以发现这次2个set age命令都没有被执行。discard命令其实就是清空事物的命令队列并退出事物上下文,也就是我们常说的事物回滚。
redis的事物处理比较简单,有待改进,体现在:执行两个命令的时候,一条正确命令,一条错误命令,redis不会像其他数据库一样进行完全的回滚操作,即不进行任何操作,而是将那条正确的命令给执行了,在某些情况下,会导致严重的错误,所以说redis的事物处理有待改进。
乐观锁复杂事物控制:
乐观锁:大多数是基于数据版本(version)的记录机制实现的。即为数据增加一个版本标识,在基于数据库表的版本解决方案中,一般是通过为数据库表添加一个“version”字段来实现读取出数据时,将此版本号一同读出,之后更新时,对此版本号加1。此时,将提交数据的版本号与数据库表对应记录的当前版本号进行比对,如果提交的数据版本号大于数据库当前版本号,则予以更新,否则认为是过期数据。
watch命令会监视给定的key,当exec时候如果监视的key从调用watch后发生过变化,则整个事务会失败。也可以调用watch多次监视多个key,这样就可以对指定的key加乐观锁了。注意watch的key是对整个连接有效的,事物也一样。如果;连接断开,监视和事务都会被自动清除。当然了exec,discard,unwatch命令都会清除连接中的所有监视。
4、持久化机制
Redis是一个持久化的内存数据库,也就是说redis需要经常将内存中的数据同步到硬盘来保证持久化。
Redis支持两种持久化方式:
1)、snapshotting(快照)也是默认的方式 在硬盘中存储数据本身
2)、Append-only file(缩写aof)的方式 在硬盘中存储对数据库的操作
快照是默认的持久化方式。这种方式是将内存中数据以快照的方式写入到二进制文件中,默认的文件名为dunp.rdb。可以通过配置设置自动做快照持久化的方式。我们可以配置redis在n秒内如果超过m个key被修改就自动做快照
由于快照方式是在一定间隔时间做一次的,如果redis意外down掉的话,就会丢失最后一次快照后的所有修改。
aof比快照方式有更好的持久化性,是由于在使用aof时,redis会将每一个收到的写命令都通过write函数追加到文件中,当redis重启时会通过重新执行文件中保存的命令来在内存中重建整个数据库的内容。
当然由于os会在内核中缓存write做的修改,所以可能不是立即写到磁盘上。这样aof方式的持久化也还是有可能丢失部分修改。
可以通过配置文件告诉redis我们想要通过fsync函数os写入到磁盘的时机
5、发布及订阅消息
发布订阅(pub/sub)是一种消息通信模式,主要的目的是解除消息发布者和消息订阅者之间的耦合,redis作为一pub/sub的server,在订阅者和发布者之间起到了消息路由的功能。订阅者可以通过subscribe和psubscribe命令向redis server订阅自己感兴趣的消息类型,redis将信息类型称为通道(channel)。当发布者通过publish命令向redis server发送特定类型的信息的时候,订阅该消息类型的全部client都会收到到此消息。
6、虚拟内存的使用
Redis的虚拟内存和操作系统的虚拟内存不是一回事,但是思路和目的都是相同的。就是暂时把不经常访问的数据从内存交换到磁盘中,从而腾出宝贵的内存空间用于其他需要访问的数据。尤其是对于redis这样的内存数据库,内存总是不够用的。除了可以将数据分割到多个redis server外。另外能够提高数据库容量的办法就是使用虚拟内存把那些不经常访问的数据交换到磁盘上。
以上是关于Redis高级实用特性的主要内容,如果未能解决你的问题,请参考以下文章