Redis的强大高级应用

上一篇Redis浅谈中,已经讲述了Redis存储数据的5种类型,当然一个数据库里面谈数据无疑是最基础的,所以这里让我们继续来发掘Redis的什么面纱,强大的Redis可不仅仅只有这点功能啊,总的来说,Redis高级使用特性包括了安全性,主从复制,事务机制,持久化机制,发布订阅消息,虚拟内存的使用。
           Redis的安全性,是的,细心的朋友可能看到之前的日志里面我操作Redis并没有用什么密码登陆,这明显是很不好的,我们可以在登陆的时候设置密码,但是值得注意的是我们要把密码设置的复杂一点(当然在测试的时候可以忽略这点),原因?很简单,redis的速度相当的快,一个外部的用户可以在一秒钟进行150k次的密码尝试,由于默认的配置文件时不需要密码登陆的,所以我们先进入redis.conf改一下密码
图片

好的,接下来我们来测试一下吧-。-
图片
        通过设置密码就可以提高数据库的安全性啦,恩,这只是开胃小菜,接下来我们看下一个神奇的功能,主从复制,我们都知道,redis将数据缓存在内存中的,那么麻烦来了,如果内存崩溃那就完蛋了,主从复制很好的解决点,通过主从复制可以允许slave server拥有master server相同的数据副本。Redis的主从复制可分4步:1Slave与master建立连接,发送sync同步命令 2:Master会启动一个后台进程,将数据库快照保存到文件中,同时master主进程会开始收集新的写命令并缓存。3:后台完成保存后,就将此文件发送给slave

4:Slave将此文件保存到硬盘上。但是小冯在这还是遇到了一个很大的问题,搞了一天才搞定,我发现在开启两台数据库的时候,在运行./redis-server /usr/local/redis/etc/redis.conf时会报一个错误,Fatal Error,然后就没提示了,一开始猜想是修改了redis.conf内容导致的,结果看了好多遍就放弃了这个想法,网上也没给出一个确定的答案(redis资料比较少),猜想过内存太小,但是我重启并不能解决问题,原来不是要关闭客户端,而是要重启虚拟机,估计是内存缓存的问题。。。好,进入代码部分:

图片

先刷新主数据库数据,接着用从数据库实现同步,代码如下:
图片

从上述的代码我们就能很好的看出,从机可以同步主机的信息,但是只有读这个功能,并不能修改数据,那么怎么看那台是主机呢,很简单,只需要执行info命令即可,这里列出进行主从复制的一些额外的命令ifconfig - a (查找ip信息)ifconfig eth0 ip地址(修改ip信息)
ping 主机的ip地址(链接ip地址)
    接下来要显示一个Redis的缺陷了,我们都知道在关系型数据库中像mysql,orcale等等,它们的事务具有原子性的,要不同时成功,要不同时失败,但是Redis并不是的,即使有操作失败,还是会修改能正确执行命令的语句,这毫无疑问会造成影响,这就要求我们用分布式事务来操作(以后再发相关的日志),代码:
图片
     由上述的结果就已经可以看出,明明name的自增是失败的,但是还是把age自增了,这点也许是Redis需要改进的地方吧。。。
接下来让我们看下乐观锁吧,乐观锁其实和版本控制器非常的相似的,原理就是通过watch命令进行监视给定的key,当exec时候如果监视的key从调用watch后发生了变化,则整个事务都会失败,注意exec,discard,unwatch命令都会清楚链接中的所有监视。

    接下来详细的描述下Redis的持久化机制,即使有了主从复制,但是还是存在崩溃的风险,Redis需要经常将内存中的数据同步到硬盘上来保证持久化,Redis支持两种持久化方式1:snapshoting(快照方式),也是Redis的默认方式,另一种是Append-only file(缩写aof方式),快照方式是将内存中数据以快照的方式写入到二进制文件中,所以我们并不能查看此文件的,默认名为dump.rdb,通过修改redis.conf可以配置redis在n秒内如果超过m个key被修改则做快照。如:

图片 

    但是这还是有缺陷,会导致最后一次保存不成功入数据库意外崩溃,这时候就要用到 Append-only file方式保存数据了。可以通过配置文件告诉redis我们想要通过fsync函数强制写入到磁盘的时机,有3中选择:appendfsync always:收到命令就马上写入到磁盘,效率最低名单是完全保证了持久化。appendfsync everysec 没一秒钟写入磁盘一次,在性能和持久化上做了很好的折中appendfsync no:完全依赖于os,性能最好,但是持久化没保证。
    发布及订阅消息,pub/sub是一种消息通信模式,主要目的要是解除消息发布者和消息接收者之间的耦合,Redis作为pub/sub的server,在其中起到了消息路由的功能,订阅者可以通过subscribe和psubscribe命令向redis server订阅自己感兴趣的消息类型,redis将信息类型称为通道,当发布者通过oublish命令向redis server发送特定的类型消息时,订阅该类信息的全部client都会收到此信息(ps:内存小的友友需谨慎测试,小冯之前开了3个数据库来测试,电脑差点卡爆。。。所以这里并没代码。。。) 
    最后一个是虚拟内存,Redis的虚拟内存其实和os的虚拟内存不是一回事,但是思路和目的都是相同的,就是暂时把不经常访问的数据从内存交换到磁盘上,从而腾出宝贵的内存空间给其它需要访问的数据,redis中内存总是不够用的,除了将数据分割到多个redis server之外,能提高数据库的容量的办法就是使用虚拟内存把不经常访问的数据交互到磁盘上了。
    (ps:接下来要将一个项目吧orcle换成redis数据库),感觉有难度,任重道远,加油,小冯!!!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值