Redis青铜修炼手册(二) --- Redis5大数据类型常用命令

Redis青铜修炼手册(一) — NoSQL&&Redis介绍

前面提到Redis支持五中数据类型。String、List、Hash、Set、Zset。本文主要介绍操作这五种数据类型的一些命令,以及其他常用命令

需要说明的是,Redis中,键的数据类型必须是字符串

String

  • set key value [EX seconds] [PX milliseconds] [NX|XX]

如果key不存在,创建value,如果key存在则value覆盖旧值

127.0.0.1:6379> set hello world
OK
127.0.0.1:6379> get hello
"world"
EX:设置key的过期时间,单位秒。等同于setex key

通过ttl查看还有多少秒过期,返回-1 表示永不过期。-2 表示已过期。

127.0.0.1:6379> set hello world ex 5
OK
127.0.0.1:6379> get hello
"world"
// 通过ttl查看剩余失效时间,单位秒。
127.0.0.1:6379> ttl hello
(integer) 1

// 等同于
127.0.0.1:6379> setex hello 5 world
OK
127.0.0.1:6379> get hello
"world"
PX:设置key的过期时间,单位毫。等同于psetex key milliseconds value 进行保存
127.0.0.1:6379> set hello world px 5000
OK
127.0.0.1:6379> get hello
"world"

// 等同于
127.0.0.1:6379> psetex hello 5000 world
OK
127.0.0.1:6379> get hello
"world"
//查看剩余失效毫秒数
127.0.0.1:6379> pttl hello
(integer) 2516
NX(not exist):只有再key不存在时,才可以设置key的值,

等同于setnx key value

XX:只有key存在时,才可以设置key的值
// 因为键hello,已经存在,所以通过nx设置值 wrold1无效
127.0.0.1:6379> set hello world1 nx
(nil)
127.0.0.1:6379> get hello
"world"

//因为键hello存在 所以通过xx设置值world1 成功
127.0.0.1:6379> set hello world1 xx
OK
127.0.0.1:6379> get hello
"world1"
  • GETSET key value

插入新值,返回旧值,如果该key之前不存在,返回nil

# key1 插入值value1 ,因为key1之前不存在所以返回nil
127.0.0.1:6379> GETSET key1 value1
(nil)
127.0.0.1:6379> GETSET key1 value2
"value1"
  • STRLEN key 返回键对应的值的长度,key不存在的时候返回0 且 只适用于value是字符串的时候。

127.0.0.1:6379> set len abcd
OK
127.0.0.1:6379> STRLEN len
(integer) 4
  • GETRANGE key start end

获取指定区间范围内的值,闭区间

127.0.0.1:6379> set key abc123
OK
// 从0 开始 到末尾结束
127.0.0.1:6379> GETRANGE key 0 -1
"abc123"
// 从0 开始 第二个元素结束。
127.0.0.1:6379> GETRANGE key 0 2
"abc"
  • SETRANGE key offset value

设置指定区间范围内的值,替换对应长度的字符

127.0.0.1:6379> get key
"abc123"
// 从第一个元素开始一次替换成kkk
127.0.0.1:6379> SETRANGE key 1 kkk
(integer) 6
127.0.0.1:6379> get key
"akkk23"
  • MSET key value [key value …]

  • MGET key [key …]

设置、获取多个key、v

127.0.0.1:6379> mset key1 a key2 b
OK

127.0.0.1:6379> MGET key1 key2
1) "a"
2) "b"
  • APPEND key value

在key的值后面追加value,如果key不存在,赋值value给key。返回值的长度

127.0.0.1:6379> get append
(nil)
127.0.0.1:6379> APPEND append hello
(integer) 5
127.0.0.1:6379> get append
"hello"
127.0.0.1:6379> APPEND append  world
(integer) 10
127.0.0.1:6379> get append
"helloworld"
  • INCR key

如果值为数字,则+1,返回+1 之后的结果。
如果key不存在,则默认为0,然后+1。
如果值不是数字,则返回错误

  • DECR key

和INCR唯一的区别就是 -1
计数器场景中常用。

127.0.0.1:6379> get num
(nil)
127.0.0.1:6379> incr num
(integer) 1
127.0.0.1:6379> incr num
(integer) 2
127.0.0.1:6379> set num1 10
OK
127.0.0.1:6379> incr num
(integer) 3
127.0.0.1:6379> DECR decrnum
(integer) -1
127.0.0.1:6379> set decrnum 10
OK
127.0.0.1:6379> decr decrnum
(integer) 9
127.0.0.1:6379> decr decrnum
(integer) 8
  • INCRBY key increment

为key增加一定的值,increment为增量
同理 DECRBY key decrement,为key减少一定的量

INCRBY key increment  
为key增加一定的值,increment为增量
同理 DECRBY key decrement,为key减少一定的量
  • DEL key [key …] 删除key

127.0.0.1:6379> set key1 abc
OK
127.0.0.1:6379> set key2 def
OK
127.0.0.1:6379> del key1 key2
(integer) 2
127.0.0.1:6379> get key1
(nil)
// 判断key2 是否存在,不存在返回0
127.0.0.1:6379> EXISTS key2
(integer) 0

HASH

hash是一个键值对集合。是一个string类型的field和value的映射表。hash可以看做是java中的map<String,Object>。一个 hash 可以存储 2的32次方 – 1个 键值对(40多亿)。

  • HSET key field value

这里的field、value就是字典中的k,v
===>> HSET key value(key value)

插入一条student对象 name。 为codeMan的数据。
创建field成功则返回1.否则返回0

127.0.0.1:6379> HSET student name codeMan
(integer) 1
127.0.0.1:6379> HGET student name
"codeMan"
127.0.0.1:6379> HSET student name codeGirl
(integer) 0
127.0.0.1:6379> HGET student name
"codeGirl"
  • HSETNX key field value 只有当field不存在时,才会生效。

127.0.0.1:6379> HSET student age 13
(integer) 1
// key:student 中的field(age) 已存在,所以返回0
127.0.0.1:6379> HSETNX student age 13
(integer) 0
// 通过HDEL删除field
127.0.0.1:6379> HDEL student age
(integer) 1
// field 不存在 返回1
127.0.0.1:6379> HSETNX student age 13
(integer) 1
127.0.0.1:6379> HGET student age
"13"
// HEXISTS查看是否存在 field 。如果存在返回1.不存在返回0
127.0.0.1:6379> HEXISTS student age
(integer) 1
  • HLEN key 查看key的长度,元素个数

// 返回2 分别是name 和age 两个field
127.0.0.1:6379> HLEN student
(integer) 2
// 通过hkeys 查看key中的field
127.0.0.1:6379> HKEYS student
1) "name"
2) "age"
  • HSTRLEN key field 查看field的长度

127.0.0.1:6379> HGET student name
"codeGirl"
127.0.0.1:6379> HSTRLEN student name
(integer) 8
  • HINCRBY key field increment 对field 增加increment。field对应的值必须为数字

127.0.0.1:6379> HGET student age
"13"
127.0.0.1:6379> HINCRBY student age 5
(integer) 18
127.0.0.1:6379> HGET student age
"18"
  • HMGET key field [field …] 查看多个field的值

  • HMSET key field value [field value …] 对一个key设置多个field 和value

如果field已存在则进行修改,不存在则创建

127.0.0.1:6379> HMGET student name age
1) "codeGirl"
2) "18"
127.0.0.1:6379> HMSET student sex girl name codeMM age 23
OK
127.0.0.1:6379> HMGET student name age sex
1) "code"
2) "23"
3) "girl"
// hvals 返回所有field的值
127.0.0.1:6379> HVALS student
1) "code"
2) "23"
3) "girl"
// 先返回所有field,再返回对应的值
127.0.0.1:6379> HGETALL student
1) "name"
2) "code"
3) "age"
4) "23"
5) "sex"
6) "girl"

LIST

用于存放列表,单值多value

  • LPUSH key value [value …] 依次向元素的左边插入value(LPUSH left push),正进反出

  • RPUSH key value [value …] 依次向元素的右边插入value ,正进正出

  • LRANGE key start stop 取出范围内的元素

向key中插入一个列表。列表顺序与插入顺序一致。返回插入的元素个数

127.0.0.1:6379> lpush code python java golang ruby
(integer) 4
127.0.0.1:6379> rpush code1 python java golang ruby
(integer) 4
127.0.0.1:6379> LRANGE code 0 -1
1) "ruby"
2) "golang"
3) "java"
4) "python"
127.0.0.1:6379> LRANGE code1 0 -2
1) "python"
2) "java"
3) "golang"
  • LPOP key 移除左边第一个元素

  • RPOP key 移除右边第一个元素

127.0.0.1:6379> LRANGE code 0 -1
1) "ruby"
2) "golang"
3) "java"
4) "python"
127.0.0.1:6379> lpop code
"ruby"
127.0.0.1:6379> rpop code
"python"

// z再次查看已经被移除  
127.0.0.1:6379> LRANGE code 0 -1
1) "golang"
2) "java"
  • LINDEX key index 查看第index个元素

//查看第二个元素
127.0.0.1:6379> LINDEX code 1
"java"
127.0.0.1:6379> LINDEX code 0
"golang"
  • LREM key count value 删除count个 value

  • LTRIM key start stop 截取从start开始 stop结尾的元素,重新赋值给key

// 存储abbbbc
127.0.0.1:6379> lpush word a b b b b c
(integer) 6

127.0.0.1:6379> LRANGE word 0 -1
1) "c"
2) "b"
3) "b"
4) "b"
5) "b"
6) "a"
// 删除3个b元素
127.0.0.1:6379> LREM word 3 b
(integer) 3
127.0.0.1:6379> LRANGE word 0 -1
1) "c"
2) "b"
3) "a"

// 截取0 到1个元素 重新赋值给word
127.0.0.1:6379> LTRIM word 0 1
OK
127.0.0.1:6379> LRANGE word 0 -1
1) "c"
2) "b"
  • RPOPLPUSH source destination 从source中取出最右边的元素,并返回。放到destination的头部

127.0.0.1:6379> LRANGE word 0 -1
1) "c"
2) "b"
127.0.0.1:6379> LRANGE word1 0 -1
1) "q"
2) "p"
3) "o"
// 返回word最右边的元素
127.0.0.1:6379> RPOPLPUSH word word1
"b"
127.0.0.1:6379> LRANGE word1 0 -1
1) "b"
2) "q"
3) "p"
4) "o"
  • LINSERT key BEFORE|AFTER pivot value 在最左边的pivot的前面(befor)或者后面(after) 插入value。如果pivot不存在,返回-1 不执行任何操作。

127.0.0.1:6379> LRANGE word 0 -1
1) "c"
// 在c的左边添加a
127.0.0.1:6379> LINSERT word before c a
(integer) 2

127.0.0.1:6379> LRANGE word 0 -1
1) "a"
2) "c"

SET

  • SADD key member [member …]

像key中添加一个或多个 member。有重复元素 自动跳过。最终返回的是实际元素的个数

  • SMEMBERS key 查看元素的内容


127.0.0.1:6379> SADD set a a b
(integer) 2

// 实际元素为b a
127.0.0.1:6379> SMEMBERS set
1) "b"
2) "a"
  • SISMEMBER key member 查看member 是否是key中的成员.

是返回1, 不是返回0

127.0.0.1:6379> SISMEMBER set a
(integer) 1
127.0.0.1:6379> SISMEMBER set c
(integer) 0
  • SPOP key [count] 返回key中的一个元素,并将其从set中移除

  • SRANDMEMBER key [count] 随机返回count个元素,不将其移除

127.0.0.1:6379> SMEMBERS set
1) "b"
2) "a"
127.0.0.1:6379> SRANDMEMBER set
"b"
127.0.0.1:6379> SMEMBERS set
1) "b"
2) "a"
127.0.0.1:6379> SPOP set
"b"
127.0.0.1:6379> SMEMBERS set
1) "a"
  • SREM key member [member …]

移除集合中一个或多个元素.返回移除元素的个数。

127.0.0.1:6379> SADD code java python c
(integer) 3
127.0.0.1:6379> SREM code java c
(integer) 2
127.0.0.1:6379> SMEMBERS code
1) "python"
  • SMOVE source destination member

将source中的member元素移动到destination
如果source总不存在member 则不执行任何操作
如果destination 已经存在member,则只是从source中移除member元素。destination 保持不变

127.0.0.1:6379> SADD word1 a b c d
(integer) 4
127.0.0.1:6379> SADD word2 j k l
(integer) 3
127.0.0.1:6379> SMOVE word1 word2 a
(integer) 1
127.0.0.1:6379> SMEMBERS word2
1) "a"
2) "l"
3) "k"
4) "j"
127.0.0.1:6379> SMOVE word1 word2 u
(integer) 0
// scard key 返回元素个数
127.0.0.1:6379> SCARD word2
(integer) 4
  • SINTER key [key …]

一个key时,返回key的内容
多个key时,返回他们的交集

127.0.0.1:6379> SADD group1 a b c
(integer) 3
127.0.0.1:6379> SADD group2 c f g
(integer) 3
127.0.0.1:6379> SINTER group1
1) "c"
2) "b"
3) "a"
127.0.0.1:6379> SINTER group1 group2
1) "c"

ZSET

  • ZADD key [NX|XX] [CH] [INCR] score member [score member …]

  • ZRANGE key start stop [WITHSCORES] 通过start,stop查看元素

将member及其score(排序分数)插入到有序列表中,如果已经存在member则更新其score。并重新调整其位置

127.0.0.1:6379> ZADD net 1 google.cn 2 biying.com 3 baidu.com
(integer) 3
127.0.0.1:6379> ZRANGE net 0 -1
1) "google.cn"
2) "biying.com"
3) "baidu.com"
  • ZSCORE key member 查看key中member元素的分数

  • ZCOUNT key min max 返回有序集 key 中, score 值在 min 和 max 之间(默认包括 score 值等于 min 或 max )的成员的数量。

  • ZRANGE key start stop [WITHSCORES] 返回key中从start开始stop结尾的元素

  • ZREVRANGE key start stop [WITHSCORES] 返回key中分苏在start到stop区间的元素

  • ZREM key member [member …] 移除一个或多个member

127.0.0.1:6379> ZSCORE net google.cn
"1"
127.0.0.1:6379>
127.0.0.1:6379> ZCOUNT net 0 2
(integer) 2
127.0.0.1:6379> ZRANGE net 0 2
1) "google.cn"
2) "biying.com"
3) "baidu.com"
127.0.0.1:6379> ZRANGE net 0 1
1) "google.cn"
2) "biying.com"
127.0.0.1:6379> ZREVRANGE net 0 1
1) "baidu.com"
2) "biying.com"
127.0.0.1:6379> ZREVRANGE net 0 -1
1) "baidu.com"
2) "biying.com"
3) "google.cn"

欢迎关注公众号”程序员共成长”, 公众号内回复【获取资源】领取程序员专属礼包!!!

点赞