当前位置: 首页 > news >正文

[Redis]Redis高级特性的配置及使用

----------------------------------------------------------------------------

【Redis安全性】

一 . 默认我们进入Redis客户端是不需要密码的,但是在使用任何命令前保证已授权,这在一个你不信任其它人的环境里可能有用。

  1. 按照如下方式可设置密码:

  ① 修改配置文件(默认为/usr/local/etc/redis.conf),找到requirepass foobared,默认已注释掉;将密码设为123456只需要这样,requirepass 123456,然后重启服务。(杀掉主进程:kill -9 进程号,启动:/usr/local/bin/redis-server /usr/local/etc/redis.conf)

    ② 此时/usr/local/bin/redis-cli进入到客户端就需要获取权限,没有将提示:(error) NOAUTH Authentication required.

   

  2. 输入密码有两种方式:

  ① 输入任何命令前,在客户端界面执行:auth 123456

  ② 进入客户端时输入密码:/usr/local/bin/redis-cli -a 123456

 

  其实auth本来应该一直被注释掉,因为向后兼容性并且大部分人不需要权限(例如:他们运行自己的服务)。

 

注意:由于Redis非常快,针对于一台好的机器一个外部的使用者可以每秒尝试150k次密码。这意味着你应该使用一个非常强壮的密码,否则很容易被破解。

 

二. 命令的重命名:

Redis支持在一个共享的环境中对危险命令的名字进行修改,例如:CONFIG这个命令可以重命名成其它很难猜到的名字,以便对内部使用的工具可用而对一般客户端不可用。

  如:rename-command CONFIG othernameofconfig

 

同样,通过重命名为空字符串可以使一个命名失效。

  如:rename-command CONFIG ""

 

注意:命名重命名将记录到AOF文件中 或 传输到slave,并且可能会引起问题。

 

【Redis主从复制】

一. Redis主从复制特点:

  ① master可以拥有多个slave

  ② 多个slave可以连接同一个master外,还可以连接到其它slave

  ③ 主从复制不会阻塞master,在同步数据时,master可以继续处理client请求

  ④ 提高系统的伸缩性

 

二. Redis主从复制过程:

  ① slave与master建立连接,发送sync同步命令

  ② master启动一个后台进程,将数据库快照保存到文件中,同时master主进程开始收集新的写命令并缓存。

  ③ 后台完成保存后,就将此文件发送给slave

  ④ slave将此文件保存到硬盘上

 

三. 配置Redis从服务器:

  要设置IP使用:ifconfig eth0 192.168.117.224

 

  vim /usr/local/etc/redis.conf  # 找到slaveof 和 masterauth,配置如下

  slaveof <masterip> <masterport>  # slaveof 192.168.88.90 6379

  masterauth <master-password>     #masterauth 123456

 

  现在在master里设置一个键,如:set name weichen;使用keys * 或 get name 查看slave是否能复制成功。

  

  自Redis2.6后,slave默认将只读;在Redis从库中写,会出现如下提示:

  

  不过这个可以在配置文件里面作更改(slave-read-only no),然后重启Redis即可允许写操作。

  允许slave写操作,一方面对存储临时的数据有用(因为在和主库重新同步后,从库数据可以很容易被删除掉),但是如果由于配置错误导致客户端对其写操作则会引发问题。

  slave只读的设计是防止在网络上暴露给不被信任的客户端,仅仅是针对误用Redis实例的一个保护层;但是一个只读的slave仍然默认输出所有管理命令,比如 CONFIG, DEBUG等等。在一定程度上,你可以通过使用 'rename-command' 跟踪所有的管理/危险命令来提高只读的slave的安全性。

 

  同步复制策略:disk 或 socket。注意:目前无盘复制是实验性的。

  repl-diskless-sync no

 

(用info查看当前Redis服务器信息)

  通过几个参数可以判断是Reis主还是从,

  role:master

  slave0:192.168.88.90,6379,online

 

  redis_version 3.0.3 包含下面几类服务器信息:

  #Server

  #Clients

  #Memory

  #Persistence

  #Stats

  #Replication

  #CPU

  #Cluster

 

注:只要Redis slave配置完成,任何时候slave打开,master数据都会自动复制。

 

【Redis队列/事务】

一. 使用multi打开一个队列,exec执行队列命令,discard取消队列;

 

 

二. 与MySQL的事务不同的是,Redis队列中的命令有未执行成功的,整个事务不会回滚。

 

三. 乐观锁:使用watch命令对key监控,如果在watch后,该key发生过改变,则事务将失败(即已过期);可以调用多次watch监控多个key;exec、discard、unwatch都会清除连接中的监控。

例如:上面的age现在是21,先对age进行watch age,此时multi打开队列进行等待,另一方面打开新终端,对age进行set age 30,设置成功后,在第一个终端内执行set age 40,exec执行,提示nil。

 

【Redis持久化】

一. Snapshotting(快照)。

  Redis默认的持久化方式,将内存中的数据以快照的方式写入到二进制文件(dump.rdb)中,通过配置文件可以配置多少秒后有至少多少次修改就进行快照。

  save 900 1     #900秒后有至少1次key的修改就持久化

  save 300 10     #300秒后有至少10次key的修改就持久化

  save 60 10000   #60秒后有至少10000次key的修改就持久化

  

  阻止快照的方式:

  ① 注释掉上面三行

  ② 或 改成save ""。

 

二. Append Only File(AOF方式)

  Redis默认异步将数据备份到磁盘,这种模式对许多应用足够了,但是如果Redis进程出现问题或断电,将导致最近几分钟的写数据丢失(根据配置文件中的保存时间点)。

  Append Only File(AOF)是提供了更好持久性的可选的持久化模式。例如通过fsync(同步内存中所有已修改的文件数据到储存设备)的方式,Redis可以做到在服务器断电的情况下仅丢失一秒钟的写数据,或者在Redis进程错误的情况下丢失单条写数据。

 

  AOF和数据库存储可以同时打开,如果在安装Redis时打开支持AOF,那么Redis将会使用AOF。(http://redis.io/topics/persistence)

  appendonly no            #默认AOF为关闭状态

  appendfilename "appendonly.aof"   #指定写入的文件名

  

  调用fsync()告诉操作系统实时将数据写入磁盘而不是写入输出缓存,一些OS可能不会实时刷新清空缓存数据。为此,Redis提供三种不同的模式:

  appendfsync always  #速度慢,但最安全,每次write都异步持久化

  appendfsync everysec #默认选项,每秒一次的异步保存,速度和数据安全的折中方案

  appendfsync no     #速度较快,不执行异步,让系统自动刷新数据

 

  结论:如果能在考虑到数据丢失的情况下保证运行,可以使用Snapshotting 或者 相反的使用"always"(非常慢但比"everysec"安全一点)。

 

  打开AOF模式(appendonly yes),etc/ 将新增appendonly.aof文件(存储的是操作内容):

 

五. 发布/订阅(pub/sub)

订阅者使用subscribe和psubscribe命令向Redis服务订阅消息,发布者通过publish命令向Redis服务发送信息时,订阅的客户端将收到消息。

 

如:终端1:subscribe m1

  终端2:subscribe m1 m2

  终端3:publish m1 abc;publish m2 hello;#publish命令返回频道订阅者数量,终端3发布的消息将实时显示到终端1和终端2

 

 

 

 

 

 

Link: http://www.cnblogs.com/farwish/p/4351828.html

相关文章:

  • spring 单机和集群配置mqzookeeperredis
  • Iphone CodeSign error: no provisioning profile at path 错
  • CSS 译文:理解CSS中的块级格式化上下文
  • 2018年高教社杯全国大学生数学建模竞赛B题解题思路
  • storm记录--1-- 实时计算系统
  • Android优雅地处理按钮重复点击
  • 生产者消费者问题 伪代码和C语言多线程实现
  • 聊聊WS-Federation
  • Win下安装Cygwin中的SSH服务
  • migration vmware vms to openstack kvm 修改vmware windows scsi to ide
  • 每周一个linux命令之---uptime详解
  • MFC中CString转化为char*
  • 游戏开发怎么样学能入门零基础学游戏编程
  • Eclipse常用快捷键
  • 玩转Go语言之函数初体验
  • (ckeditor+ckfinder用法)Jquery,js获取ckeditor值
  • - C#编程大幅提高OUTLOOK的邮件搜索能力!
  • E-HPC支持多队列管理和自动伸缩
  • Golang-长连接-状态推送
  • Iterator 和 for...of 循环
  • js 实现textarea输入字数提示
  • nginx(二):进阶配置介绍--rewrite用法,压缩,https虚拟主机等
  • puppeteer stop redirect 的正确姿势及 net::ERR_FAILED 的解决
  • ReactNativeweexDeviceOne对比
  • underscore源码剖析之整体架构
  • Webpack 4 学习01(基础配置)
  • 百度贴吧爬虫node+vue baidu_tieba_crawler
  • - 概述 - 《设计模式(极简c++版)》
  • 基于 Ueditor 的现代化编辑器 Neditor 1.5.4 发布
  • 推荐一款sublime text 3 支持JSX和es201x 代码格式化的插件
  • AI算硅基生命吗,为什么?
  • 从如何停掉 Promise 链说起
  • 新年再起“裁员潮”,“钢铁侠”马斯克要一举裁掉SpaceX 600余名员工 ...
  • ​​快速排序(四)——挖坑法,前后指针法与非递归
  • ​人工智能书单(数学基础篇)
  • #我与Java虚拟机的故事#连载10: 如何在阿里、腾讯、百度、及字节跳动等公司面试中脱颖而出...
  • #在线报价接单​再坚持一下 明天是真的周六.出现货 实单来谈
  • $jQuery 重写Alert样式方法
  • (1)常见O(n^2)排序算法解析
  • (2009.11版)《网络管理员考试 考前冲刺预测卷及考点解析》复习重点
  • (附源码)spring boot校园拼车微信小程序 毕业设计 091617
  • (牛客腾讯思维编程题)编码编码分组打印下标题目分析
  • (删)Java线程同步实现一:synchronzied和wait()/notify()
  • (十八)devops持续集成开发——使用docker安装部署jenkins流水线服务
  • (十一)图像的罗伯特梯度锐化
  • (原創) 如何使用ISO C++讀寫BMP圖檔? (C/C++) (Image Processing)
  • (转)Sublime Text3配置Lua运行环境
  • (转)项目管理杂谈-我所期望的新人
  • (转载)跟我一起学习VIM - The Life Changing Editor
  • (转载)在C#用WM_COPYDATA消息来实现两个进程之间传递数据
  • .NET 3.0 Framework已经被添加到WindowUpdate
  • .net core webapi 部署iis_一键部署VS插件:让.NET开发者更幸福
  • .NET Core WebAPI中封装Swagger配置
  • .NET core 自定义过滤器 Filter 实现webapi RestFul 统一接口数据返回格式
  • .net framework 4.0中如何 输出 form 的name属性。