Redis学习(二)Redis数据类型及命令

Redis数据类型

1. 数据类型

  • String 字符串
  • hash 哈希
  • list 列表
  • set 集合
  • sorted_set (zset) 有序集合

完整redis命令查看: http://www.redis.cn/commands.html

2. String类型

在这里插入图片描述
在这里插入图片描述

2.1 set

命令:set key value [EX seconds] [PX milliseconds] [NX|XX]

将键`key`设定为指定的“字符串”值 。

​ 如果 key 已经保存了一个值,那么这个操作会直接覆盖原来的值,并且忽略原始类型。

​ 当set命令执行成功之后,之前设置的过期时间都将失效。

​ 从2.6.12版本开始,redis为SET命令增加了一系列选项:

  • EX seconds – 设置键key的过期时间,单位时秒
  • PX milliseconds – 设置键key的过期时间,单位时毫秒
  • NX – 只有键key不存在的时候才会设置key的值
  • XX – 只有键key存在的时候才会设置key的值
#设置 name的值为aaa
127.0.0.1:6379> set name aaa
OK
#设置 username值为bbbb,且过期时间为1000s
127.0.0.1:6379> set username bbbb ex 1000
OK
127.0.0.1:6379>   
2.2 get

命令: get key

返回keyvalue。如果key不存在,返回特殊值nil。如果keyvalue不是string,就返回错误,因为GET只处理string类型的values

#获取name的值
127.0.0.1:6379> get name
"aaa"
#获取username的值,因为之前设置过过期时间,已过期,现在key不存在,返回nil
127.0.0.1:6379> get username
(nil)
127.0.0.1:6379>  
2.3 del

命令:del key [key …]

删除指定的一批keys,如果删除中的某些key不存在,则直接忽略。

#删除key为name的数据,如果存在就会返回(integer) 1
127.0.0.1:6379> del name
(integer) 1
#删除key为name的数据,不存在就会返回(integer) 0
127.0.0.1:6379> del name
(integer) 0
127.0.0.1:6379>
2.4 mset/mget

mset一次设置多个key-value。mget一次获取多个值

命令:mset key value [key value …]

mget key [key …]

#设置多个key-value值 a-1 b-2 c-3
127.0.0.1:6379> mset a 1 b 2 c 3
OK
#获取value值,如果key不存在,则返回(nil)
127.0.0.1:6379> mget a b d
1) "1"
2) "2"
3) (nil)
2.5 strlen

命令: strlen key

返回key的string类型value的长度。如果key对应的非string类型,就返回错误

127.0.0.1:6379> strlen b
(integer) 1
2.6 append

如果 key 已经存在,并且值为字符串,那么这个命令会把 value 追加到原来值(value)的结尾。 如果 key 不存在,那么它将首先创建一个空字符串的key,再执行追加操作 。

127.0.0.1:6379> set aa  abcdefg
OK
127.0.0.1:6379> append aa hijk
(integer) 11
127.0.0.1:6379> get aa
"abcdefghijk"
127.0.0.1:6379> 
2.7 incr

命令: incr key

对存储在指定key的数值执行原子的加1操作。

如果指定的key不存在,那么在执行incr操作之前,会先将它的值设定为0

如果指定的key中存储的值不是字符串类型(fix:)或者存储的字符串类型不能表示为一个整数,

那么执行这个命令时服务器会返回一个错误(eq:(error) ERR value is not an integer or out of range)。

这个操作仅限于64位的有符号整型数据。

127.0.0.1:6379> incr a
(integer) 1
127.0.0.1:6379> incr a
(integer) 2
127.0.0.1:6379> set name aaa
OK
127.0.0.1:6379> incr name
(error) ERR value is not an integer or out of range
127.0.0.1:6379>  
2.8 incrby

命令: incrby key increment

将key对应的数字加decrement。如果key不存在,操作之前,key就会被置为0。如果key的value类型错误或者是个不能表示成数字的字符串,就返回错误。这个操作最多支持64位有符号的正型数字。

127.0.0.1:6379> incrby b 10
(integer) 10
127.0.0.1:6379> incrby b 6
(integer) 16
127.0.0.1:6379> incrby name 5
(error) ERR value is not an integer or out of range
2.9 incrbyfloat

命令: incrbyfloat key increment

通过指定浮点数key来增长浮点数(存放于string中)的值. 当键不存在时,先将其值设为0再操作.下面任一情况都会返回错误:

  • key 包含非法值(不是一个string).
  • 当前的key或者相加后的值不能解析为一个双精度的浮点值.(超出精度范围了)

如果操作命令成功, 相加后的值将替换原值存储在对应的键值上, 并以string的类型返回. string中已存的值或者相加参数可以任意选用指数符号,但相加计算的结果会以科学计数法的格式存储. 无论各计算的内部精度如何, 输出精度都固定为小数点后17位

127.0.0.1:6379> incrbyfloat c 10
"10"
127.0.0.1:6379> incrbyfloat c 1.4
"11.4"
2.10 decr

命令:decr key

对key对应的数字做减1操作。如果key不存在,那么在操作之前,这个key对应的值会被置为0。如果key有一个错误类型的value或者是一个不能表示成数字的字符串,就返回错误。这个操作最大支持在64位有符号的整型数字。

127.0.0.1:6379> decr d
(integer) -1
127.0.0.1:6379> decr d
(integer) -2
2.11 decrby

命令: decrby key decrement

将key对应的数字减decrement。如果key不存在,操作之前,key就会被置为0。如果key的value类型错误或者是个不能表示成数字的字符串,就返回错误。这个操作最多支持64位有符号的正型数字

127.0.0.1:6379> decrby a 1
(integer) 1
127.0.0.1:6379> decrby c 1.2
(error) ERR value is not an integer or out of range

3. Hash类型

在这里插入图片描述
在这里插入图片描述

3.1 hset

命令:HSET key field value

设置 key 指定的哈希集中指定字段的值。

如果 key 指定的哈希集不存在,会创建一个新的哈希集并与 key 关联。

如果字段在哈希集中存在,它将被重写。

返回值:

  • 1:如果field是一个新的字段
  • 0:如果field原来在map里面已经存在
127.0.0.1:6379> hset user01 name zhangsan
(integer) 1
127.0.0.1:6379> hset user01 name zhangsan1
(integer) 0
3.2 hget

命令: HGET key field

返回 key 指定的哈希集中该字段所关联的值 。 当字段不存在或者 key 不存在时返回nil 。

127.0.0.1:6379> hget user01 name
"zhangsan1"
127.0.0.1:6379> hget user01 age
(nil)
3.3 hdel

命令: HDEL key field [field …]

从 key 指定的哈希集中移除指定的域。在哈希集中不存在的域将被忽略。

如果 key 指定的哈希集不存在,它将被认为是一个空的哈希集,该命令将返回0。

返回从哈希集中成功移除的域的数量,不包括指出但不存在的那些域

127.0.0.1:6379> hdel user01 name age
(integer) 1
3.4 hexists

命令: HEXISTS key field

返回hash里面field是否存在 。

返回值:

  • 1 hash里面包含该field。
  • 0 hash里面不包含该field或者key不存在。
127.0.0.1:6379> hexists user01 name
(integer) 0
3.5 hmset

命令: HMSET key field value [field value …]

设置 key 指定的哈希集中指定字段的值。该命令将重写所有在哈希集中存在的字段。如果 key 指定的哈希集不存在,会创建一个新的哈希集并与 key 关联 。

127.0.0.1:6379> hmset user02 name lisi age 18
OK
3.6 hmget

命令:HMGET key field [field …]

返回 key 指定的哈希集中指定字段的值。

对于哈希集中不存在的每个字段,返回 nil 值。因为不存在的keys被认为是一个空的哈希集,对一个不存在的 key 执行 HMGET 将返回一个只含有 nil 值的列表。

127.0.0.1:6379> hmget user02 name age
1) "lisi"
2) "18"
3.7 hgetall

命令:HGETALL key

返回 key 指定的哈希集中所有的字段和值。返回值中,每个字段名的下一个是它的值,所以返回值的长度是哈希集大小的两倍 。

127.0.0.1:6379> hgetall user02
1) "name"
2) "lisi"
3) "age"
4) "18"
3.8 hlen

命令:HLEN key

返回 key 指定的哈希集包含的字段的数量。

127.0.0.1:6379> hlen user02
(integer) 2
3.9 hkeys

命令:HKEYS key

返回 key 指定的哈希集中所有字段的名字

127.0.0.1:6379> hkeys user02
1) "name"
2) "age"
3.10 hvals

命令:HVALS key

返回 key 指定的哈希集中所有字段的值 。

127.0.0.1:6379> hvals user02
1) "lisi"
2) "18"
127.0.0.1:6379> hvals user03
(empty list or set)
3.11 hincrby

命令: HINCRBY key field increment

增加 key 指定的哈希集中指定字段的数值。如果 key 不存在,会创建一个新的哈希集并与 key 关联。如果字段不存在,则字段的值在该操作执行前被设置为 0。HINCRBY 支持的值的范围限定在 64位 有符号整数

127.0.0.1:6379> hincrby user02 age 5
(integer) 23
127.0.0.1:6379> hincrby user02 age -2
(integer) 21
3.12 hincrbyfloat

命令:HINCRBYFLOAT key field increment

为指定key的hash的field字段值执行float类型的increment加。如果field不存在,则在执行该操作前设置为0.如果出现下列情况之一,则返回错误:

  • field的值包含的类型错误(不是字符串)。
  • 当前field或者increment不能解析为一个float类型。
127.0.0.1:6379> hincrbyfloat user02 age 1.5
"22.5"
127.0.0.1:6379> hincrbyfloat user02 age 2
"24.5"
127.0.0.1:6379> hincrbyfloat user02 age -1.2
"23.300000000000001"

4. list类型

在这里插入图片描述
在这里插入图片描述

4.1 lpush

命令:LPUSH key value [value …]

将所有指定的值插入到存于 key 的列表的头部。如果 key 不存在,那么在进行 push 操作前会创建一个空列表。 如果 key 对应的值不是一个 list 的话,那么会返回一个错误。

可以使用一个命令把多个元素 push 进入列表,只需在命令末尾加上多个指定的参数。元素是从最左端的到最右端的、一个接一个被插入到 list 的头部。 所以对于这个命令例子 LPUSH mylist a b c,返回的列表是 c 为第一个元素, b 为第二个元素, a 为第三个元素。

返回值为 push 操作后的 list 长度

127.0.0.1:6379> lpush list1 a b c d
(integer) 4
4.2 lindex

命令**:LINDEX key index**

返回列表里的元素的索引 index 存储在 key 里面。 下标是从0开始索引的,所以 0 是表示第一个元素, 1 表示第二个元素,并以此类推。 负数索引用于指定从列表尾部开始索引的元素。在这种方法下,-1 表示最后一个元素,-2 表示倒数第二个元素,并以此往前推。

当 key 位置的值不是一个列表的时候,会返回一个error。

当请求的对应元素,或者当 index 超过范围的时候返回 nil

127.0.0.1:6379> lpush list1 a b c d
(integer) 4
127.0.0.1:6379> lindex list1 0
"d"
4.3 lrange

命令:LRANGE key start stop

返回存储在 key 的列表里指定范围内的元素。 start 和 end 偏移量都是基于0的下标,即list的第一个元素下标是0(list的表头),第二个元素下标是1,以此类推。

偏移量也可以是负数,表示偏移量是从list尾部开始计数。 例如, -1 表示列表的最后一个元素,-2 是倒数第二个,以此类推。

127.0.0.1:6379> lrange list1 0 3
1) "d"
2) "c"
3) "b"
4) "a"
127.0.0.1:6379> lrange list1 0 5
1) "d"
2) "c"
3) "b"
4) "a"
127.0.0.1:6379> lrange list1 -2 2
1) "b"
127.0.0.1:6379> lrange list1 -3 -1
1) "c"
2) "b"
3) "a"
4.4 lpop

命令:LPOP key

移除并且返回 key 对应的 list 的第一个元素。 返回第一个元素的值,或者当 key 不存在时返回 nil

127.0.0.1:6379> lpop list1
"d"
127.0.0.1:6379> lrange list1 0 3
1) "c"
2) "b"
3) "a"
4.5 rpush

命令:RPUSH key value [value …]

向存于 key 的列表的尾部插入所有指定的值。如果 key 不存在,那么会创建一个空的列表然后再进行 push 操作。 当 key 保存的不是一个列表,那么会返回一个错误。

可以使用一个命令把多个元素打入队列,只需要在命令后面指定多个参数。元素是从左到右一个接一个从列表尾部插入。 比如命令 RPUSH mylist a b c 会返回一个列表,其第一个元素是 a ,第二个元素是 b ,第三个元素是 c

127.0.0.1:6379> rpush list2 a b c d e
(integer) 5
127.0.0.1:6379> lrange list2 0 5
1) "a"
2) "b"
3) "c"
4) "d"
5) "e"
4.6 lset

命令:LSET key index value

设置 index 位置的list元素的值为 value。当index超出范围时会返回一个error

127.0.0.1:6379> lset list2 2 x
OK
127.0.0.1:6379> lrange list2 0 5
1) "a"
2) "b"
3) "x"
4) "d"
5) "e"
4.7 rpop

命令:RPOP key

移除并返回存于 key 的 list 的最后一个元素。

127.0.0.1:6379> rpop list2
"e"
127.0.0.1:6379> lrange list2 0 4
1) "a"
2) "b"
3) "x"
4) "d"
4.8 llen

命令:llen key

返回存储在 key 里的list的长度。 如果 key 不存在,那么就被看作是空list,并且返回长度为 0。 当存储在 key 里的值不是一个list的话,会返回error。

127.0.0.1:6379> llen list2
(integer) 4
4.9 linsert

命令:LINSERT key BEFORE|AFTER pivot value

把 value 插入存于 key 的列表中在基准值 pivot 的前面或后面。

当 key 不存在时,这个list会被看作是空list,任何操作都不会发生。

当 key 存在,但保存的不是一个list的时候,会返回error。

返回值是经过插入操作后的list长度,或者当 pivot 值找不到的时候返回 -1

127.0.0.1:6379> lrange list2 0 6
1) "a"
2) "b"
3) "x"
4) "d"
127.0.0.1:6379> linsert list2  BEFORE b aaaa
(integer) 5
127.0.0.1:6379> lrange list2 0 6
1) "a"
2) "aaaa"
3) "b"
4) "x"
5) "d"
4.10 lrem

命令:LREM key count value

从存于 key 的列表里移除前 count 次出现的值为 value 的元素。 这个 count 参数通过下面几种方式影响这个操作:

  • count > 0: 从头往尾移除值为 value 的元素。
  • count < 0: 从尾往头移除值为 value 的元素。
  • count = 0: 移除所有值为 value 的元素。

比如, LREM list -2 “hello” 会从存于 list 的列表里移除最后两个出现的 “hello”。

需要注意的是,如果list里没有存在key就会被当作空list处理,所以当 key 不存在的时候,这个命令会返回 0。

127.0.0.1:6379> lpush list3 a b c d e a d e a
(integer) 9
127.0.0.1:6379> lrem list3 2 a
(integer) 2
127.0.0.1:6379> lrange list3 0 9
1) "e"
2) "d"
3) "e"
4) "d"
5) "c"
6) "b"
7) "a"

5. set类型

在这里插入图片描述
在这里插入图片描述

5.1 sadd

命令:SADD key member [member …]

添加一个或多个指定的member元素到集合的 key中.指定的一个或者多个元素member 如果已经在集合key中存在则忽略.如果集合key 不存在,则新建集合key,并添加member元素到集合key中.

如果key 的类型不是集合则返回错误.

127.0.0.1:6379> sadd set01 a b c d
(integer) 4
127.0.0.1:6379> sadd set01 a
(integer) 0
5.2 scard

命令:SCARD key

返回集合存储的key的基数 (集合元素的数量). 如果key不存在,则返回 0

127.0.0.1:6379> scard set01
(integer) 4

smembers

命令:SMEMBERS key

返回key集合所有的元素

127.0.0.1:6379> smembers set01
1) "d"
2) "a"
3) "c"
4) "b"
5.3 spop

命令:SPOP key [count]

从存储在key的集合中移除并返回一个或多个随机元素。

127.0.0.1:6379> spop set01
"a"
127.0.0.1:6379> smembers set01
1) "b"
2) "d"
3) "c"

6. Sorted Set

在这里插入图片描述
在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值