Redis基本类型相关命令(实践看返回值)

文章目录

  • String类型常用命令
    • SET GET
    • GETRANGE SETRANGE
    • GETSET
    • MSET MGET
    • SETEX
    • SETNX
    • STRLEN
    • SETBIT GETBIT
  • Hash类型常用命令
    • HSET HGET HMSET HMGET
    • HSETNX
    • HDEL
    • HEXISTS
    • HGETALL HKEYS HVALS
    • HLEN
    • 重点 HSCAN
  • List类型常用命令
    • LPUSH LPUSHX LSET RPUSH RPUSHX LRANGE
    • LINSERT LINDEX
    • LPOP RPOP BLPOP BRPOP LREM
  • Set类型常用命令
    • SADD
    • SCARD SMEMBERS SRANDMEMBER
    • SDIFF SDIFFSTORE SINTER SINTERSTORE SUNION SUNIONSTORE (差集 交集 并集)
    • SMOVE SPOP SREM
    • 重点 SSCAN key cursor [MATCH pattern] [COUNT count]

redis中key值是二进制安全的,意味着可以用任何二进制序列作为key的值。
redis当中支持五种基本数据类型:string、list、hash、set、sort set 三种扩展类型:HyperLogLog、GEO、Stream

本片文章讲解基本类型的常用命令 扩展类型

String类型常用命令

命令 描述 返回值
set命令 共8个
set key value 设置指定key的值 OK
setex key seconds value 设置指定key的值 并设置key的过期时间(秒单位) OK
psetex key millseconds value 设置指定key的值 并设置key的过期时间(毫秒单位) OK
setnx key value key不存在时设置key的值 设置存在的key返回0 设置不存在的key返回1
setrange key offset value 用value参数覆盖key从偏移量offset开始的值 返回字符串的长度
setbit key offset value 设置或清除指定key偏移量上的位(bit) 为旧key对应的bit位的值
mset key1 value1 key2 value 同时设置多个key的值 OK
msetnx key1 value1 key2 value 同时设置多个key的值 key不存在 OK
get命令 共5个
get key 获取指定key的值
getrange key start end 返回key中字符串值的子字符 下标从0开始 包含end的下表字符
getset key value 设置指定key的值 并返回旧值 返回旧值
getbit key offset 获取key指定偏移量上的位(bit) 0,1
mget key1 key2 获取一个或多个key的值
其他命令 共7个
strlen 返回key所存储字符串的长度 字符串长度
incr key 将key中存储的数字值增一
incrby key 将key中存储的数字值增指定值
incrbyfloat key increment 将key中存储的数字值增指定浮点值
decr key 将 key 中储存的数字值减一
decrby key 将 key 中储存的数字值减指定值
append key 如果 key 已经存在并且是一个字符串, APPEND 命令将指定的 value 追加到该 key 原来值(value)的末尾

下面抽一些命令实践

SET GET

set 命令有返回值ok get命令返回key的value值

127.0.0.1:6379> set chen luo
OK
127.0.0.1:6379> get chen
"luo"

GETRANGE SETRANGE

getrange 返回key中字符串值的子字符 下标从0开始 包含end的下表字符
setrange 用 value 参数覆写给定 key 所储存的字符串值,从偏移量 offset 开始,返回字符串的长度

127.0.0.1:6379> getrange chen 0 4
"luo"
127.0.0.1:6379> getrange chen 1 2
"uo"
127.0.0.1:6379> getrange chen 0 1
"lu"
127.0.0.1:6379> setrange key4 2 off
(integer) 6

GETSET

设置制定key新的value值,并且返回旧值

127.0.0.1:6379> getset chen luo2
"luo"

MSET MGET

同时设置或取多个key的值

127.0.0.1:6379> mset key1 value1 key2 value2
OK
127.0.0.1:6379> mget key1 key2
1) "value1"
2) "value2"

SETEX

设置key过期时间(秒单位)
如下 设置一秒 一秒后过期 返回nil

127.0.0.1:6379> setex key3 1 value3
OK
127.0.0.1:6379> get key3
(nil)

SETNX

设置存在的key返回0 设置不存在的key返回1

127.0.0.1:6379> setnx key3 value3
(integer) 0
127.0.0.1:6379> setnx key4 value4
(integer) 1

STRLEN

返回key所存储字符串值得长度

127.0.0.1:6379> strlen key4
(integer) 6

接下来介绍bit命令
前提:在redis当中,string类型是以二进制存储的 所以有bit命令设置获取指定bit位的值

SETBIT GETBIT

设置或清除指定key偏移量上的位 只能设置0 1

a 对应的 ASCII 码是 97,97 转为二进制是 01100001 b对应的ASCII码是01100010

讲b对应的ASCII码(01100010)修改为a对应的ASCII码(01100001)获取key5 得到结果为a

setbit 设置值得返回值为旧key对应的bit位的值

127.0.0.1:6379> set key5 b
OK
127.0.0.1:6379> get key5
"b"
127.0.0.1:6379> getbit key5 3
(integer) 0
127.0.0.1:6379> getbit key5 2
(integer) 1
127.0.0.1:6379> getbit key5 7
(integer) 0
127.0.0.1:6379> getbit key5 6
(integer) 1
127.0.0.1:6379> setbit key5 6 0
(integer) 1
127.0.0.1:6379> setbit key5 7 1
(integer) 0
127.0.0.1:6379> get key5
"a"

Hash类型常用命令

redis hash是一个string类型的filed(字段)和value(值)的映射表,每个hash可以存储 2^32 - 1 键值对(40多亿)

注意hash的set没有设置过期时间命令

命令 描述 返回值
HSET key field value 将hash表key中的字段field的值设为value
HMSET key field1 value1 [field2 value2 ] 将hash表中key的多个字段设置value
HSETNX key field value 只有在field不存在是设置哈希表字段的值
HGET key field 获取hash表中key中指定字段的值
HMGET key field1 [field2] 获取所有给定字段的值
HEXISTS key field 查看哈希表 key 中,指定的字段是否存在
HGETALL key 获取在哈希表中指定 key 的所有字段和值
HKEYS key 获取所有哈希表中的字段
HVALS key 获取哈希表中所有值
HDEL key field1 [field2] 删除一个或多个哈希表字段
HLEN key 获取哈希表中字段的数量
HSCAN key cursor [MATCH pattern] [COUNT count] 迭代哈希表中的键值对
HINCRBY key field increment 为哈希表 key 中的指定字段的整数值加上增量 increment
HINCRBYFLOAT key field increment 为哈希表 key 中的指定字段的浮点数值加上增量 increment

HSET HGET HMSET HMGET

hset的返回值为1 hmset返回值为OK

127.0.0.1:6379> hset key10 hash1 value1
(integer) 1
127.0.0.1:6379> hget key10 hash1
"value1"
127.0.0.1:6379> hmset key11 hash1 value1 hash2 value2
OK
127.0.0.1:6379> hmget key11 hash1 hash2
1) "value1"
2) "value2"

HSETNX

只有在字段不存在时才能设置成功
设置成功返回1 设置失败返回0

127.0.0.1:6379> hsetnx key12 hash1 value1
(integer) 1
127.0.0.1:6379> hsetnx key12 hash1 value
(integer) 0
127.0.0.1:6379> hget key12 hash1
"value1"

HDEL

删除一个或多个hash表字段 存在字段删除成功返回1 不存在字段删除失败返回0

127.0.0.1:6379> hdel key12 hash1
(integer) 1
127.0.0.1:6379> hdel key12 hash1
(integer) 0

HEXISTS

查看hash表中指定的字段是否存在

不存在返回0 存在返回1

127.0.0.1:6379> hexists key12 hash1
(integer) 0
127.0.0.1:6379> hset key12 hash1 value1
(integer) 1
127.0.0.1:6379> hexists key12 hash1
(integer) 1

HGETALL HKEYS HVALS

hgetall获取key中所有的字段和值

127.0.0.1:6379> hmset hash1 field1 value1 field value2
OK
127.0.0.1:6379> hgetall hash
(empty list or set)
127.0.0.1:6379> hgetall hash1
1) "field1"
2) "value1"
3) "field"
4) "value2"
127.0.0.1:6379> hkeys hash1
1) "field1"
2) "field"
127.0.0.1:6379> hvals hash1
1) "value1"
2) "value2"

HLEN

获取hash表中字段的数量

127.0.0.1:6379> hlen hash1
(integer) 2

重点 HSCAN

遍历hash中所有符合条件的field或者value
每次开始hscan redis返回0表示迭代开始
每找到一个匹配的field 或者value返回下一个游标
如下:
获取所有的field和value

HSCAN是为大数据而生的,注意在一定情况下count字段会失效!!下面失效的原因是ziplists类型编码的Hash或者Sorted Set集合(说明这些集合里面的元素占用的空间足够小),那么SCAN命令会返回集合中的所有元素,直接忽略COUNT属性
失效的多种情况可以看下面的链接
解惑:Redis的HSCAN命令中COUNT参数的"失效"场景

127.0.0.1:6379> hgetall hash1
 1) "key1"
 2) "cc"
 3) "key2"
 4) "11"
 5) "key3"
 6) "ccc"
 7) "key4"
 8) "22"
 9) "key5"
10) "cccc"
11) "key6"
12) "33"
127.0.0.1:6379> hscan hash1 0 match key1 count 10
1) "0"
2) 1) "key1"
   2) "cc"
127.0.0.1:6379> hscan hash1 3 match key2 count 10
1) "0"
2) 1) "key2"
   2) "11"
127.0.0.1:6379> hscan hash1 3 match key* count 2
1) "0"
2)  1) "key1"
    2) "cc"
    3) "key2"
    4) "11"
    5) "key3"
    6) "ccc"
    7) "key4"
    8) "22"
    9) "key5"
   10) "cccc"
   11) "key6"
   12) "33"

List类型常用命令

list是按照插入顺序排序
记忆法: L开头的都是插入头部取头部元素 R开头的都是插入尾部取尾部元素

命令 描述 返回值
LPUSHX key value 将一个值插入到已存在的列表头部
LPUSH key value1 [value2] 将一个或多个值插入到列表头部
LSET key index value 通过索引设置列表元素的值
RPUSH key value1 [value2] 在列表中添加一个或多个值
RPUSHX key value 为已存在的列表添加值
LINSERT key BEFORE|AFTER pivot value 在列表的元素前或者后插入元素
LRANGE key start stop 获取列表指定范围内的元素
LINDEX key index 通过索引获取列表中的元素
BLPOP key1 [key2 ] timeout 移出并获取列表的第一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止
BRPOP key1 [key2 ] timeout 移出并获取列表的最后一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止
BRPOPLPUSH source destination timeout 从列表中弹出一个值,将弹出的元素插入到另外一个列表中并返回它; 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止
LPOP key 移出并获取列表的第一个元素
LREM key count value 移除列表元素
RPOP key 移除列表的最后一个元素,返回值为移除的元素
RPOPLPUSH source destination 移除列表的最后一个元素,并将该元素添加到另一个列表并返回
LTRIM key start stop 对一个列表进行修剪(trim),就是说,让列表只保留指定区间内的元素,不在指定区间之内的元素都将被删除
LLEN key 获取列表长度

LPUSH LPUSHX LSET RPUSH RPUSHX LRANGE

LPUSH LPUSHX是向列表头部插入元素 返回当前列表中元素的size
LSET按指定下标设置元素值 不能超过list的length 所以实际结果是覆盖指定下标下的值
RPUSH RPUSH是向列表尾部插入元素 返回当前列表中元素的size
LRANGE 获取列表中指定范围的元素

127.0.0.1:6379> LPUSH list value1 value2
(integer) 2
127.0.0.1:6379> LPUSH list value3
(integer) 3
127.0.0.1:6379> LRange list 0 10
1) "value3"
2) "value2"
3) "value1"
// value3 对应下标0 value2对应下标1 value3对应下标2

127.0.0.1:6379> Lset list 2 value4
OK
127.0.0.1:6379> Lrange list 0 10
1) "value3"
2) "value2"
3) "value4"

// rpush
127.0.0.1:6379> rpush list value5 value6
(integer) 5
127.0.0.1:6379> rpushx list value7
(integer) 6
127.0.0.1:6379> lrange list 0 10
1) "value3"
2) "value2"
3) "value4"
4) "value5"
5) "value6"
6) "value7"

// lset
127.0.0.1:6379> lset list 9 value9
(error) ERR index out of range
127.0.0.1:6379> lset list 6 value8
(error) ERR index out of range
127.0.0.1:6379> lset list 5 value1
OK
127.0.0.1:6379> lrange list 0 10
1) "value3"
2) "value2"
3) "value4"
4) "value5"
5) "value6"
6) "value1"

LINSERT LINDEX

返回列表中数据个数
LINSERT key BEFORE|AFTER pivot value
在列表的元素前或者后插入元素
before:元素前 after:元素后
pivot:需要被插入前后的元素

LINDEX key index
根据索引返回列表中的指定索引元素

127.0.0.1:6379> linsert list before value5 hahaha
(integer) 7
127.0.0.1:6379> linsert list before value5 hehehe
(integer) 8
127.0.0.1:6379> lrange list 0 20
1) "value3"
2) "value2"
3) "value4"
4) "hahaha"
5) "hehehe"
6) "value5"
7) "value6"
8) "value1"
// LINDEX
127.0.0.1:6379> LINDEX list 7
"value1"

LPOP RPOP BLPOP BRPOP LREM

B:block阻塞 所以 timeout:过期时间
BLPOP 移出并获取列表的第一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止 存在元素返回集合key并且返回移除的元素。
BRPOP 移出并获取列表的最后一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止 存在元素返回集合key并且返回移除的元素
LREM key count value count移除符合value元素的数量 value值 从列表头部开始移除 返回移除数

127.0.0.1:6379> lrange list 0 20
1) "value3"
2) "value2"
3) "value4"
4) "hahaha"
5) "hehehe"
6) "value5"
7) "value6"
8) "value1"
127.0.0.1:6379> lpop list    // 列表头取出value3
"value3"
127.0.0.1:6379> rpop list    // 列表尾取出value1
"value1"
127.0.0.1:6379> lrange list 0 20
1) "value2"
2) "value4"
3) "hahaha"
4) "hehehe"
5) "value5"
6) "value6"
127.0.0.1:6379> blpop list 3   // 阻塞列表头部取出元素 等待三秒超时
1) "list"
2) "value2"
127.0.0.1:6379> brpop list 3   // 阻塞列表尾部取出元素 等待三秒超时
1) "list"
2) "value6"
127.0.0.1:6379> lrange list 0 20
1) "value4"
2) "hahaha"
3) "hehehe"
4) "value5"
127.0.0.1:6379> lrem list 1 value4   // 从头部开始删除1个等于value4的值
(integer) 1
127.0.0.1:6379> lrange list 0 20
1) "hahaha"
2) "hehehe"
3) "value5"
127.0.0.1:6379> lrem list 2 hahaha
(integer) 1
127.0.0.1:6379> lrange list 0 20
1) "hehehe"
2) "value5"
127.0.0.1:6379> lpush list hehehe
(integer) 3
127.0.0.1:6379> lpush list hehehe hehehe
(integer) 5
127.0.0.1:6379> lrange list 0 20
1) "hehehe"
2) "hehehe"
3) "hehehe"
4) "hehehe"
5) "value5"
127.0.0.1:6379> lrem list 2 hehehe  // 从头部开始删除2个等hehehe的值
(integer) 2
127.0.0.1:6379> lrange list 0 20
1) "hehehe"
2) "hehehe"
3) "value5"
127.0.0.1:6379> rpush list hehehe hehehe 
(integer) 5
127.0.0.1:6379> lrem list 2 hehehe
(integer) 2
127.0.0.1:6379> lrange list 0 20
1) "value5"
2) "hehehe"
3) "hehehe"
127.0.0.1:6379> lrem list 3 hehehe   // 删除三个hehehe的元素 只存在两个返回值为2
(integer) 2
127.0.0.1:6379> lrange list 0 20
1) "value5"
127.0.0.1:6379> lrem list 1 value5
(integer) 1
127.0.0.1:6379> blpop list 3         // 阻塞删除头部第一个元素 等待3秒超时返回nil
(nil)
(3.02s)
127.0.0.1:6379> brpop list 3         // 阻塞删除尾部第一个元素 等待3秒超时返回nil
(nil)
(3.05s)

Set类型常用命令

set类型,添加的元素是去重后的
set类型 支持两个集合取并集、交集、差集

命令 描述 返回值
添加命令
SADD key member1 [member2] 向集合添加一个或多个成员 元素在集合不存在返回设置元素成功的个数 存在返回0
SCARD key 获取集合的成员数 成员数
SDIFF key1 [key2] 返回第一个集合与其他集合之间的差异
SDIFFSTORE destination key1 [key2] 返回给定所有集合的差集并存储在 destination 中
SINTER key1 [key2] 返回给定所有集合的交集
SINTERSTORE destination key1 [key2] 返回给定所有集合的交集并存储在 destination 中
SISMEMBER key member 判断 member 元素是否是集合 key 的成员
SMEMBERS key 返回集合中的所有成员
SMOVE source destination member 将 member 元素从 source 集合移动到 destination 集合
SPOP key 移除并返回集合中的一个随机元素
SRANDMEMBER key [count] 返回集合中一个或多个随机数
SREM key member1 [member2] 移除集合中一个或多个成员
SUNION key1 [key2] 返回所有给定集合的并集
SUNIONSTORE destination key1 [key2] 所有给定集合的并集存储在 destination 集合中
SSCAN key cursor [MATCH pattern] [COUNT count] 迭代集合中的元素

SADD

元素在集合不存在返回设置元素成功的个数 存在返回0

127.0.0.1:6379> sadd set value1
(integer) 1
127.0.0.1:6379> sadd set value2
(integer) 1
127.0.0.1:6379> smembers set
1) "value2"
2) "value1"
127.0.0.1:6379> sadd set value1					// 设置已存在的元素返回0
(integer) 0
127.0.0.1:6379> sadd set value3 value4 value5 value6  // 设置四个元素 返回4
(integer) 4
127.0.0.1:6379> sadd set value3 value4 value5       
(integer) 0

SCARD SMEMBERS SRANDMEMBER

SCARD key:获取集合的成员数
SMEMBERS key:返回集合中的所有成员
SRANDMEMBER key [count] :返回集合中一个或多个元素(随机返回)

127.0.0.1:6379> smembers set
1) "value2"
2) "value3"
3) "value1"
4) "value5"
5) "value4"
6) "value6"
127.0.0.1:6379> scard set
(integer) 6
127.0.0.1:6379> srandmember set 2     // 随机返回两个元素
1) "value5"
2) "value3"
127.0.0.1:6379> srandmember set 2
1) "value1"
2) "value3"

SDIFF SDIFFSTORE SINTER SINTERSTORE SUNION SUNIONSTORE (差集 交集 并集)

SDIFF key1 [key2] : 返回key1set列表中key2不存在的元素(差集)
SDIFFSTORE destination key1 [key2] :返回key1set列表中在key2不存在的元素设置到destination集合中 元素为空返回0 不为空返回设置元素的个数

SINTER key1 [key2]:返回给定所有集合的交集
SINTERSTORE destination key1 [key2]:返回key1set列表中在key2存在的元素设置到destination集合中 元素为空返回0 不为空返回设置元素的个数

SUNION key1 [key2]:返回给定所有集合的并集
SUNIONSTORE destination key1 [key2]:返回key1和key2存在的元素设置到destination集合中 元素为空返回0 不为空返回设置元素的个数 (无序)

127.0.0.1:6379> sadd set1 1 3 5 7 9
(integer) 5
127.0.0.1:6379> sadd set2 2 4 6 8 10
(integer) 5
127.0.0.1:6379> sadd set3 1 2 3 4 5 6 7 8 9 10
(integer) 10
127.0.0.1:6379> sdiff set1 set2
1) "1"
2) "3"
3) "5"
4) "7"
5) "9"
127.0.0.1:6379> sdiff set2 set1
1) "2"
2) "4"
3) "6"
4) "8"
5) "10"
127.0.0.1:6379> sdiff set1 set3
(empty list or set)
127.0.0.1:6379> sdiffstore set4 set1 set2
(integer) 5
127.0.0.1:6379> sdiff set4
1) "1"
2) "3"
3) "5"
4) "7"
5) "9"
127.0.0.1:6379> sdiffstore set5 set1 set3
(integer) 0
127.0.0.1:6379> sdiff set5
(empty list or set)
127.0.0.1:6379> sinter set1 set2      // set1和set2交集为空
(empty list or set)
127.0.0.1:6379> sinter set1 set3
1) "1"
2) "3"
3) "5"
4) "7"
5) "9"
127.0.0.1:6379> sinterstore set6 set1 set3		// 将set1 set3 交集设置到set6当中
(integer) 5
127.0.0.1:6379> sdiff set6
1) "1"
2) "3"
3) "5"
4) "7"
5) "9"
127.0.0.1:6379> sadd set10 b a
(integer) 2
127.0.0.1:6379> sadd set11 f c
(integer) 2
127.0.0.1:6379> sadd set13 d e
(integer) 2
127.0.0.1:6379> sunion set10 set11 set13    // 返回结果无序
1) "c"
2) "f"
3) "b"
4) "a"
5) "d"
6) "e"

SMOVE SPOP SREM

SMOVE source destination member:将 member 元素从 source 集合移动到 destination 集合 (member在source不存在返回0 存在返回1)
SPOP key :移除并返回集合中的一个随机元素 (返回被移除的元素)(集合为空返回nil)
SREM key member1 [member2] :移除集合中一个或多个成员 (返回移除成功元素的个数)

127.0.0.1:6379> sdiff set14
1) "c"
2) "f"
3) "b"
4) "a"
5) "d"
6) "e"
127.0.0.1:6379> spop set20         // key20 不存在返回nil
(nil)
127.0.0.1:6379> spop set14		   // 随机移除一个元素 移除了b
"b"
127.0.0.1:6379> srem set14 a z	   // a在集合中 z不在集合中 z移除失败 返回移除成功的个数
(integer) 1
127.0.0.1:6379> sdiff set14
1) "d"
2) "e"
3) "c"
4) "f"
127.0.0.1:6379> smove set14 set15 z		// z不在集合中 移除失败返回0
(integer) 0
127.0.0.1:6379> smove set14 set15 c		// 移除成功返回1
(integer) 1

重点 SSCAN key cursor [MATCH pattern] [COUNT count]

你可能感兴趣的:(redis)