redis小本本(二)

5 篇文章 0 订阅

一、redis传输协议

  1. redis的传输协议被叫做RESP(REdis Serialization Protocol)
    除了两种情况之外,redis的传输协议都是请求-响应形式的,这两种例外情况是:
    — 管道传输:即上一篇文章的第二点,使用MULTI,EXEC,DISCARD进行命令的管道传输,这种情况下,对于管道内的多个命令,执行后发起一次响应
    — 订阅:订阅后客户端不需要发请求,也会收到响应。

  2. 此协议根据不同的数据类型以不同的传输格式进行传输,但是每种传输格式的每一部分之后都以\r\n结尾,主要有以下几种传输格式:
    — 整形:对于传输整形数据来说,都是以冒号开头,格式为: :100\r\n(其中冒号为格式的一部分)
    — 简单字符串类型:格式为以+开头,如发起请求回应的OK,格式为:+ok\r\n
    — 错误类型:redis使用一种特殊的传输格式作为error的传输类型,格式为:-Error\r\n
    — 成块的字符串:大多数的字符串使用这种格式,在字符串前加上$,并在后面跟上字符串的长度,如对于字符串money来说,传输的格式为:$5\r\nmoney\r\n,可以用$-1\r\n来表示一个空字符串
    — 数组:由于数组内有多个元素,所以在数组传输过程中,以*符号加上数组内元素的个数开头,紧跟着数组内的多个元素,例如,对于含有两个字符串的数组来说,传输格式如下:*2\r\n$3\r\nfoo\r\n$4\r\nobar\r\n,代表数组内有两个元素,第一个元素的长度为3,内容为foo,第二个元素的长度为4,内容为obar。可以用*-1\r\n表示空数组。
    数组内也可以放不同的类型,例如*5\r\n:1\r\n:2\r\n:3\r\n:4\r\n$5\r\nmoney\r\n

二、eval
使用eval可以在redis命令中解析Lua脚本
使用格式为:使用双引号中的脚本,获取脚本后面跟着的参数值:在脚本后紧跟着num,代表后面跟着几个参数,这几个参数可以用KEYS[i]来获取,如果脚本后面跟着的的参数数量大于num,其他多余的参数可以使用ARGV[i]来获取
例如:eval “return {KEYS[1],KEYS[2],ARGV[1],ARGV[2]}” 2 key1 key2 first second

三、主从redis
1. redis的主从功能,即一个master可以对应多个slave,每个slave可以获取master的数据,slave除了可以获取master的数据之外,还可以获取级联master的数据。默认情况下可以在slave的配置文件中加入语句:slaveof master-ip master-port可以设置为对应redis的slave,默认情况下slave为仅可读的,不可以写入数据。
2. redis主从数据的同步为异步复制,过程如下:
slave首次连接master的时候,master将所有的数据进行快照,并将快照发送给slave,同时,将在发送过程中接受到的新的客户端请求进行缓存,当快照发送完毕之后,将缓存的请求同步给slave,这样可以达到所有数据的同步
3. 对于没有设置redis持久化的master来说,最好将自动重启功能关闭,原因入下:
设想一种情况,对于一个没有设置redis持久化的master来说,如果master因为一些原因挂掉了,假如他有自动重启设置,同时没有设置持久化的话,当他重启之后其redis内容为空,这时候,当slave去同步数据的时候,同步到的数据就是空的,这是slave就会将它自己内部已经存在的数据刷没,可能会导致严重的后果,所以对于一个没有设置redis持久化的master来说,最好将自动重启功能关闭。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值