Redis开发与运维 笔记一

全局命令
dbsize命令在计算键总数时不会遍历所有键,而是直接获取Redis内置的键总数变量,所以dbsize命令的时 间复杂度是O(1)。而keys命令会遍历所有键,所以它的时间复杂度是O(n),当Redis保存了大量键时,线上环境禁止使用

单线程架构
Redis使用了单线程架构和I/O多路复用模型来实现高性能的内存数据库服务。

为什么Redis使用单线程模型会达到每秒万级别的处理能力呢?可以将其归结为三点:

  1. 纯内存访问,Redis将所有数据放在内存中,内存的响应时长大约为100纳秒,这是Redis达到每秒万级别访问的重 要基础。
  2. 非阻塞I/O,Redis使用epoll作为I/O多路复用技术的实现,再加上Redis自身的事件处理 模型将epoll中的连接、读写、关闭都转换为事件,不在网络I/O上浪费过多的时间。
  3. 第三,单线程避免了线程切换和竞态产生的消耗。

但是单线程会有一个问题:对于每个命令的执行时间是有要求的。如果某个命令执行过长,会造成其他 命令的阻塞,对于Redis这种高性能的服务来说是致命的,所以Redis是面向快速执行场景的数据库。


字符串

字符串类型的值实际可以是字符串(简单的字符串、复杂的字符串(例如JSON、XML))、数字(整数、浮点数),甚至是二进制(图片、音频、视频),但是值最大不能超过512MB。

命令
incr命令用于对值做自增操作,返回结果分为三种情况:
·值不是整数,返回错误。
·值是整数,返回 自增后的结果。
·键不存在,按照值为0自增,返回结果为1。

典型的业务场景
缓存
业务名:对象名:id:[属性]”作为键名(也可以不是分号)。例如MySQL的数据库名为vs,用户表名为 user,那么对应的键可以用"vs:user:1""vs:user:1:name"来表示,如果当前Redis只被一个业务使 用,甚至可以去掉“vs:”。如果键名比较长,例如“user:{uid}:friends:messages:{mid}”,可以 在能描述键含义的前提下适当减少键的长度,例如变为“u:{uid}:fr:m:{mid}”,从而减少由于键 过长的内存浪费。


键管理

单个键管理
如果在rename之前,键java已经存在,那么它的值也将被覆盖。
为了防止被强行rename,Redis提供了renamenx命令,确保只有newKey不存在时候才被覆盖。

在使用重命名命令时需要注意
·由于重命名键期间会执行del命令删除旧的键,如果键对应的值比较大,会存在阻塞Redis的可能性,这点不要忽视。
·如果rename和renamenx中的key和newkey如果是相同的,在Redis3.2和之前版本返回结果略有不同。 Redis3.2中会返回OK

键过期
ttl命令和pttl都可以查询键的剩余过期时间,但是pttl精度更高可以达到毫秒级别,有3种返回值:
·大于等于0的整数:键剩余的过期时间(ttl是秒,pttl是毫秒)。
·-1:键没有设置过期时间。
·-2:键不存在。

如果过期时间为负值,键会立即被删除,犹如使用del命令一样。
persist命令可以将键的过期时间清除。
对于字符串类型键,执行set命令会去掉过期时间,这个问题很容易在开发中被忽视。

迁移键
迁移过程分为两步
1)在源Redis上,dump命令会将键值序列化,格式采用的是RDB格式。
2)在目标Redis上,restore命令 将上面序列化的值进行复原,其中ttl参数代表过期时间,如果ttl=0代表没有过期时间。

有关dump+restore有两点需要注意:第一,整个迁移过程并非原子性的,而是通过客户端分步完成的。 第二,迁移过程是开启了两个客户端连接,所以dump的结果不是在源Redis和目标Redis之间进行传输。

migrate命令具有原子性
第一,整个过程是原子执行的,不需要在多个Redis实例上开启客户端的,只需要在源Redis上执行 migrate命令即可。第二,migrate命令的数据传输直接在源Redis和目标Redis上完成的。第三,目标Redis 完成restore后会发送OK给源Redis,源Redis接收后会根据migrate对应的选项来决定是否在源Redis上删 除对应的键。

遍历键
上面为了遍历所有的键,pattern直接使用星号,这是因为pattern使用的是glob风格的通配符:

  • *代表 匹配任意字符。
  • 代表匹配一个字符。
  • []代表匹配部分字符,例如[1,3]代表匹配1,3,[1-10]代表匹 配1到10的任意数字。
  • \x用来做转义,例如要匹配星号、问号需要进行转义。

数据库管理
默认使用的就是0号数据库,当选择其他数据库时,会有[index]的前缀标识,其中index就是数据库的索引下标。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值