关于后端:深入浅出Redis零Redis常用命令的使用

8次阅读

共计 10341 个字符,预计需要花费 26 分钟才能阅读完成。

前言

Redis 是一款基于键值对的数据结构存储系统,它的特点是 基于内存操作、单线程解决命令、IO 多路复用模型解决网络申请、键值对存储与简略丰盛的数据结构 等等

本篇文章作为深入浅出 Redis(一):对象与数据结构的根底篇,将深入浅出的介绍 Redis 中常用命令,如果想理解底层实现能够去观看那篇文章

Redis 中的命令分为两种,一种则是所有对象通用的,另一种是专门为对象应用的

本篇文章将先简略阐明通用命令,再阐明五大对象(string、hash、list、set、zset)专用命令

通用命令

  • keys *查看所有 key
  • sort key 对 key 进行排序,key 只能是 list、set、zset 对象
  • exists key查看这个 key 是否存在,存在为 1,不存在为 0

     127.0.0.1:6379> keys *
     1) "age"
     2) "name"
     127.0.0.1:6379> exists name
     (integer) 1
     127.0.0.1:6379> exists names
     (integer) 0
  • move key db把这个 key 挪动到编号为几的数据库,胜利为 1,失败为 0

     127.0.0.1:6379> move name 3      
     (integer) 1
     127.0.0.1:6379> keys  *
     1) "age"
     127.0.0.1:6379> select 3
     OK
     127.0.0.1:6379[3]> keys *
     1) "name"

    把 name 挪动到了编号为 3 的数据库(第四个数据库)

  • expire key seconds让这个 key 多少秒生效, 返回 1 为胜利,0 为失败
  • ttl key查看这个 key 的无效工夫,返回 - 1 为永恒,- 2 为已过期,其余数字代表无效秒数

     127.0.0.1:6379[3]> expire name 10
     (integer) 1
     127.0.0.1:6379[3]> ttl name
     (integer) 7
     127.0.0.1:6379[3]> ttl name
     (integer) 6
     127.0.0.1:6379[3]> ttl name
     (integer) 5
     127.0.0.1:6379[3]> ttl name
     (integer) 4
     127.0.0.1:6379[3]> ttl name
     (integer) 2
     127.0.0.1:6379[3]> ttl name
     (integer) -2
     127.0.0.1:6379[3]> ttl name
     (integer) -2
     127.0.0.1:6379[3]> ttl name
     (integer) -2
     127.0.0.1:6379[3]> expire name 10
     (integer) 0
     127.0.0.1:6379[3]> keys *
     (empty list or set)
  • type key返回这个 key 的类型

     127.0.0.1:6379[3]> get age
     "1"
     127.0.0.1:6379[3]> type age
     string

String(字符串)

动静字符数组

  • set key value设置一个 key 的值
  • get key失去这个 key 的值
  • append key value给 key 追加字符串 value。如果 key 不存在就相当于 set key

     127.0.0.1:6379> append name "hello"
     (integer) 5
     127.0.0.1:6379> get name
     "hello"
     127.0.0.1:6379> append name ",wrold!"
     (integer) 12
     127.0.0.1:6379> get name
     "hello,wrold!"
  • strlen key取得这个 key 的字符串长度

     127.0.0.1:6379> get name
     "hello,wrold!"
     127.0.0.1:6379> strlen name
     (integer) 12
  • incr key让 key 自增 1
  • decr key让 key 自减 1

     127.0.0.1:6379> set age 18
     OK
     127.0.0.1:6379> incr age
     (integer) 19
     127.0.0.1:6379> decr age
     (integer) 18
  • incrby key increment让 key 减少指定的增量(设置步长)
  • decrby key decrement让 key 缩小指定的减量(设置步长)

     127.0.0.1:6379> get age
     "18"
     127.0.0.1:6379> incrby age 10
     (integer) 28
     127.0.0.1:6379> decrby age 20
     (integer) 8
  • getrange key start end截取字符串【start,end】(这里是下标,从 0 开始,end 如果是 - 1 就算截取到倒数第一位,相似 substring 办法)
  • setrange key offset value替换指定地位开始的字符串

     127.0.0.1:6379> get string
     "hello"
     127.0.0.1:6379> getrange string 0 2
     "hel"
     127.0.0.1:6379> setrange string 0 abcd
     (integer) 5
     127.0.0.1:6379> get string
     "abcdo"
  • setex key seconds value设置 key 的过期秒数(set with expire)

    127.0.0.1:6379> setex name 10 hello
    OK
    127.0.0.1:6379> get name
    "hello"
    127.0.0.1:6379> ttl name
    (integer) -2
    127.0.0.1:6379> get name
    (nil)
  • setnx key value如果 key 不存在就创立,存在就创立失败

     127.0.0.1:6379> setnx name liang
     (integer) 1
     127.0.0.1:6379> get name
     "liang"
     127.0.0.1:6379> setnx name chenliang
     (integer) 0
     127.0.0.1:6379> get name
     "liang"
  • mset key value[key value...]同时设置多个元素
  • mget key [key...]同时获取多个元素

     127.0.0.1:6379[3]> mset user:1:name liang user:1:age 18  
     #这个 key 是精妙的设计,user:{id}:{filed}
     OK
     127.0.0.1:6379[3]> mget user:1
     1) "{name:al,age:3}"
     127.0.0.1:6379[3]> mget user:1:name user:1:age
     1) "liang"
     2) "18"
  • msetnx key value[key value...]在 setnx 的根底上加上可同时创立多个,如果有一个存在,所有都不会创立胜利(原子性)
  • getset先 get 再 set

     127.0.0.1:6379[3]> getset name redis #不存在返回空
     (nil)
     127.0.0.1:6379[3]> getset name mongodb #返回原来设置的 redis, 再设置 mongodb
     "redis"
     127.0.0.1:6379[3]> get name
     "mongodb"
  • rename key newkey重命名 key

     127.0.0.1:6379> set name chenliang
     OK
     127.0.0.1:6379> rename name liang
     OK
     127.0.0.1:6379> get name
     (nil)
     127.0.0.1:6379> get liang
     "chenliang"
  • del key...删除一个或多个 Key

     127.0.0.1:6379> get liang
     "chenliang"
     127.0.0.1:6379> del liang
     (integer) 1
     127.0.0.1:6379> get liang
     (nil)

Hash(哈希)

能够把 hash 当作 map 汇合 Hash:key-<field,value>

无关 hash 的命令基本上是以 h 结尾

能够把以下的 key 看成 hash

  • hset key field value设置 hash 中的字段和值,返回 1 为创立并赋值,0 为曾经有了并笼罩
  • hget key field失去 hash 中一个字段对应的值
  • hmset key field value[field value...]设置同个 hash 的多个字段和值
  • hmget key field field...失去同个 hash 的多个字段对应的值
  • hgetall key取得这个 hash 的数据

     127.0.0.1:6379> hset user:1 name liang
     (integer) 1
     127.0.0.1:6379> hmset user:1 age 18 addres China
     OK
     127.0.0.1:6379> hget user:1 name
     "liang"
     127.0.0.1:6379> hmget user:1 age addres
     1) "18"
     2) "China"
     127.0.0.1:6379> hgetall user:1
     1) "name"
     2) "liang"
     3) "age"
     4) "18"
     5) "addres"
     6) "China"
     127.0.0.1:6379> hset user:1 name chenliang
     (integer) 0
     127.0.0.1:6379> hgetall user:1
     1) "name"
     2) "chenliang"
     3) "age"
     4) "18"
     5) "addres"
     6) "China"
  • hdel key field field...删除一个或多个 hash 指定字段(对应的值就隐没了)

     127.0.0.1:6379> hgetall user:1
     1) "name"
     2) "chenliang"
     3) "age"
     4) "18"
     5) "addres"
     6) "China"
     127.0.0.1:6379> hdel user:1 addres age
     (integer) 2
     127.0.0.1:6379> hgetall user:1
     1) "name"
     2) "chenliang"
     127.0.0.1:6379> hdel user:1 name
     (integer) 1
     127.0.0.1:6379> hgetall user:1
     (empty list or set)
  • hlen key取得 hash 字段数

     127.0.0.1:6379> hmset user:2 name zhangsan age 20 address china
     OK
     127.0.0.1:6379> hlen user:2
     (integer) 3
  • hexists key field判断该 hash 中是否存在 field 该字段,在返回 1,不在返回 0

     127.0.0.1:6379> hgetall user:2
     1) "name"
     2) "zhangsan"
     3) "age"
     4) "20"
     5) "address"
     6) "china"
     127.0.0.1:6379> hexists user:2 name
     (integer) 1
     127.0.0.1:6379> hexists user:2 names
     (integer) 0
  • hkeys key只取得所有 hash 的字段
  • hvalue key只取得所有 hash 的值

     127.0.0.1:6379> hgetall user:2
     1) "name"
     2) "zhangsan"
     3) "age"
     4) "20"
     5) "address"
     6) "china"
     127.0.0.1:6379> hkeys user:2
     1) "name"
     2) "age"
     3) "address"
     127.0.0.1:6379> hvals user:2
     1) "zhangsan"
     2) "20"
     3) "china"
  • hincrby key field increment 给 hash 的字段自增(increment 设置步长)

     127.0.0.1:6379> hset hash count 0
     (integer) 1
     127.0.0.1:6379> hincrby hash count 10
     (integer) 10
     127.0.0.1:6379> hincrby hash count -20
     (integer) -10
  • hsetnx key field value也是给 hash 设置字段和值,与 hset 不同的是如果曾经存在就失败返回 0,如果还没有就胜利返回 1,与 setnx 用法相似

     127.0.0.1:6379> hsetnx user:3 name liang
     (integer) 1
     127.0.0.1:6379> hsetnx user:3 name cheng
     (integer) 0
     127.0.0.1:6379> hvals user:3
     1) "liang"

List(列表)

无关 List 的指令大部分都是以 L 结尾(往左边操作),以 R 结尾(往右边操作)

以下的 key 能够看成列表

  • lpush key value...在队列头(左)插入一个或多个元素
  • rpush key value...在队列尾(右)插入一个或多个元素
  • lrange key start end用法与 range 雷同

     127.0.0.1:6379> lpush list hello1 hello2 hello3
     (integer) 3
     127.0.0.1:6379> lrange list 0 -1
     1) "hello3"
     2) "hello2"
     3) "hello1"
     127.0.0.1:6379> rpush list hello4 hello5 hello6
     (integer) 6
     127.0.0.1:6379> lrange list 0 -1
     1) "hello3"
     2) "hello2"
     3) "hello1"
     4) "hello4"
     5) "hello5"
     6) "hello6"
  • lpop key从队列右边移除一个元素并返回
  • rpop key从队列左边移除一个元素并返回

     127.0.0.1:6379> lpop list
     "hello3"
     127.0.0.1:6379> rpop list
     "hello6"
     127.0.0.1:6379> lrange list 0 -1
     1) "hello2"
     2) "hello1"
     3) "hello4"
     4) "hello5"
  • lindex key index通过下标获取一个元素
  • llen key返回队列的长度

     127.0.0.1:6379> lrange list 0 -1
     1) "hello2"
     2) "hello1"
     3) "hello4"
     4) "hello5"
     127.0.0.1:6379> lindex list 0
     "hello2"
     127.0.0.1:6379> llen list
     (integer) 4
  • lrem count value从列表中删除多少个元素(从头到尾)

     127.0.0.1:6379> lrange list 0 -1
     1) "hello1"
     2) "hello4"
     3) "hello2"
     4) "hello1"
     5) "hello2"
     6) "hello1"
     7) "hello4"
     8) "hello5"
     127.0.0.1:6379> lrem list 2 hello1
     (integer) 2
     127.0.0.1:6379> lrange list 0 -1
     1) "hello4"
     2) "hello2"
     3) "hello2"
     4) "hello1"
     5) "hello4"
     6) "hello5"
  • ltrim key start end将列表修剪到指定范畴(start 从 0 开始 end- 1 示意倒数第一位)

     127.0.0.1:6379> lrange list 0 -1
     1) "hello4"
     2) "hello2"
     3) "hello2"
     4) "hello1"
     5) "hello4"
     6) "hello5"
     127.0.0.1:6379> ltrim list 2 -1
     OK
     127.0.0.1:6379> lrange list 0 -1
     1) "hello2"
     2) "hello1"
     3) "hello4"
     4) "hello5"
  • rpoplpush source destination将 source 的最初一个元素,插到 destination 的头部

     127.0.0.1:6379> lrange list 0 -1
     1) "hello2"
     2) "hello1"
     3) "hello4"
     4) "hello5"
     127.0.0.1:6379> lpush mylist hello1
     (integer) 1
     127.0.0.1:6379> rpoplpush list mylist
     "hello5"
     127.0.0.1:6379> lrange list  0 -1
     1) "hello2"
     2) "hello1"
     3) "hello4"
     127.0.0.1:6379> lrange mylist  0 -1
     1) "hello5"
     2) "hello1"
  • lset key index value将列表中指定的 index 下标的值替换为 value,如果 index 超出范围返回 error

     127.0.0.1:6379> lrange mylist  0 -1
     1) "hello5"
     2) "hello1"
     127.0.0.1:6379> lset mylist 2 hello
     (error) ERR index out of range
     127.0.0.1:6379> lset mylist 0 hello
     OK
     127.0.0.1:6379> lrange mylist 0 -1
     1) "hello"
     2) "hello1"
  • linsert key before|after pivot value在列表中的一个元素 (pivot) 之前 (before) 或之后 (after) 插入另一个元素(value)

     127.0.0.1:6379> lrange mylist 0 -1
     1) "hello"
     2) "hello1"
     127.0.0.1:6379> linsert mylist before hello1 hello0
     (integer) 3
     127.0.0.1:6379> linsert mylist after hello1 hello2
     (integer) 4
     127.0.0.1:6379> lrange mylist 0 -1
     1) "hello"
     2) "hello0"
     3) "hello1"
     4) "hello2"
  • 阻塞

    blpop key 工夫秒

    brpop key 工夫秒

Set(汇合)

无序,不可反复的散列表:Key 用来存值,Value 则是空的(相似 HashSet)

无关 set 的指令基本上都是以 s 结尾

以下的 key 能够看成 set 汇合

  • sadd key value...给 set 汇合中增加一个或多个元素,返回 1 为胜利,0 为失败
  • smembers key查看 set 汇合中所有元素
  • sismember key value判断 value 是不是在 set 汇合中
  • scard key返回 set 汇合中的元素个数

     127.0.0.1:6379> sadd set1 a
     (integer) 1
     127.0.0.1:6379> sadd set1 b
     (integer) 1
     127.0.0.1:6379> sadd set1 c
     (integer) 1
     127.0.0.1:6379> smembers set1
     1) "c"
     2) "b"
     3) "a"
     127.0.0.1:6379> sismember set1 a
     (integer) 1
     127.0.0.1:6379> sismember set1 d
     (integer) 0
     127.0.0.1:6379> scard set1
     (integer) 3
  • srandmember key [count]随机抽取 set 汇合中的多个元素,不写 count 默认一个,返回抽中的元素

     127.0.0.1:6379> srandmember set1
     "b"
     127.0.0.1:6379> srandmember set1
     "c"
     127.0.0.1:6379> srandmember set1 2
     1) "b"
     2) "a"
  • srem key value...指定删除一个或多个 set 汇合中的元素,返回删除的元素

     127.0.0.1:6379> smembers set1
     1) "c"
     2) "b"
     3) "a"
     127.0.0.1:6379> srem set1 a b
     (integer) 2
     127.0.0.1:6379> smembers set1
     1) "c"
  • spop key [count]随机删除 set 汇合中的元素,不写 count 默认一个, 返回删除的元素

     127.0.0.1:6379> smembers set1
     1) "c"
     2) "b"
     3) "a"
     4) "d"
     127.0.0.1:6379> spop set1
     "d"
     127.0.0.1:6379> spop set1 2
     1) "c"
     2) "b"
     127.0.0.1:6379> smembers set1
     1) "a"
  • smove source destination member将 set 汇合 (source) 中指定的一个元素 (member) 挪动到另一个 set 汇合 (destination) 中

     127.0.0.1:6379> smembers set1
     1) "a"
     127.0.0.1:6379> sadd set2 b
     (integer) 1
     127.0.0.1:6379> smove set1 set2 a
     (integer) 1
     127.0.0.1:6379> smembers set1
     (empty list or set)
     127.0.0.1:6379> smembers set2
     1) "b"
     2) "a"
  • sdiff key key..差集(以第一个 set 汇合作为对象去比拟)
  • sinter key key..交加(以第一个 set 汇合作为对象去比拟)【独特好友的实现】
  • sunion key key..并集(以第一个 set 汇合作为对象去比拟)

     127.0.0.1:6379> sadd set1 a b c
     (integer) 3
     127.0.0.1:6379> sadd set2 c d f
     (integer) 3
     127.0.0.1:6379> sdiff set1 set2
     1) "b"
     2) "a"
     127.0.0.1:6379> sinter set1 set2
     1) "c"
     127.0.0.1:6379> sunion set1 set2
     1) "c"
     2) "b"
     3) "f"
     4) "a"
     5) "d"

Zset(有序汇合)

看作是一个有序的汇合,它比汇合多了一个 score 用来排序

把以下的 key 看成有序汇合

  • zadd key score member在同一个有序汇合中增加一个或多个带 score 的值
  • zrangebyscore key min max [withscores]让有序汇合从 min 到 max 这个范畴排序输入,-inf ,+inf 代表负无穷,正无穷,如果加上 withscores 就会把成员的 score 也输入进去
  • zrevrangebyscore key min max [withscores]从 max 到 min,与 zrangebuscore 相似
  • zrevrange key start stop从 score 高到低输入成员 0 代表第一个元素,- 1 代表倒数第一个
  • zrange key start stop从 score 低到高输入成员 0 代表第一个元素,- 1 代表倒数第一个

     127.0.0.1:6379> zadd zset 1 one 2 two 3 three
     (integer) 3
     127.0.0.1:6379> zrangebyscore zset 0 2 
     1) "one"
     2) "two"
     127.0.0.1:6379> zrangebyscore zset -inf +inf
     1) "one"
     2) "two"
     3) "three"
     127.0.0.1:6379> zrangebyscore zset -inf +inf withscores
     1) "one"
     2) "1"
     3) "two"
     4) "2"
     5) "three"
     6) "3"
     127.0.0.1:6379> zrevrangebyscore zset +inf -inf withscores
     1) "three"
     2) "3"
     3) "two"
     4) "2"
     5) "one"
     6) "1"
     127.0.0.1:6379> zrange zset 0 -1
     1) "one"
     2) "two"
     3) "three"
     127.0.0.1:6379> zrevrange zset 0 -1
     1) "three"
     2) "two"
     3) "one"
  • zrem key member member...移除有序汇合中的成员
  • zcard key取得有序汇合中的个数
  • zcount key min max取得 min~max 范畴之间的成员数量

     127.0.0.1:6379> zrange zset 0 -1
     1) "one"
     2) "two"
     3) "three"
     127.0.0.1:6379> zrem zset one
     (integer) 1
     127.0.0.1:6379> zrange zset 0 -1
     1) "two"
     2) "three"
     127.0.0.1:6379> zcard zset
     (integer) 2
     127.0.0.1:6379> zcount zset -inf +inf
     (integer) 2

最初(一键三连求求拉~)

本篇文章笔记以及案例被支出 gitee-StudyJava、github-StudyJava 感兴趣的同学能够 stat 下继续关注喔 \~

有什么问题能够在评论区交换,如果感觉菜菜写的不错,能够点赞、关注、珍藏反对一下 \~

关注菜菜,分享更多干货,公众号:菜菜的后端私房菜

本文由博客一文多发平台 OpenWrite 公布!

正文完
 0