前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Redis五种数据类型的命令及实战

Redis五种数据类型的命令及实战

作者头像
素履coder
发布2022-02-17 14:11:02
2430
发布2022-02-17 14:11:02
举报
文章被收录于专栏:素履coder

本文参考《Redis实战》

一、5种数据结构命令

1.字符串

字符串可以存储三种类型的值:字节串(byte string),整数浮点数

存储方式:键值对

字符串命令

命令

描述

get

获取存储在给定键中的值

set

设置存储在给定键中的值

del(这个命令适用于5种数据结构)

删除存储在给定键中的值

代码语言:javascript
复制
127.0.0.1:6379> set key1 value1
OK
127.0.0.1:6379> get key1
"value1"
127.0.0.1:6379> del key1
(integer) 1
127.0.0.1:6379> get key1
(nil)
127.0.0.1:6379> del key1
(integer) 0

自增和自减命令

命令

描述

incr

将键存储的值加1

decr

将键存储的值减1

incrby

将键存储的值加上整数

decrby

将键存储的值减去整数

incrbyfloat

将键存储的值加上浮点数

代码语言:javascript
复制
127.0.0.1:6379> incr key1
(integer) 1
127.0.0.1:6379> incrby key1 10
(integer) 11
127.0.0.1:6379> decr key1
(integer) 10
127.0.0.1:6379> decrby key1 5
(integer) 5
127.0.0.1:6379> incrbyfloat key1 10.5
"15.5"
127.0.0.1:6379> incrby key1 10.5
(error) ERR value is not an integer or out of range

处理子串和二进制位的命令

命令

描述

append

将值追加到给定键当前存储的末尾

getrange

获取一个由偏移量start到偏移量end范围内所有字符组成的子串,包括start和end在内(闭区间)

setrange

将从start偏移量开始的子串设置为给定值

getbit

将字节串看作是二进制位串,并返回位串中偏移量为offset的二进制位的值

setbit

将字节串看作是二进制位串,并将位串中偏移量为offset的二进制位的值设置为value

bitcount

统计二进制位串里面值为1的二进制位的数量,可设置start和end指定查询范围

bitop

可对一个或多个二进制位串执行and、or、异或(xor)、not等按位运算操作,并将结果保存在键里

代码语言:javascript
复制
127.0.0.1:6379> append key1 a
(integer) 1
127.0.0.1:6379> append key1 1
(integer) 2
127.0.0.1:6379> get key1
"a1"
127.0.0.1:6379> getrange key1 0 1
"a1"
127.0.0.1:6379> setrange key1 1 bbb
(integer) 4
127.0.0.1:6379> get key1
"abbb"
127.0.0.1:6379> del key1
(integer) 1
//A对应的十进制为65,二进制为01000001
127.0.0.1:6379> set key1 A
OK
127.0.0.1:6379> get key1
"A"
127.0.0.1:6379> getbit key1 0
(integer) 0
127.0.0.1:6379> getbit key1 1
(integer) 1
127.0.0.1:6379> getbit key1 2
(integer) 0
127.0.0.1:6379> getbit key1 3
(integer) 0
127.0.0.1:6379> getbit key1 4
(integer) 0
127.0.0.1:6379> getbit key1 5
(integer) 0
127.0.0.1:6379> getbit key1 6
(integer) 0
127.0.0.1:6379> getbit key1 7
(integer) 1
//现在把从左往右数下标为6的位改为1,二进制为010000110,十进制为67,字符为C
127.0.0.1:6379> setbit key1 6 1
(integer) 0
127.0.0.1:6379> get key1
"C"
127.0.0.1:6379> bitcount key1
(integer) 3
2.列表

列表和数据结构中的队列类似。

常用命令

命令

描述

rpush

将一个或多个值推入列表的右端

lpush

将一个或多个值推入列表的左端

rpop

移除并返回列表最左端的元素

lpop

移除并返回列表最右端的元素

lindex

返回列表中偏移量offset的元素

lrange

返回列表中偏移量从start到end范围内的所有元素,闭区间

ltrim

只保留偏移量start到end范围内的元素,闭区间

代码语言:javascript
复制
127.0.0.1:6379> rpush key1 r1 r2 r3
(integer) 3
127.0.0.1:6379> lpush key1 l1 l2 l3
(integer) 6
127.0.0.1:6379> lrange key1 0 -1
1) "l3"
2) "l2"
3) "l1"
4) "r1"
5) "r2"
6) "r3"
127.0.0.1:6379> rpop key1
"r3"
127.0.0.1:6379> lpop key1
"l3"
127.0.0.1:6379> lrange key1 0 -1
1) "l2"
2) "l1"
3) "r1"
4) "r2"
127.0.0.1:6379> lindex key1 1
"l1"
127.0.0.1:6379> ltrim key1 1 2
OK
127.0.0.1:6379> lrange key1 0 -1
1) "l1"
2) "r1"

阻塞式的列表弹出命令以及在列表之间移动元素的命令

命令

描述

blpop

从第一个非空列表中弹出位于最左端的元素,或者在timeout秒之内阻塞并等待可弹出的元素出现

brpop

从第一个非空列表中弹出位于最右端的元素,或者在timeout秒之内阻塞并等待可弹出的元素出现

rpoplpush

从source列表中弹出位于最左端的元素,并推入dest列表的最右端,并向用户返回这个元素

brpoplpush

从source列表中弹出位于最左端的元素,并推入dest列表的最右端,并向用户返回这个元素,如果source列表为空,那么在timeout秒之内阻塞并等待可弹出的元素出现

代码语言:javascript
复制
127.0.0.1:6379> lrange key1 0 -1
1) "1"
2) "2"
127.0.0.1:6379> blpop key1 5
1) "key1"
2) "1"
127.0.0.1:6379> blpop key1 5
1) "key1"
2) "2"
127.0.0.1:6379> blpop key1 5
(nil)
(5.06s)
127.0.0.1:6379> lrange key2 0 -1
1) "6"
2) "7"
3) "8"
4) "9"
5) "0"
127.0.0.1:6379> blpop key1 key2 5
1) "key2"
2) "6"
127.0.0.1:6379> rpoplpush key2 key1
"0"
127.0.0.1:6379> lrange key1 0 -1
1) "0"
127.0.0.1:6379> lrange key2 0 -1
1) "7"
2) "8"
3) "9"
127.0.0.1:6379> brpoplpush key1 key2 5
"0"
127.0.0.1:6379> brpoplpush key1 key2 5
(nil)
(5.00s)
127.0.0.1:6379> lrange key1 0 -1
(empty array)
127.0.0.1:6379> lrange key2 0 -1
1) "0"
2) "7"
3) "8"
4) "9"
3.集合

集合与列表的不同之处在于,列表可以存储多个相同的字符串,而集合则通过使用散列表来保证每个字符串都是不相同的,集合使用无序的方式存储元素,不能像列表一样从一端插入,另一端弹出。

常用命令

命令

描述

sadd

将一个或多个元素添加到集合,并返回与集合元素不重复的元素数量

srem

将一个或多个元素从集合移除,并返回被移除元素的数量

sismember

检查某个元素是否存在于集合中

scard

返回集合包含的元素的数量

smembers

返回集合包含的所有元素

srandmember

从集合里随机返回一个或多个元素,当count为正数时,返回的随机元素不会重复,当count为负数时,返回的随机元素可能会重复

spop

随机的移除集合中的一个元素,并返回被移除的元素

smove

如果source集合包含元素item,则从source集合移除元素item,并将元素添加到集合dest,移除成功返回1,失败返回0

代码语言:javascript
复制
127.0.0.1:6379> sadd key1 1 2 3 4
(integer) 4
127.0.0.1:6379> srem key1 1 2
(integer) 2
127.0.0.1:6379> sismember key1 2
(integer) 0
127.0.0.1:6379> sismember key1 3
(integer) 1
127.0.0.1:6379> scard key1
(integer) 2
127.0.0.1:6379> smembers key1
1) "3"
2) "4"
127.0.0.1:6379> srandmember key1 1
1) "4"
127.0.0.1:6379> srandmember key1 2
1) "3"
2) "4"
127.0.0.1:6379> srandmember key1 -1
1) "4"
127.0.0.1:6379> srandmember key1 -2
1) "3"
2) "3"
127.0.0.1:6379> srandmember key1 -2
1) "3"
2) "4"
127.0.0.1:6379> spop key1
"4"
127.0.0.1:6379> smembers key1
1) "3"
127.0.0.1:6379> del key1
(integer) 1
127.0.0.1:6379> sadd key1 a b c d
(integer) 4
127.0.0.1:6379> sadd key2 e f g h
(integer) 4
127.0.0.1:6379> smove key1 key2 a
(integer) 1
127.0.0.1:6379> smove key1 key2 z
(integer) 0
127.0.0.1:6379> smembers key1
1) "b"
2) "c"
3) "d"
127.0.0.1:6379> smembers key2
1) "h"
2) "g"
3) "f"
4) "e"
5) "a"

用于组合和处理多个集合的命令

命令

描述

sdiff

返回那些存在于第一个集合但不存在于其他集合中的元素(差集)

sdiffstore

将那些存在于第一个集合但不存在于其他集合中的元素存储到dest键里面(差集)

sinter

返回那些同时存在于所有集合中的元素(交集)

sinterstore

将那些同时存在于所有集合中的元素存储到dest键里(交集)

sunion

返回那些至少存在于一个集合中的元素(并集)

sunionstore

将那些至少存在于一个集合中的元素存储到dest键里(并集)

代码语言:javascript
复制
127.0.0.1:6379> sadd key1 a b c d e f g
(integer) 7
127.0.0.1:6379> sadd key2 a b c h i j k
(integer) 7
127.0.0.1:6379> sdiff key1 key2
1) "g"
2) "e"
3) "f"
4) "d"
127.0.0.1:6379> sdiffstore dest key1 key2
(integer) 4
127.0.0.1:6379> smembers dest
1) "g"
2) "e"
3) "f"
4) "d"
127.0.0.1:6379> sinter key1 key2
1) "a"
2) "b"
3) "c"
127.0.0.1:6379> sinterstore dest2 key1 key2
(integer) 3
127.0.0.1:6379> smembers dest2
1) "b"
2) "c"
3) "a"
127.0.0.1:6379> sunion key1 key2
 1) "g"
 2) "d"
 3) "e"
 4) "i"
 5) "j"
 6) "b"
 7) "f"
 8) "a"
 9) "k"
10) "c"
11) "h"
127.0.0.1:6379> sunionstore dest3 key1 key2
(integer) 11
127.0.0.1:6379> smembers dest3
 1) "g"
 2) "d"
 3) "e"
 4) "i"
 5) "j"
 6) "b"
 7) "f"
 8) "a"
 9) "k"
10) "c"
11) "h"
4.散列

Redis的散列可以存储多个键值对之间的映射,和字符串一样,散列存储的值既可以是字符串也可以是数字值,并且同样可以对数字值执行自增和自减的操作。

常用命令

命令

描述

hset

在散列里面关联起给定的键值对

hget

获取指定散列键的值

hgetall

获取散列包含的所有键值对

hdel

如果给定键存在于散列里面,那么移除这个键

代码语言:javascript
复制
127.0.0.1:6379> hset key1 k1 v1
(integer) 1
127.0.0.1:6379> hset key1 k2 v1
(integer) 1
127.0.0.1:6379> hset key1 k3 v3
(integer) 1
127.0.0.1:6379> hgetall key1
1) "k1"
2) "v1"
3) "k2"
4) "v1"
5) "k3"
6) "v3"
127.0.0.1:6379> hget key1 k2
"v1"
127.0.0.1:6379> hdel key1 k2
(integer) 1
127.0.0.1:6379> hgetall key1
1) "k1"
2) "v1"
3) "k3"
4) "v3"

用于添加和删除键值对的散列操作

命令

描述

hmget

从散列里面获取一个或多个键的值

hmset

为散列里面的一个或多个键设置值

hdel

删除散列里面的一个或多个键值对,返回成功找到并删除的键值对的数量

hlen

返回散列包含的键值对数量

代码语言:javascript
复制
127.0.0.1:6379> hmset key2 k1 v1 k2 v2 k3 v3 k4 v4
OK
127.0.0.1:6379> hmget key2 k1 k2 k3
1) "v1"
2) "v2"
3) "v3"
127.0.0.1:6379> hlen key2
(integer) 4
127.0.0.1:6379> hdel key2 k1 k2 k3 k4
(integer) 4
127.0.0.1:6379> hlen key2
(integer) 0

散列更高级的特性

命令

描述

hexists

检查给定键是否存在与散列中

hkeys

获取散列包含的所有键

hvals

获取散列包含的所有值

hgetall

获取散列包含的所有键值对

hincrby

将键key存储的值加上整数increment

hincrbyfloat

将键key存储的值加上浮点数increment

代码语言:javascript
复制
127.0.0.1:6379> hmset key1 k1 1 k2 2 k3 3 k4 4
OK
127.0.0.1:6379> hexists key1 k3
(integer) 1
127.0.0.1:6379> hkeys key1
1) "k1"
2) "k2"
3) "k3"
4) "k4"
127.0.0.1:6379> hvals key1
1) "1"
2) "2"
3) "3"
4) "4"
127.0.0.1:6379> hgetall key1
1) "k1"
2) "1"
3) "k2"
4) "2"
5) "k3"
6) "3"
7) "k4"
8) "4"
127.0.0.1:6379> hincrby key1 k1 10
(integer) 11
127.0.0.1:6379> hincrbyfloat key1 k1 10
"21"
127.0.0.1:6379> 
5.有序集合

有序集合的键称为成员(member),值称为分值(score),分值必须为浮点数,有序集合成员不允许重复,但分值却可以重复,有序集合通过分值为集合中的成员进行从大到小的排序。

常用命令

命令

描述

zadd

将带有给定分值的成员添加到有序集合里面

zrem

从有序集合里面移除给定的成员,并返回被移除成员的数量

zcard

返回有序集合包含的成员数量

zincrby

将member成员的分值加上increment

zcount

返回分值介于min和max(这里指的是分值)之间的成员数量

zrank

返回成员member在有序集合中的排名

zscore

返回成员member的分值

zrange

返回有序集合中排名介于start和stop(这里指的是下标索引,而不是分值)之间的成员,如果给定了可选的withscores选项,那么命令会将成员的分值也一并返回

代码语言:javascript
复制
127.0.0.1:6379> zadd key1 5 m5 4 m4 3 m3 2 m2 1 m1
(integer) 5
127.0.0.1:6379> zcard key1
(integer) 5
127.0.0.1:6379> zrange key1 0 4 withscores
 1) "m1"
 2) "1"
 3) "m2"
 4) "2"
 5) "m3"
 6) "3"
 7) "m4"
 8) "4"
 9) "m5"
10) "5"
127.0.0.1:6379> zrem key1 m5
(integer) 1
127.0.0.1:6379> zrange key1 0 3 withscores
1) "m1"
2) "1"
3) "m2"
4) "2"
5) "m3"
6) "3"
7) "m4"
8) "4"
127.0.0.1:6379> zincrby key1 10 m1
"11"
127.0.0.1:6379> zrange key1 0 3 withscores
1) "m2"
2) "2"
3) "m3"
4) "3"
5) "m4"
6) "4"
7) "m1"
8) "11"
127.0.0.1:6379> zcount key1 0 11
(integer) 4
127.0.0.1:6379> zrank key1 m2
(integer) 0
127.0.0.1:6379> zrank key1 m3
(integer) 1
127.0.0.1:6379> zrank key1 m4
(integer) 2
127.0.0.1:6379> zrank key1 m1
(integer) 3
127.0.0.1:6379> zscore key1 m1
"11"

有序集合的范围型数据获取命令和范围型数据删除命令,以及并集命令的交集命令

命令

描述

zrevrank

返回有序集合里成员member的排名,成员按照分值从大到小排序

zrevrange

返回有序集合给定排名范围内的成员,成员按照分值从大到小排序

zrangebyscore

返回有序集合中分值介于min和max之间的所有成员,从小到大

zrevrangebyscore

返回有序集合中分值介于max和min之间的所有成员,从大到小

zremrangebyrank

移除有序集合中排名介于start和stop之间的所有成员

zremrangebyscore

移除有序集合中分数介于min和max之间的所有成员

zinterstore

对指定的有序集合执行类似于集合的交集运算,这里的交集运算表示对指定数量的有序集合中键的分值相加,并把结果输出到destination组成新的有序集合

zunionstore

对给定的有序集合执行类似于集合的并集运算,这里的并集运算指在指定数量个有序集合都包含同一个成员的情况下,可在末尾加上 aggregate sum|min|max,会将 和|最小|最大 的那个分值输出到destination组成新的有序集合

代码语言:javascript
复制
127.0.0.1:6379> zadd key1 1 k1 3 k3 2 k2 5 k5 4 k4
(integer) 5
127.0.0.1:6379> zrevrank key1 k5
(integer) 0
127.0.0.1:6379> zrevrank key1 k1
(integer) 4
127.0.0.1:6379> zrevrange key1 0 4
1) "k5"
2) "k4"
3) "k3"
4) "k2"
5) "k1"
127.0.0.1:6379> zrevrange key1 0 4 withscores
 1) "k5"
 2) "5"
 3) "k4"
 4) "4"
 5) "k3"
 6) "3"
 7) "k2"
 8) "2"
 9) "k1"
10) "1"
127.0.0.1:6379> zrangebyscore key1 1 5
1) "k1"
2) "k2"
3) "k3"
4) "k4"
5) "k5"
127.0.0.1:6379> zrangebyscore key1 1 5 withscores
 1) "k1"
 2) "1"
 3) "k2"
 4) "2"
 5) "k3"
 6) "3"
 7) "k4"
 8) "4"
 9) "k5"
10) "5"
127.0.0.1:6379> zrevrangebyscore key1 5 1 withscores
 1) "k5"
 2) "5"
 3) "k4"
 4) "4"
 5) "k3"
 6) "3"
 7) "k2"
 8) "2"
 9) "k1"
10) "1"
127.0.0.1:6379> zremrangebyrank key1 1 2
(integer) 2
127.0.0.1:6379> zrange key1 0 -1 withscores
1) "k1"
2) "1"
3) "k4"
4) "4"
5) "k5"
6) "5"
127.0.0.1:6379> zremrangebyscore key1 4 5
(integer) 2
127.0.0.1:6379> zrange key1 0 -1 withscores
1) "k1"
2) "1"

127.0.0.1:6379> del key1
(integer) 1

127.0.0.1:6379> zadd key1 1 k1 2 k2 3 k3 4 k4 5 k5
(integer) 5
127.0.0.1:6379> zadd key2 1 k1 2 k2 3 k3 4 k4 5 k5
(integer) 5
127.0.0.1:6379> zinterstore dest 2 key1 key2	//这里的数字2表示后面跟的键的个数
(integer) 5
127.0.0.1:6379> zrange dest 0 -1 withscores
 1) "k1"
 2) "2"
 3) "k2"
 4) "4"
 5) "k3"
 6) "6"
 7) "k4"
 8) "8"
 9) "k5"
10) "10"

127.0.0.1:6379> zadd key3 1 k1 2 k2 3 k3
(integer) 3
127.0.0.1:6379> zadd key4 0 k4 1 k3 4 k2
(integer) 3
127.0.0.1:6379> zunionstore dest2 2 key3 key4 aggregate sum
(integer) 4
127.0.0.1:6379> zrange dest2 0 -1 withscores
1) "k4"
2) "0"
3) "k1"
4) "1"
5) "k3"
6) "4"
7) "k2"
8) "6"
127.0.0.1:6379> zunionstore dest3 2 key3 key4 aggregate min
(integer) 4
127.0.0.1:6379> zrange dest3 0 -1 withscores
1) "k4"
2) "0"
3) "k1"
4) "1"
5) "k3"
6) "1"
7) "k2"
8) "2"
127.0.0.1:6379> zunionstore dest4 2 key3 key4 aggregate max
(integer) 4
127.0.0.1:6379> zrange dest4 0 -1 withscores
1) "k4"
2) "0"
3) "k1"
4) "1"
5) "k3"
6) "3"
7) "k2"
8) "4"

二、其他命令

1.排序

sort命令可以对列表、集合、有序集合进行排序,类似SQL语言里的order by子句。

命令

描述

sort

sort source-key [by pattern] [limit offset count] [get pattern [get pattern …]] [asc|desc] [alpha] [store dest-key],根据给定的选项,对输入列表、集合或有序集合进行排序,然后返回或者存储排序的结果

代码语言:javascript
复制
127.0.0.1:6379> rpush key1 1 9 2 8 3 7 4 6 5 0
(integer) 10
127.0.0.1:6379> sort key1 asc store dest
(integer) 10
127.0.0.1:6379> lrange dest 0 -1
 1) "0"
 2) "1"
 3) "2"
 4) "3"
 5) "4"
 6) "5"
 7) "6"
 8) "7"
 9) "8"
10) "9"
127.0.0.1:6379> sort key1 desc store dest1
(integer) 10
127.0.0.1:6379> lrange dest1 0 -1
 1) "9"
 2) "8"
 3) "7"
 4) "6"
 5) "5"
 6) "4"
 7) "3"
 8) "2"
 9) "1"
10) "0"
127.0.0.1:6379> rpush key2 7 15 23 110
(integer) 4
//根据字母表顺序对元素进行排序
127.0.0.1:6379> sort key2 alpha store dest4
(integer) 4
127.0.0.1:6379> lrange dest4 0 -1
1) "110"
2) "15"
3) "23"
4) "7"
127.0.0.1:6379> lrange key2 0 -1
1) "7"
2) "15"
3) "23"
4) "110"
2.基本的Redis事务

为了可以在不同类型之间移动元素,Redis有5个命令可以让用户在不被打断的情况下对多个键执行操作,分别是:watch、multi、exec、unwatch、discard。

4.键的过期时间

有些数据可能在某个时间点之后就不再有用了,可以设置Redis的过期时间让一个键在给定的时限之后自动被删除。

命令

描述

persist

移除键的过期时间

ttl

查看给定键距离过期还有多少秒

expire

让给定键在指定的秒数之后过期

expireat

将给定键的过期时间设置为给定的UNIX时间戳

pttl

查看给定键距离过期时间还有多少毫秒

pexpire

让给定键在指定的毫秒数之后过期

pexpireat

将一个毫秒级精度的UNIX时间戳设置为给定键的过期时间

代码语言:javascript
复制
127.0.0.1:6379> rpush key1 123
(integer) 1
127.0.0.1:6379> expire key1 600
(integer) 1
127.0.0.1:6379> ttl key1
(integer) 597
127.0.0.1:6379> ttl key1
(integer) 596
127.0.0.1:6379> ttl key1
(integer) 595
127.0.0.1:6379> pttl key1
(integer) 590098
127.0.0.1:6379> persist key1
(integer) 1
127.0.0.1:6379> ttl key1
(integer) -1

//我现在是2021-10-21 14:11:19,把停止时间设置为15:00:00,时间戳为1634799600,相差49分钟41秒左右,即2909秒左右
127.0.0.1:6379> rpush key1 1234
(integer) 1
127.0.0.1:6379> expireat key1 1634799600
(integer) 1
127.0.0.1:6379> ttl key1
(integer) 2909
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-10-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、5种数据结构命令
    • 1.字符串
      • 2.列表
        • 3.集合
          • 4.散列
            • 5.有序集合
            • 二、其他命令
              • 1.排序
                • 2.基本的Redis事务
                  • 4.键的过期时间
                  相关产品与服务
                  对象存储
                  对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
                  领券
                  问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档