redis 常用命令

记录一下redis 常见的命令,redis练习命令官网

启动停止命令
  • 启动

    redis-server
    

    以配置项的方式启动

    redis-server --{configKey1} {configvalure1}
    

    配置文件方式启动

     redis-server /opt/redis/redis.conf
    
  • 停止
    使用redis-cli 客户端

    redis-cli shutdown [nosave|save]
    

    redis 关闭过程:

    • 断开与客户端的连接
    • 持久化文件生成
      关于持久化文件的生成可以是用save|nosave选项控制

redis-cli
redis-cli -h {server_ip} -p {port} -a {password}

数据库命令
  • 切换数据库

    select {dbindex}
    

    redis 默认配置0到15 总共16个数据库,各个数据库之间的数据没有关联。

  • 清除当前数据库

    flushdb
    
  • 清除所有的数据库

    flushall 
    

键管理相关命令
  • 查看所有键

    keys *
    
  • 键总数

    dbsize
    
  • 检查键是否存在

    exist {key}
    
  • 删除键

    del {key}
    
  • 键的数据结构类型

    type {key}
    
  • 键的内部编码

    object encoding {key}
    

    键一共有5种,但其类型编码有多种


    image.png

键过期相关
  • 键过期
    expire {key} seconds
    

字符串
  • 设置值

    set {key} {value} [ex {seconds}] [px {milliseconds}] [nx|xx]
    
  • 获取值

    get {key}
    

    如果获取的键不存在,则返回nil

  • 批量设置值

    mset {key} {value} {key} {value} ...
    
  • 批量获取值

    mget {key} {key} ...
    
  • 计数

    incr {key}
    

    结果分为3种情况:

    • 值不是整数
    • 值是整数,返回自增后的结果
    • 键不存在,按照值为0自增,返回结果为1
      类似的,还提供了自减命令decr {key},自增指定数字 incrby {key} {increment},自减指定数字decrby {key} {decrement},自增浮点数incrbyfloat key increment
  • 追加

    append {key} {value}
    
  • 返回value的长度

    strlen {key}
    

哈希
  • 设置
    hset {key} {field} {value}
    eg: hset user:1 name tom
    
    设置成功返回1,反之返回0
  • 获取
    hget {key} {field}
    eg: hget user1:1 name
    
    如果键不存在,则返回nil
  • 批量设置
  • 批量获取
  • 删除
    hdel {key} {field} {field} ...
    
    返回删除的个数
  • 计算个数
    hlen key
    
  • 判断 field 是否存在
    hexists {key} {field}
    
    {key}中包含{field}域,返回1,不包含返回0
  • 获取所有的 field
    hkeys {key}
    
  • 获取所有的 value
    hvals {key}
    
  • 获取所有的 field-value
    hgetall {key}
    

列表
  • 添加

    • 从右向左插入元素

      rpush {key} {value} {value} ...
      

      eg: rpush list 100 4 89 55 11,将会是:


      image.png
    • 从左向右插入元素

      lpush {key} {value} {value} ...
      

      eg: lpush list 100 4 89 55 11,将会是:


      image.png
    • 向某个元素的前或者后插入元素

      linsert {key} befor|after {pivot} {value}
      
  • 查询

    • 获取指定范围的元素
      lrange {key} {start} {end}
      
    • 获取指定索引的元素
      lindex {key} {index}
      
  • 获取列表元素数量

    llen {key}
    
  • 删除

    • 从左侧弹出元素
      lpop {key}
      
    • 从右侧弹出元素
      rpop {key}
      
    • 删除指定元素
      lrem {key} {count} {value}
      
      从列表中找到等于value的元素,按照count的不同分为3种情况
      • count > 0
      • count < 0
      • count = 0 删除所有
  • 按照范围修剪列表

    ltrim {key} {start} {end}
    eg: ltrim lis 1 3   // 将会只保留第[2, 4]
    
  • 修改指定索引下标的元素

    lset {key} {index} {newValue}
    
  • 阻塞操作

    bloop {key} 
    

集合

集合中不允许有重复的元素,并且集合中的元素是无序的,不能通过下标获取元素。但是集合方便的是可以多个集合取交集,并集,差集。

集合的内部编码有2种:

  • 添加元素
    sadd {key} {element} [{element} ...]
    
    返回结果为添加成功的元素个数
  • 删除元素
    srem {key} {element} [{element}...]
    
    返回结果为删除成功的元素个数
  • 计算元素个数
    scard {key}
    
  • 判断元素是否在集合中
    sismember {key} {element}
    
  • 随机从集合返回指定个数元素
    srandmember {key} [count]
    
    [count]为可选参数,默认为1
  • 从集合随机弹出元素
    spop {key} [count]
    
    3.2版本后支持[count]为可选参数,默认为1
  • 获取所有元素
    smembers {key} 
    
  • 求多个集合的交集
    sinter {key} {key} ...
    
    还可以将结果保存在新的集合中
    sinterstore {destination} {key} {key} ...
    
  • 求多个集合的并集
    sunion {key} {key}
    
    还可以将结果保存在新的集合中
    sunionstore {destination} {key} {key} ...
    
  • 求多个集合的差集
    sdiff {key} {key}
    
    还可以将结果保存在新的集合中
    sdiffstore {destination} {key} {key} ...
    

有序集合

有序集合中的元素可以排序,它给每个元素设置一个 score 作为排序的依据。

有序集合.png
  • 添加成员

    zadd {key} {score} {member} [{score} {member} ...]
    

    有序集合相比集合提供了排序手段,但是也产生了代价,zadd 时间复杂度为O(log(n)),sadd 的时间复杂度为O(1)

  • 计算成员个数

    zcard {key}
    
  • 查看成员分数

    zscore {key} {member}
    

    如果成员不存在,则返回nil

  • 计算成员排名
    zrank 按照从低到高的顺序返回排名

    zrank {key} {member}
    

    zrevrank 按照从高到低的顺序返回排名

    zrevrank {key} {member}
    
  • 删除成员

    zrem {key} {member} [{member}...]
    
  • 增加成员分数

    zincrby {key} {increment} {member}
    

    例如下面,给 tom 增加 9分

    > zincrby user:ranking 9 tom
    260.0
    
  • 返回指定排名范围的成员
    zrange 按照从低到高的顺序

    zrange {key} {start} {end} [withscores]
    

    例如返回排名范围 [0, 2]的元素:

    > zrange user:ranking 0 2
    1) "tina"
    2) "tom"
    3) "jack"
    

    如果加上withscores,同时会返回成员的分数

    > zrange user:ranking 0 2
    1) "tina"
    2) 201.0
    3) "tom"
    4) 251.0
    5) "jack"
    6) 300.0
    

    zrevrange 按照从高到低的顺序

    zrevrange {key} {start} {end} [withscores]
    
  • 返回指定分数范围的成员
    zrangebyscore 按照从高到低的顺序

    zrangebyscore {key} {min} {max} [withscores]
    

    例如返回 [200, 280] 范围的元素

    zrangebyscore user:ranking 200 280
    1) "tina"
    2) "tom"
    

    同时 min 和 max 还支持2个特殊的 -inf +inf 分表表示无穷小和无穷大。

    zrangebyscore user:ranking -inf +inf
    1) "tina"
    2) "tom"
    3) "jack"
    

    zrevrangebyscore 按照从低到高的顺序

    zrevrangebyscore {key} {min} {max} [withscores]
    
  • 返回指定分数范围成员个数

    zcount {key} {min} {max}
    
  • 删除指定排名(升序)范围内的元素

    zremrangebyrank {key} {start} {end}
    

    例如删除排名[0, 2] 范围内的元素

    > zremrangebyrank user:ranking 0 2
    3
    
  • 删除指定分数范围内的元素

    zremrangebyscore {key} {min} {max}
    

Info 命令

使用Redis 时,通常需要诊断很多问题,在诊断之前,可以通过强大的Info命令,可以清晰的知道Redis 内部运行的一系列参数。
Info 命令显示的信息比较多,包括9大块:

  1. Server 服务器运行的环境参数
  2. Clients 客户端相关信息
  3. Memory 服务器运行内存统计
  4. Persistence 持久化信息
  5. Stats 通用统计信息
  6. Replication 主从复制相关信息
  7. CPU CPU使用相关情况
  8. Cluster 集群信息
  9. KeySpace: 键值对统计数量信息

这里介绍一些常用的:

  • 查看Redis 每秒执行了多少次命令

    Redis 每秒可以执行10万次命令,CPU 几乎被完全榨干,

  • Redis 连接了多少客户端

    redis-client clients
    

    通过这个可以观察是否确定意料之外的连接,如果发现数量不对劲,那么可以使用client list指令列出所有的客户端地址来进一步确定。

    还需要注意的是,它表示因为超出最大连接数限制而被拒绝的客户端连接次数,如果这个数字很大,那么意味着服务器最大连接数设置得过低,需要调整maxclients 参数。

  • Redis 内存占用多大

    redis-cli info memory
    

    如果redis内存占用过大,并且在业务上没有太多压缩的空间,那么可以考虑集群化了。

  • 复制积压缓冲区多大
    复制积压缓冲区大小非常重要,它严重影响了主从复制的效率。当从节点因为网络原因临时断开了对主节点的复制,然后网络恢复又重新连接上的时候,这段断开的时间内发生在主节点上的修改操作指令都会被放在积压缓冲区内,这样从节点可以通过积压缓冲区恢复中断的主从同步过程。


    image.png

    积压缓冲区是环形的,后来的指令会覆盖掉前面的内容,如果从节点断开的时间过长,或者缓冲区的容量设置得太小,都会导致从节点无法快速恢复中断的主从同步过程。

慢查询相关

慢查询日志就是系统在命令执行前后计算每条命令的执行时间,当超过预设阈值,就将这条命令的相关信息记录下来。

  • 慢查询的两个配置
    slowlog-log-slower-than 预设阈值,单位是微秒,默认值是10000,值设置为0会记录所有的命令。
    slowlog-max-len Redis 使用了一个列表来存储慢查询日志,slowlog-max-len 就是列表的最大长度,当慢查询日志已经处于最大长度时,最早插入的一条命令将会从列表中移除。

    在 Redis 中有两种修改配置的方法:

    1. 修改配置文件
    2. 使用config set 命令动态修改
      config set slowlog-log-slower-than 20000
      config set slowlog-max-len 1000
      config rewrite  # 可选,将当前配置持久化到本地配置文件
      
    • 配置建议
      1. 线上建议调大慢查询列表
      2. 默认值为10毫秒,对于高流量场景,如果命令执行时间在1毫秒以上,则OPS最多可支撑不带1000,所以高OPS场景,建议设置为1毫秒。
  • 获取慢查询日志

    slowlog get [n]   # n 指定条数
    1)  1) (integer) 666  # 慢查询标识id
        2) (integer) 1456786500    # 时间戳
        3) (integer) 12006      # 记录命令耗时
        4) 1) "BGREWRITEAOF"  # 命令
    
  • 获取慢查询日志列表的当前的长度

    slowlog len
    
  • 重置慢查询日志

    slowlog reset
    
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,539评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,911评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,337评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,723评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,795评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,762评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,742评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,508评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,954评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,247评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,404评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,104评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,736评论 3 324
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,352评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,557评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,371评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,292评论 2 352

推荐阅读更多精彩内容