码迷,mamicode.com
首页 > 其他好文 > 详细

redis运维维护

时间:2020-07-09 19:33:37      阅读:85      评论:0      收藏:0      [点我收藏+]

标签:复杂度   www   优势   htm   原子性   table   主从复制   问题:   验证   

【运维】

【1】主从复制

【1.1】命令

#(1)设置主从:在从库运行/或者在从库配置文件上配置 slaveof master_ip master_port
# 注意,如果重新用它指定新主库,会删除当前从库所有数据而去对新主节点数据进行复制 slaveof
192.168.175.129 6379

#(2)断开主从复制
slaveof no one

#(3)配置主从连接验证密码(应该就是主库的 requirepass 值)
masterauth 123456


 

 

【开发技巧】

 

使用 INCR,而不是 x=x+1

  1. 客户端A读取计数为10。
  2. 客户端B读取的计数为10。
  3. 客户A增加11,并将计数设置为11。
  4. 客户端B增加11,并将计数设置为11。

我们希望该值为12,但实际上为11!这是因为以这种方式增加值不是原子操作。在Redis中调用 INCR命令可以防止这种情况的发生,因为它是原子操作
由单个命令实现的所有Redis操作都是原子的,包括对更复杂的数据结构进行操作的操作。因此,当您使用修改某些值的Redis命令时,无需考虑并发访问。

 

使用setnx,而不是 set

  1. 原子性,可以用于实现分布式事务
  2. 更安全,不存在则创建

 

使用 mget/mset,而不是 get/set

同理,其他数据类型也一样。
1000次 get 和 1次 mget 对比表

操作时间
1000次get 1000*1+1000*0.1=1100毫秒=1.1秒
1次mget(组装了100个键值对) 1*1+1000*0.1=101毫秒=0.101秒

 

使用 scan/hscan 等系列,而不是 keys/getall/smembers/zrange

优势:

  1. scan 是渐进式遍历,不会一下子遍历所有key,它的时间复杂度是O(1)
  2. scan 因为是渐进式遍历不会阻塞,不会像keys那样在有大量key时比较容易造成阻塞

问题:

  1. scan 渐进式遍历可以有效解决keys 命令可能产生的阻塞问题,但是 scan也有自己的问题。
  2. 在scan的过程中如果有key有增删改变化,那么遍历的效果可能不尽人意
    • 新增的键可能没有遍历到
    • 遍历出现了重复的键

也就是说,scan 可能无法遍历检索出所有的key,这是我们需要考虑的。

【需要注意的点】

  1. persist 命令会删除任意类型键的过期时间
  2. set系列 命令也会删除字符串等类型的过期时间

【参考文件】

阿里云redis开发规范:https://developer.aliyun.com/article/531067

redis运维维护

标签:复杂度   www   优势   htm   原子性   table   主从复制   问题:   验证   

原文地址:https://www.cnblogs.com/gered/p/13275290.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!