《Redis 开发与运维》
《Redis 设计与实现》

#Redis 开发与运维

  • set key value nx只有不存在时才设置 key 的值,同setnx
  • set key value xx只有存在时才设置 key 的值。
  • type key查询 redis 的 key 类型。
  • object encoding key判断 key 的内部编码类型。
1
2
3
4
127.0.0.1:6379> rpush l a b c d e f
(integer) 6
127.0.0.1:6379> object encoding l
"quicklist"
  • exists key判断 key 是否存在。
  • incr key自增 key。

    1. 值不是整数,返回错误。
    2. 值是整数,返回自增后的结果。
    3. 键不存在,按照值为 0 自增,返回结果为 1。
  • decr keyincrby key incrementdecrby key decrementincrbyfloat和加减相关。

  • hset key field value设置哈希值。

  • hset nx key field value不存在时设置。

  • hmset key value key value批量设置

  • hlen key计算 field 的个数。

  • hkeys key返回所有field

  • hvals key获取所有value

  • hgetall key获取所有field+value

  • lrange key start end 获取指定范围内的元素列表

  • linsert key before|after pivot value 向某个元素前或者后插入元素

  • lrange key start end 获取指定范围内的元素列表

    1. 索引下标从左到右分别是 0 到 N-1,但是从右到左分别是-1 到-N
    2. lrange 中的 end 选项包含了自身
  • lindex key index 获取列表指定索引下标的元素

  • llen key 获取列表长度

  • lrem key count value 删除指定元素

    1. count>0,从左到右,删除最多 count 个元素
    2. count<0,从右到左,删除最多 count 绝对值个元素
    3. count=0,删除所有
  • ltrim key start end 按照索引范围修剪列表

  • lset key index newValue 修改指定索引下标的元素

  • blpop|brpop key [key ...] timeout 阻塞式弹出

    1. 列表为空则等待 timeout 的时间,如果为 0 则一直等待
    2. 列表不为空会立即返回
    3. 如果多个客户端对同一个键执行 brpop,那么最先执行 brpop 命令的客户端可以获取到弹出的值

#集合

  • sadd key element [element ...] 添加元素
  • srem key element [element ...] 删除元素,返回结果为成功删除元素个数
  • scard key 计算元素个数,时间复杂度为 O(1)
  • sismember key element 判断元素是否在集合,在返回 1,不在返回 0
  • srandmember key [count] 随机从集合返回指定个数元素,不写默认为 1
  • spop key [count] 从集合随机弹出元素,元素会从集合中删除
  • smembers key 获取所有元素
  • sinter key [key ...] 求多个集合的交集
  • suinon key [key ...] 求多个集合的并集
  • sdiff key [key ...] 求多个集合的差集
  • sinterstore destination key [key ...] 将交集的结果保存
  • suionstore destination key [key ...] 将并集的结果保存
  • sdiffstore destination key [key ...] 将差集的结果保存

#有序集合

  • zadd key [NX|XX] [GT|LT] [CH] [INCR] score member [score member ...] 添加成员
    1. CH 返回此次操作后,有序集合元素和分数发生变化的个数
    2. INCR 对 score 做增加,相当于后面介绍的 zincrby
  • zcard key 计算成员个数
  • zscore key member 计算某个成员的分数,不存在则返回 nil
  • zrank key member 计算成员的排名(从分数从低到高)
  • zrevrank key member 计算成员的排名(从分数从高到低)
  • zrem key member [member ...] 删除成员
  • zincrby key increment member 增加成员的分数
  • zrange/zrevrange key start end [withscores] 返回指定排名范围的成员
    1. withscores 同时返回成员的分数
  • zrangebyscore/zrevrangebyscore key min max [WITHSCORES] [LIMIT offset count] 返回指定分数范围的成员

#键管理

  • rename key newkey 键重命名,如果键本身存在会被覆盖
    1. 本质上要删除旧 key 和对应的 value 如果大 key 会阻塞(?为什么不直接复制呢?)
  • renamenx key newkey 不会被覆盖的重命名
  • randomkey 随机返回一个键
  • persist 清除键的过期时间

#多实例

  • 客户端连接redis-cli -h 127.0.0.1 -p 6378
  • slaveof host port成为某个实例的从实例

#复制

  • Redis 启动后有一个 40 位的 16 进制字符串作为运行 id,如果主节点的运行 id 变了,从节点要做全量复制。
1
127.0.0.1:6379> info server
  • debug reload可以不重启去变更一些配置。
    1. debug reload命令会阻塞当前 Redis 节点主线程,阻塞期间会生成本地 RDB 快照并清空数据之后再加载 RDB 文件。

#阻塞

1
redis-cli --bigkeys