Fari

Redis

《Redis开发与运维》笔记

scan命令用于增量遍历keys,类似于keys命令,但是scan命令可以指定分页以达到增量遍历的目的,时间复杂度为O1 但是如果在scan过程中key数量发生了变化,则获取的结果将和实际有偏差

除了五种数据结构的存储,redis还提供了其他的功能

慢查询分析、pipeline、事务于Lua、Bitmaps、HyperLoglog、发布订阅、GEO file

慢查询

每次执行命令分4步:

  1. 客户端向redis服务端发送命令
  2. 命令排队
  3. 执行命令
  4. 返回结果 其中,慢查询分析只到前3步
Pipeline

批处理命令(如mget、mset)有效地节约了多命令执行时间,但大部分命令不支持批量操作,pipeline就是将多条命令打包一起发送,然后一起返回,降低了命令执行时间

事务

redis提供了简单的事务功能,将多个命令放在 multi 和 exec 之间即可,事务过程中的命令并没有真正执行 file

注:

  1. redis中事务不支持回滚,如果事务中某个命令出错,其前面的命令仍会执行。
  2. 如果在事务中某个事务中用到的key被其他客户端修改了,则不会执行该事务,类似于乐观锁 但是这些问题可以使用Lua脚本解决,即使用一段脚本来控制redis,且是原子操作
Bitmaps

Bitmaps可以实现对位操作 其本质就是一个字符串,例如 a 的二进制为1001,虽然Bitmaps存储的是 a,但可以对其二进制进行操作

setbit key 20 1 // 设置key的第20位的值为1(只能是01) getbit key 20 // 获取key的第20位的值