127.0.0.1:6379>set key value [EX seconds|PX milliseconds|EXAT timestamp|PXAT milliseconds-timestamp|KEEPTTL][NX|XX][GET]
1
NX:当数据库中key不存在时,可以将key-value添加到数据库
XX:当数据库中key存在时,可以将key-value添加数据库,与NX参数互斥
EX:key的超时秒数
PX:key的超时毫秒数,与EX互斥
value中若包含空格、特殊字符,需用双引号包裹
get
获取值。
get <key>
1
示例
127.0.0.1:6379>set name ready
OK
127.0.0.1:6379> get name
"ready"
1
2
3
4
apend
追加值。将给定的value追加到原值的末尾。
append <key><value>
1
示例
127.0.0.1:6379>set k1 hello
OK
127.0.0.1:6379> append k1 " world"(integer)11127.0.0.1:6379> get k1
"hello world"
1
2
3
4
5
6
strlen
获取字符串长度
strlen <key>
1
示例
127.0.0.1:6379>set name ready
OK
127.0.0.1:6379> strlen name
(integer)5
1
2
3
4
setnx
key不存在时,设置key的值
setnx <key><value>
1
示例
127.0.0.1:6379> flushdb #清空db,方便测试
OK
127.0.0.1:6379> setnx site "itsoku.com"#site不存在,返回1,表示设置成功 (integer)1127.0.0.1:6379> setnx site "itsoku.com"#再次通过setnx设置site,由于已经存在了,所以设 置失败,返回0 (integer)0
1
2
3
4
5
6
incr
原子递增1。将key中存储的值增1,只能对数字值操作,如果key不存在,则会新建一个,值为1
incr <key>
1
示例
127.0.0.1:6379> flushdb #清空db,方便测试
OK
127.0.0.1:6379>set age 30#age值为30
OK
127.0.0.1:6379> incr age #age增加1,返回31 (integer)31127.0.0.1:6379> get age #获取age的值"31"127.0.0.1:6379> incr salary #salary不存在,自动创建一个,值为1 (integer)1127.0.0.1:6379> get salary #获取salary的值 "1"
1
2
3
4
5
6
7
8
9
10
11
12
decr
原子递减1。将key中存储的值减1,只能对数字值操作,如果为空,新增值为-1。
decr
1
示例
127.0.0.1:6379> flushdb #清空db,方便测试
OK
127.0.0.1:6379>set age 30#age值为30
OK
127.0.0.1:6379> decr age #age递减1,返回29 (integer)29127.0.0.1:6379> get age #获取age的值 "29"127.0.0.1:6379> decr salary #salary不存在,自动创建一个,值为-1 (integer)-1127.0.0.1:6379> get salary #获取salary "-1"
127.0.0.1:6379>set k1 helloworld
OK
127.0.0.1:6379> getrange k1 04"hello"
1
2
3
4
setrange
覆盖指定位置的值。
setrange <起始位置>
1
示例
127.0.0.1:6379>set k1 helloworld
OK
127.0.0.1:6379> get k1
"helloworld"127.0.0.1:6379> setrange k1 1java(integer)10127.0.0.1:6379> get k1
"hjavaworld"
1
2
3
4
5
6
7
8
setex
设置键值&过期时间(秒)。
setex <过期时间(秒)>
1
示例
127.0.0.1:6379> setex k1 100 v1 #设置k1的值为v1,有效期100秒
OK
127.0.0.1:6379> get k1 #获取k1的值 "v1"127.0.0.1:6379> ttl k1 #获取k1还有多少秒失效(integer)96
1
2
3
4
5
6
getset
以新换旧,设置新值同时返回旧值。
getset <key><value>
1
示例
127.0.0.1:6379>set name ready #设置name为ready
OK
127.0.0.1:6379> getset name tom #设置name为tom,返回name的旧值 "ready"127.0.0.1:6379> getset age 30#设置age为30,age未设置过,返回age的旧值为null (nil)
127.0.0.1:6379> flushdb #清空db,方便测试
OK
127.0.0.1:6379> rpush name java spring "springboot""spring cloud"#列表name的左边 插入4个元素 (integer)4127.0.0.1:6379> lrange name 12#从左边取出索引位于[1,2]范围内的元素 1)"spring"2)"springboot"
127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> rpush course java c c++ php #列表course中放入4个元素 (integer)4127.0.0.1:6379> lindex course 2#返回索引位置2的元素 "c++"127.0.0.1:6379> lindex course 200#返回索引位置200的元素,没有 (nil)127.0.0.1:6379> lindex course -1#返回最后一个元素 "php"
1
2
3
4
5
6
7
8
9
10
llen
获得列表长度
llen key
1
返回列表 key 的长度。
如果 key 不存在,则 key 被解释为一个空列表,返回 0 .
如果 key 不是列表类型,返回一个错误。
示例
127.0.0.1:6379> rpush name ready tom jack
(integer)3127.0.0.1:6379> llen name
(integer)3
1
2
3
4
linsert
在某个值的前或者后面插入一个值
linsert before|after
1
将值 newvalue 插入到列表 key 当中,位于值 value 之前或之后。
当 value 不存在于列表 key 时,不执行任何操作。
当 key 不存在时, key 被视为空列表,不执行任何操作。
如果 key 不是列表类型,返回一个错误。
返回值:
如果命令执行成功,返回插入操作完成之后,列表的长度。
如果没有找到 value ,返回 -1 。
如果 key 不存在或为空列表,返回 0 。
示例
127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> rpush name ready tom jack #列表name中添加3个元素(integer)3127.0.0.1:6379> lrange name 0-1#name列表所有元素 1)"ready"2)"tom"3)"jack"127.0.0.1:6379> linsert name before tom lily #tom前面添加lily(integer)4127.0.0.1:6379> lrange name 0-1#name列表所有元素1)"ready"2)"lily"3)"tom"4)"jack"127.0.0.1:6379> linsert name before xxx lucy # 在元素xxx前面插入lucy,由于xxx元素不存 在,插入失败,返回-1 (integer)-1127.0.0.1:6379> lrange name 0-11)"ready"2)"lily"3)"tom"4)"jack"
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
lrem
删除指定数量的某个元素
LREM key count value
1
根据参数 count 的值,移除列表中与参数 value 相等的元素。
count 的值可以是以下几种:
count > 0 : 从表头开始向表尾搜索,移除与 value 相等的元素,数量为 count 。
count < 0 : 从表尾开始向表头搜索,移除与 value 相等的元素,数量为 count 的绝对值。
将列表 key 下标为 index 的元素的值设置为 value 。 当 index 参数超出范围,或对一个空列表( key 不存在)进行lset时,返回一个错误。
**返回值:**操作成功返回 ok ,否则返回错误信息。
示例
127.0.0.1:6379> rpush name tom jack ready #name集合中放入3个元素(integer)3127.0.0.1:6379> lrange name 0-1#输出name集合元素1)"tom"2)"jack"3)"ready"127.0.0.1:6379> lset name 1 lily #将name集合中第2个元素替换为liy
OK
127.0.0.1:6379> lrange name 0-1#输出name集合元素1)"tom"2)"lily"3)"ready"127.0.0.1:6379> lset name 10 lily #索引超出范围,报错(error) ERR index out of range
127.0.0.1:6379> lset course 1java#course集合不存在,报错 (error) ERR no such key
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
列表(List)
简介
单键多值。
redis列表是简单的字符串列表,按照插入顺序排序。
你可以添加一个元素到列表的头部(左边)或者尾部(右边)。
它的底层实际上是使用双向链表实现的,对两端的操作性能很高,通过索引下标操作中间节点性能会较差。
常用命令
lpush/rpush
从左边或者右边插入一个或多个值。
lpush/rpush <key1><value1><key2><value2>...
1
示例
127.0.0.1:6379> flushdb #清空db,方便测试
OK
127.0.0.1:6379> rpush name java spring "springboot""spring cloud"#列表name的左边 插入4个元素 (integer)4127.0.0.1:6379> lrange name 12#从左边取出索引位于[1,2]范围内的元素 1)"spring"2)"springboot"
127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> rpush course java c c++ php #列表course中放入4个元素 (integer)4127.0.0.1:6379> lindex course 2#返回索引位置2的元素 "c++"127.0.0.1:6379> lindex course 200#返回索引位置200的元素,没有 (nil)127.0.0.1:6379> lindex course -1#返回最后一个元素 "php"
1
2
3
4
5
6
7
8
9
10
llen
获得列表长度
llen key
1
返回列表 key 的长度。
如果 key 不存在,则 key 被解释为一个空列表,返回 0 .
如果 key 不是列表类型,返回一个错误。
示例
127.0.0.1:6379> rpush name ready tom jack
(integer)3127.0.0.1:6379> llen name
(integer)3
1
2
3
4
linsert
在某个值的前或者后面插入一个值
linsert before|after
1
将值 newvalue 插入到列表 key 当中,位于值 value 之前或之后。
当 value 不存在于列表 key 时,不执行任何操作。
当 key 不存在时, key 被视为空列表,不执行任何操作。
如果 key 不是列表类型,返回一个错误。
返回值:
如果命令执行成功,返回插入操作完成之后,列表的长度。
如果没有找到 value ,返回 -1 。
如果 key 不存在或为空列表,返回 0 。
示例
127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> rpush name ready tom jack #列表name中添加3个元素(integer)3127.0.0.1:6379> lrange name 0-1#name列表所有元素 1)"ready"2)"tom"3)"jack"127.0.0.1:6379> linsert name before tom lily #tom前面添加lily(integer)4127.0.0.1:6379> lrange name 0-1#name列表所有元素1)"ready"2)"lily"3)"tom"4)"jack"127.0.0.1:6379> linsert name before xxx lucy # 在元素xxx前面插入lucy,由于xxx元素不存 在,插入失败,返回-1 (integer)-1127.0.0.1:6379> lrange name 0-11)"ready"2)"lily"3)"tom"4)"jack"
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
lrem
删除指定数量的某个元素
LREM key count value
1
根据参数 count 的值,移除列表中与参数 value 相等的元素。
count 的值可以是以下几种:
count > 0 : 从表头开始向表尾搜索,移除与 value 相等的元素,数量为 count 。
count < 0 : 从表尾开始向表头搜索,移除与 value 相等的元素,数量为 count 的绝对值。
将列表 key 下标为 index 的元素的值设置为 value 。 当 index 参数超出范围,或对一个空列表( key 不存在)进行lset时,返回一个错误。
**返回值:**操作成功返回 ok ,否则返回错误信息。
示例
127.0.0.1:6379> rpush name tom jack ready #name集合中放入3个元素(integer)3127.0.0.1:6379> lrange name 0-1#输出name集合元素1)"tom"2)"jack"3)"ready"127.0.0.1:6379> lset name 1 lily #将name集合中第2个元素替换为liy
OK
127.0.0.1:6379> lrange name 0-1#输出name集合元素1)"tom"2)"lily"3)"ready"127.0.0.1:6379> lset name 10 lily #索引超出范围,报错(error) ERR index out of range
127.0.0.1:6379> lset course 1java#course集合不存在,报错 (error) ERR no such key
将哈希表 key 中的域 field 的值设为 value 。如果 key 不存在,一个新的哈希表被创建并进行 hset 操作。如果域 field 已经存在于哈希表中,旧值将被覆盖。
**返回值:**如果 field 是哈希表中的一个新建域,并且值设置成功,返回 1 。如果哈希表中域 field 已经存在且旧值已被新值覆盖,返回 0 。
示例
127.0.0.1:6379> hset user name ready age 30#哈希表user中设置2个域:name和age,name的 值为ready,age的值为30 (integer)2
1
2
hget
获取指定filed的值
hget key field
1
示例
127.0.0.1:6379> hset user name ready age 30#哈希表user中设置2个域:name和age,name的 值为ready,age的值为30 (integer)2127.0.0.1:6379> hget user name #获取user中的name "ready"
1
2
3
hgetall
返回hash表所有的域和值
hgetall key
1
示例
127.0.0.1:6379> hset user name ready age 30#哈希表user中设置2个域:name和age,name的 值为ready,age的值为30 (integer)2127.0.0.1:6379> hgetall user #获取user所有信息1)"name"2)"ready"3)"age"4)"30"
127.0.0.1:6379> hset user name ready age 30#哈希表user中设置2个域:name和age,name的 值为ready,age的值为30 (integer)2127.0.0.1:6379> hexists user name #user中存在name域(integer)1127.0.0.1:6379> hexists user address #user中不存在address域,返回0 (integer)0127.0.0.1:6379> hexists user1 address #user1这个key不存在,返回0(integer)0
1
2
3
4
5
6
7
8
hkeys
列出所有的filed
127.0.0.1:6379> hset user name ready age 30#哈希表user中设置2个域:name和age,name的 值为ready,age的值为30 (integer)2127.0.0.1:6379> hkeys user #获取user中的所有filed 1)"name"2)"age"
1
2
3
4
5
hvals
列出所有的value
127.0.0.1:6379> hset user name ready age 30#哈希表user中设置2个域:name和age,name的 值为ready,age的值为30(integer)2127.0.0.1:6379> hvals user #获取user中的所有filed的值列表1)"ready"2)"30"
1
2
3
4
hlen
返回filed的数量,当 key 不存在时,返回 0 。
127.0.0.1:6379> hset user name ready age 30#哈希表user中设置2个域:name和age,name的 值为ready,age的值为30 (integer)2127.0.0.1:6379> hlen user
(integer)2
1
2
3
4
hincrby
filed的值加上指定的增量
hincrby key field increment
1
为哈希表 key 中的域 field 的值加上增量 increment 。 增量也可以为负数,相当于对给定域进行减法操作。 如果 key 不存在,一个新的哈希表被创建并执行 HINCRBY 命令。 如果域 field 不存在,那么在执行命令前,域的值被初始化为 0 。 对一个储存字符串值的域 field 执行 HINCRBY 命令将造成一个错误。
将哈希表 key 中的域 field 的值设置为 value ,当且仅当域 field 不存在。若域 field 已经存在,该操作无效。如果 key 不存在,一个新哈希表被创建并执行 hsetnx 命令。
**返回值:**设置成功,返回 1 。如果给定域已经存在且没有操作被执行,返回 0 。
示例:
127.0.0.1:6379> hset user name ready age 30#创建user,包含2个域:name、age (integer)2127.0.0.1:6379> hsetnx user name tom #name已存在,设置失败,返回0 (integer)0127.0.0.1:6379> hget user name #name依旧是ready "ready"127.0.0.1:6379> hsetnx user address shanghai #address不存在,设置成功(integer)1127.0.0.1:6379> hget user address #输出address的值 "shanghai"